1 7 8 package org.netbeans.modules.xml.schema.model.impl.xdm; 9 10 import java.beans.PropertyChangeEvent ; 11 import java.beans.PropertyChangeListener ; 12 import java.io.IOException ; 13 import java.util.ArrayList ; 14 import java.util.Iterator ; 15 import javax.swing.text.Document ; 16 import javax.swing.undo.UndoManager ; 17 import junit.framework.*; 18 import org.netbeans.modules.xml.schema.model.*; 19 import org.netbeans.modules.xml.schema.model.impl.GlobalElementImpl; 20 import org.netbeans.modules.xml.schema.model.impl.GlobalSimpleTypeImpl; 21 import org.netbeans.modules.xml.schema.model.impl.LocalComplexTypeImpl; 22 import org.netbeans.modules.xml.schema.model.impl.SchemaAttributes; 23 import org.netbeans.modules.xml.schema.model.impl.SchemaImpl; 24 import org.netbeans.modules.xml.schema.model.impl.SequenceImpl; 25 import org.netbeans.modules.xml.xam.ComponentEvent; 26 import org.netbeans.modules.xml.xam.ComponentListener; 27 import org.netbeans.modules.xml.xam.Model; 28 import org.netbeans.modules.xml.xam.dom.AbstractDocumentModel; 29 import org.netbeans.modules.xml.xam.dom.DocumentComponent; 30 import org.w3c.dom.Element ; 31 import org.w3c.dom.Node ; 32 import org.w3c.dom.NodeList ; 33 import org.w3c.dom.Text ; 34 35 39 public class SyncTest extends TestCase { 40 41 public static final String TEST_XSD = "resources/PurchaseOrder.xsd"; 42 public static final String TEST_XSD_OP = "resources/PurchaseOrderSyncTest.xsd"; 43 44 private SchemaModel model; 45 private TestPropertyListener plistener; 46 private TestComponentListener clistener; 47 48 public SyncTest(String testName) { 49 super(testName); 50 } 51 52 @Override 53 protected void setUp() throws Exception { 54 } 55 56 private void setup(Model model) throws Exception { 57 plistener = new TestPropertyListener(); 58 model.addPropertyChangeListener(plistener); 59 clistener = new TestComponentListener(); 60 model.addComponentListener(clistener); 61 } 62 63 @Override 64 protected void tearDown() { 65 TestCatalogModel.getDefault().clearDocumentPool(); 66 } 67 68 static class TestPropertyListener implements PropertyChangeListener { 69 ArrayList <PropertyChangeEvent > events = new ArrayList <PropertyChangeEvent >(); 70 public void propertyChange(PropertyChangeEvent evt) { 71 events.add(evt); 72 } 73 74 public void assertNoEvents(String propertyName, Object source) { 75 for (PropertyChangeEvent e : events) { 76 if (propertyName.equals(e.getPropertyName()) && e.getSource() == source) { 77 assertTrue("Expect no property change events "+propertyName, false); 78 } 79 } 80 } 81 82 public void assertEventCount(String propertyName, int expectedCount) { 83 int found = 0; 84 for (PropertyChangeEvent e : events) { 85 if (propertyName.equals(e.getPropertyName())) { 86 found++; 87 } 88 } 89 assertEquals("Event count mismatched", expectedCount, found); 90 } 91 92 public void assertEvent(String propertyName, Object source) { 93 for (PropertyChangeEvent e : events) { 94 if (propertyName.equals(e.getPropertyName()) && e.getSource() == source) { 95 return; } 97 } 98 assertTrue("Expect property change event "+propertyName, false); 99 } 100 101 public void assertEvent(String propertyName, Object old, Object now) { 102 for (PropertyChangeEvent e : events) { 103 if (propertyName.equals(e.getPropertyName())) { 104 if (old != null && ! old.equals(e.getOldValue()) || 105 old == null && e.getOldValue() != null) { 106 continue; 107 } 108 if (now != null && ! now.equals(e.getNewValue()) || 109 now == null && e.getNewValue() != null) { 110 continue; 111 } 112 return; } 114 } 115 assertTrue("Expect property change event on "+propertyName+" with "+old+" and "+now, false); 116 } 117 } 118 119 class TestComponentListener implements ComponentListener { 120 ArrayList <ComponentEvent> accu = new ArrayList <ComponentEvent>(); 121 public void valueChanged(ComponentEvent evt) { 122 accu.add(evt); 123 } 124 public void childrenAdded(ComponentEvent evt) { 125 accu.add(evt); 126 } 127 public void childrenDeleted(ComponentEvent evt) { 128 accu.add(evt); 129 } 130 public void reset() { accu.clear(); } 131 public int getEventCount() { return accu.size(); } 132 public java.util.List <ComponentEvent> getEvents() { return accu; } 133 134 private void assertEvent(ComponentEvent.EventType type, DocumentComponent source) { 135 for (ComponentEvent e : accu) { 136 if (e.getEventType().equals(type) && 137 e.getSource() == source) { 138 return; 139 } 140 } 141 assertTrue("Expect component change event " + type +" on source " + source + 142 ". Instead received: " + accu, false); 143 } 144 145 public void assertEventCount(ComponentEvent.EventType type, int expectedCount) { 146 int found = 0; 147 for (ComponentEvent e : accu) { 148 if (type.equals(e.getEventType())) { 149 found++; 150 } 151 } 152 assertEquals("Event count mismatched", expectedCount, found); 153 } 154 155 private void assertNoEvents(ComponentEvent.EventType type, DocumentComponent source) { 156 for (ComponentEvent e : accu) { 157 if (e.getEventType().equals(type) && 158 e.getSource() == source) { 159 assertTrue("Expect component no change events " + type +" on source " + source + 160 ". Instead received: " + accu, false); 161 } 162 } 163 return; 164 } 165 } 166 167 public void testUpdateAtSchemaRoot() throws Exception { 168 model = Util.loadSchemaModel(TEST_XSD); 169 Document doc = AbstractDocumentModel.class.cast(model).getBaseDocument(); 170 171 Util.setDocumentContentTo(doc, TEST_XSD_OP); 172 model.sync(); 173 174 assertEquals("qualified", model.getSchema().getAttributeFormDefault().toString()); 175 assertEquals(3,model.getSchema().getElements().size()); 176 GlobalElement ge = (GlobalElement)model.getSchema().getElements().toArray()[2]; 177 assertEquals("comment2",ge.getName()); 178 assertEquals(2,model.getSchema().getComplexTypes().size()); 179 ElementReference poComment = (ElementReference) 180 Util.findComponent(model.getSchema(), "/schema/complexType[@name='PurchaseOrderType']/sequence/element[3]"); 181 assertEquals(1,poComment.getMinOccurs().intValue()); 182 assertEquals(1,model.getSchema().getSimpleTypes().size()); 183 } 184 185 public void testUpdateDirectParentOnly() throws Exception { 186 SchemaModel model = Util.loadSchemaModel("resources/SyncTestNonGlobal_before.xsd"); 187 Document doc = AbstractDocumentModel.class.cast(model).getBaseDocument(); 188 SchemaImpl schema = (SchemaImpl) model.getSchema(); 189 Node schemaNode = schema.getPeer(); 190 GlobalElementImpl gei = (GlobalElementImpl) schema.getElements().iterator().next(); 191 Node elementNode = gei.getPeer(); 192 LocalComplexTypeImpl lcti = (LocalComplexTypeImpl) gei.getInlineType(); 193 Node lctiNode = lcti.getPeer(); 194 SequenceImpl seq = (SequenceImpl) lcti.getDefinition(); 195 196 Util.setDocumentContentTo(doc, "resources/SyncTestNonGlobal_after.xsd"); 197 model.sync(); 198 199 assertSame("testUpdateElementOnly.schema", schema, model.getSchema()); 201 assertNotSame("testUpdateElementOnly.schema.node", schemaNode, schema.getPeer()); 202 assertSame("testUpdateElementOnly.element", gei, schema.getElements().iterator().next()); 203 assertNotSame("testUpdateElementOnly.element.node", elementNode, gei.getPeer()); 204 assertSame("testUpdateElementOnly.element.type", lcti, gei.getInlineType()); 205 assertNotSame("testUpdateElementOnly.element.type.node", lctiNode, lcti.getPeer()); 206 assertSame("parent component should be the same", seq, lcti.getDefinition()); 207 seq = (SequenceImpl) lcti.getDefinition(); 208 assertEquals("testUpdateElementOnly.element.type.seq.count", 3, seq.getContent().size()); 209 assertEquals("testUpdateElementOnly.element.type.seq.element2", "Office", ((LocalElement)seq.getContent().get(2)).getName()); 210 assertEquals("testUpdateElementOnly.element.type.seq.element1", "Branch", ((LocalElement)seq.getContent().get(1)).getName()); 211 } 212 213 public void testRemoveChildOfGlobalElement() throws Exception { 214 SchemaModel model = Util.loadSchemaModel("resources/SyncTestGlobal_before.xsd"); 215 Document doc = AbstractDocumentModel.class.cast(model).getBaseDocument(); 216 SchemaImpl schema = (SchemaImpl) model.getSchema(); 217 Node schemaNode = schema.getPeer(); 218 GlobalSimpleTypeImpl gst = (GlobalSimpleTypeImpl) schema.getSimpleTypes().iterator().next(); 219 220 Util.setDocumentContentTo(doc, "resources/SyncTestGlobal_after.xsd"); 221 model.sync(); 222 223 assertSame("testRemoveChildOfGlobalElement.schema", schema, model.getSchema()); 225 assertNotSame("testRemoveChildOfGlobalElement.schema.node", schemaNode, schema.getPeer()); 226 assertSame("parent component should be same as before sync", gst, schema.getSimpleTypes().iterator().next()); 227 assertNull("Annotation should have been remove", gst.getAnnotation()); 228 assertEquals("Attribute changed to new value", "allNNI", gst.getName()); 229 } 230 231 public void testChangeAttributeOnly() throws Exception { 232 SchemaModel model = Util.loadSchemaModel("resources/SyncTestGlobal_before.xsd"); 233 Document doc = AbstractDocumentModel.class.cast(model).getBaseDocument(); 234 Schema schema = model.getSchema(); 235 236 Util.setDocumentContentTo(doc, "resources/SyncTestGlobal_after2.xsd"); 237 model.sync(); 238 239 assertSame("testRemoveChildOfGlobalElement.schema", schema, model.getSchema()); 241 assertEquals("parent component should be same as before sync", "allNNI-changed", schema.getSimpleTypes().iterator().next().getName()); 242 } 243 244 public void testDocumentationText() throws Exception { 245 SchemaModel model = Util.loadSchemaModel("resources/loanApplication.xsd"); 246 TestPropertyListener plistener = new TestPropertyListener(); 247 TestComponentListener clistener = new TestComponentListener(); 248 model.addPropertyChangeListener(plistener); 249 model.addComponentListener(clistener); 250 251 Annotation ann = model.getSchema().getElements().iterator().next().getAnnotation(); 252 Iterator <Documentation> it = ann.getDocumentationElements().iterator(); 253 Documentation textDoc = it.next(); 254 Documentation htmlDoc = it.next(); 255 htmlDoc.getDocumentationElement(); 256 AppInfo appinfo = ann.getAppInfos().iterator().next(); 257 258 Util.setDocumentContentTo(model, "resources/loanApplication_annotationChanged.xsd"); 259 model.sync(); 260 261 clistener.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, textDoc); 262 plistener.assertEvent(Documentation.TEXT_CONTENT_PROPERTY, textDoc); 263 clistener.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, htmlDoc); 264 plistener.assertEvent(Documentation.TEXT_CONTENT_PROPERTY, htmlDoc); 265 266 assertEquals("text documentation sync", "A CHANGED loan application", textDoc.getContent()); 267 NodeList nl = htmlDoc.getDocumentationElement().getChildNodes(); 268 Element n = (Element ) nl.item(1); 269 n = (Element ) n.getChildNodes().item(1); 270 Text textNode = (Text ) n.getChildNodes().item(0); 271 assertEquals("html documentation sync", "Testing CHANGED documenation elemnent", textNode.getNodeValue()); 272 273 n = (Element ) appinfo.getAppInfoElement().getChildNodes().item(1); 274 textNode = (Text ) n.getChildNodes().item(0); 275 assertEquals("appinfo element sync", "checkForPrimesCHANGED", textNode.getNodeValue()); 276 n = (Element ) appinfo.getAppInfoElement().getChildNodes().item(3); 277 textNode = (Text ) n.getChildNodes().item(0); 278 assertEquals("appinfo element sync", "checkForPrimesADDED", textNode.getNodeValue()); 279 } 280 281 public void testLocalElementReferenceTransform() throws Exception { 282 SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder.xsd"); 283 GlobalComplexType gct = model.getSchema().getComplexTypes().iterator().next(); 284 Sequence seq = (Sequence) gct.getDefinition(); 285 assertEquals("setup", "PurchaseOrderType", gct.getName()); 286 assertTrue("setup PurchaseOrderType.seqence[2]", seq.getContent().get(2) instanceof ElementReference); 287 288 Util.setDocumentContentTo(model, "resources/PurchaseOrder_SyncElementRef.xsd"); 289 model.sync(); 290 291 LocalElement e = (LocalElement) seq.getContent().get(2); 292 assertEquals("element ref transformed to local", "comment", e.getName()); 293 assertEquals("element ref transformed to local", "string", e.getType().get().getName()); 294 295 Util.setDocumentContentTo(model, "resources/PurchaseOrder.xsd"); 296 model.sync(); 297 298 ElementReference er = (ElementReference) seq.getContent().get(2); 299 assertEquals("element ref transformed to local", "comment", er.getRef().get().getName()); 300 } 301 302 public void testMultipleAdd() throws Exception { 303 SchemaModel model = Util.loadSchemaModel("resources/SyncTestNonGlobal_before.xsd"); 304 GlobalElement ge = model.getSchema().getElements().iterator().next(); 305 LocalComplexType lct = (LocalComplexType) ge.getInlineType(); 306 Sequence seq = (Sequence) lct.getDefinition(); 307 java.util.List <SequenceDefinition> sdl = seq.getContent(); 308 assertEquals("setup", 2, sdl.size()); 309 310 Util.setDocumentContentTo(model, "resources/SyncTestNonGlobal_multiple_adds.xsd"); 311 model.sync(); 312 313 assertEquals("multiple add to sequence", 5, seq.getContent().size()); 314 } 315 316 public void testCreateGlobalElementUndoRedo() throws Exception { 317 SchemaModel model = Util.loadSchemaModel("resources/Empty.xsd"); 318 UndoManager ur = new UndoManager (); 319 model.addUndoableEditListener(ur); 320 SchemaComponentFactory fact = model.getFactory(); 321 GlobalElement ge = fact.createGlobalElement(); 322 323 model.startTransaction(); 324 model.getSchema().addElement(ge); 325 ge.setName("Foo"); LocalComplexType lct = fact.createLocalComplexType(); 327 Sequence seq = fact.createSequence(); 328 lct.setDefinition(seq); 329 ge.setInlineType(lct); 330 model.endTransaction(); 331 332 assertEquals(1, model.getSchema().getElements().size()); 333 ur.undo(); 334 assertEquals(0, model.getSchema().getElements().size()); 335 336 ur.redo(); 337 ge = model.getSchema().getElements().iterator().next(); 338 assertEquals("Foo", ge.getName()); 339 assertNotNull(ge.getInlineType()); 340 assertNotNull(((LocalComplexType)ge.getInlineType()).getDefinition()); 341 } 342 343 public void testSetAttributeOnGlobalComplexTypeUndoRedo() throws Exception { 344 SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder.xsd"); 345 UndoManager ur = new UndoManager (); 346 model.addUndoableEditListener(ur); 347 GlobalComplexType potype = model.getSchema().getComplexTypes().iterator().next(); 348 assertEquals("PurchaseOrderType", potype.getName()); 349 350 model.startTransaction(); 351 potype.setAbstract(Boolean.TRUE); 352 model.endTransaction(); 353 354 ur.undo(); 355 assertNull(potype.getAttribute(SchemaAttributes.ABSTRACT)); 356 357 ur.redo(); 358 assertNotNull(potype.getAttribute(SchemaAttributes.ABSTRACT)); 359 } 360 361 public void testCutAndPasteUndoRedo() throws Exception { 362 SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder.xsd"); 363 TestComponentListener listener = new TestComponentListener(); 364 model.addComponentListener(listener); 365 UndoManager ur = new UndoManager (); 366 model.addUndoableEditListener(ur); 367 368 ArrayList <GlobalComplexType> types = new ArrayList (model.getSchema().getComplexTypes()); 369 GlobalComplexType type = types.get(1); 370 assertEquals("USAddress", type.getName()); 371 Sequence seq = (Sequence) type.getDefinition(); 372 java.util.List <SequenceDefinition> content = seq.getContent(); 373 LocalElement name = (LocalElement) content.get(0); 374 assertEquals("name", name.getName()); 375 LocalElement street = (LocalElement) content.get(1); 376 assertEquals("street", street.getName()); 377 Node nameNode = name.getPeer(); 378 Node streetNode = street.getPeer(); 379 SequenceDefinition copyName = (SequenceDefinition) name.copy(seq); 380 SequenceDefinition copyStreet = (SequenceDefinition) street.copy(seq); 381 382 model.startTransaction(); 383 seq.removeContent(name); 384 seq.removeContent(street); 385 seq.addContent(copyStreet, 0); 386 seq.addContent(copyName, 1); 387 model.endTransaction(); 388 389 content = seq.getContent(); 390 name = (LocalElement) content.get(1); 391 street = (LocalElement) content.get(0); 392 assertEquals("name", name.getName()); 393 assertEquals("street", street.getName()); 394 Node nameNode1 = name.getPeer(); 395 Node streetNode1 = street.getPeer(); 396 397 ur.undo(); 398 content = seq.getContent(); 399 name = (LocalElement) content.get(0); 400 street = (LocalElement) content.get(1); 401 assertEquals("name", name.getName()); 402 assertEquals("street", street.getName()); 403 Node nameNode2 = name.getPeer(); 404 Node streetNode2 = street.getPeer(); 405 assertTrue(name.referencesSameNode(nameNode)); 406 assertTrue(street.referencesSameNode(streetNode)); 407 408 listener.reset(); 409 ur.redo(); 410 content = seq.getContent(); 411 assertEquals(2, content.size()); 412 name = (LocalElement) content.get(1); 413 street = (LocalElement) content.get(0); 414 assertEquals("name", name.getName()); 415 assertEquals("street", street.getName()); 416 Node nameNode3 = name.getPeer(); 417 Node streetNode3 = street.getPeer(); 418 assertTrue(name.referencesSameNode(nameNode1)); 419 assertTrue(street.referencesSameNode(streetNode1)); 420 421 listener.assertEvent(ComponentEvent.EventType.CHILD_REMOVED, seq); 422 listener.assertEvent(ComponentEvent.EventType.CHILD_ADDED, seq); 423 } 424 425 public void testRedefine() throws Exception { 426 SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder_redefine_0.xsd"); 427 Redefine redefine = model.getSchema().getRedefines().iterator().next(); 428 assertTrue(redefine.getChildren().isEmpty()); 429 430 Util.setDocumentContentTo(model, "resources/PurchaseOrder_redefine.xsd"); 431 model.sync(); 432 433 Redefine redefine2 = model.getSchema().getRedefines().iterator().next(); 434 assertTrue(redefine == redefine2); 435 assertEquals("foo2", redefine.getAttributeGroups().iterator().next().getName()); 436 assertEquals("foo1", redefine.getGroupDefinitions().iterator().next().getName()); 437 assertEquals("PurchaseOrderType", redefine.getComplexTypes().iterator().next().getName()); 438 assertEquals("allNNI", redefine.getSimpleTypes().iterator().next().getName()); 439 440 Util.setDocumentContentTo(model, "resources/PurchaseOrder_redefine_0.xsd"); 441 model.sync(); 442 443 assertTrue(redefine == redefine2); 444 assertTrue(redefine.getChildren().isEmpty()); 445 } 446 447 public void testSyncUndo() throws Exception { 448 SchemaModel model = Util.loadSchemaModel(TEST_XSD); 449 UndoManager um = new UndoManager (); 450 model.addUndoableEditListener(um); 451 452 GlobalComplexType gct = (GlobalComplexType)Util.findComponent( 453 model.getSchema(), "/schema/complexType[@name='PurchaseOrderType']"); 454 assertEquals(3, gct.getDefinition().getChildren().size()); 455 456 Util.setDocumentContentTo(model, "resources/PurchaseOrder_SyncUndo.xsd"); 457 model.sync(); 458 um.undo(); 459 assertEquals(3, gct.getDefinition().getChildren().size()); 460 461 um.redo(); 462 assertEquals(2, gct.getDefinition().getChildren().size()); 463 } 464 465 public void testSyncUndoRename() throws Exception { 466 SchemaModel model = Util.loadSchemaModel(TEST_XSD); 467 UndoManager um = new UndoManager (); 468 model.addUndoableEditListener(um); 469 assertEquals(2, model.getSchema().getElements().size()); 470 471 Util.setDocumentContentTo(model, "resources/PurchaseOrder_SyncUndoRename.xsd"); 472 model.sync(); 473 assertEquals(2, model.getSchema().getElements().size()); 474 assertEquals("purchaseOrder2", model.getSchema().getElements().iterator().next().getName()); 475 476 um.undo(); 477 assertEquals(2, model.getSchema().getElements().size()); 478 assertEquals("purchaseOrder", model.getSchema().getElements().iterator().next().getName()); 479 480 um.redo(); 481 assertEquals(2, model.getSchema().getElements().size()); 482 assertEquals("purchaseOrder2", model.getSchema().getElements().iterator().next().getName()); 483 } 484 485 public void testSyncUndoUndo() throws Exception { 486 SchemaModel model = Util.loadSchemaModel("resources/undoredotest.xsd"); 487 UndoManager um = new UndoManager (); 488 model.addUndoableEditListener(um); 489 490 GlobalComplexType gct = (GlobalComplexType)Util.findComponent( 491 model.getSchema(), "/schema/complexType[@name='USAddress']"); 492 java.util.List <SchemaComponent> seqChildren = gct.getDefinition().getChildren(); 493 494 assertEquals(3, seqChildren.size()); 495 496 Util.setDocumentContentTo(model, "resources/undoredotest1.xsd"); 497 model.sync(); 498 assertEquals(3, seqChildren.size()); 499 um.undo(); 500 assertEquals(3, seqChildren.size()); 501 um.redo(); 502 assertEquals(3, seqChildren.size()); 503 504 Util.setDocumentContentTo(model, "resources/undoredotest2.xsd"); 505 model.sync(); 506 assertEquals(3, seqChildren.size()); 507 um.undo(); 508 assertEquals(3, seqChildren.size()); 509 um.undo(); 510 assertEquals(3, seqChildren.size()); 511 } 512 513 public void testUndoSequenceCopy() throws Exception { 514 SchemaModel model = Util.loadSchemaModel("resources/PO_copypasteundoSequence.xsd"); 515 UndoManager um = new UndoManager (); 516 model.addUndoableEditListener(um); 517 518 GlobalComplexType gct = (GlobalComplexType)Util.findComponent( 519 model.getSchema(), "/schema/complexType[@name='Items']"); 520 Sequence seq1 = (Sequence) Util.findComponent( 521 model.getSchema(), "/schema/complexType[@name='USAddress']/sequence"); 522 assertEquals(1, gct.getDefinition().getChildren().size()); 523 assertEquals(5, seq1.getChildren().size()); 524 525 Sequence seq2 = (Sequence) seq1.copy(gct); 526 model.startTransaction(); 527 gct.setDefinition(seq2); 528 model.endTransaction(); 529 assertEquals(5, gct.getDefinition().getChildren().size()); 530 531 um.undo(); 532 assertEquals(1, gct.getDefinition().getChildren().size()); 533 } 534 535 public void testSyncAnnotationRemoveId() throws Exception { 536 SchemaModel model = Util.loadSchemaModel("resources/loanApplication_id.xsd"); 537 UndoManager um = new UndoManager (); 538 model.addUndoableEditListener(um); 539 540 Util.setDocumentContentTo(model, "resources/loanApplication_id_removed.xsd"); 541 model.sync(); 542 Annotation ann = model.getSchema().getElements().iterator().next().getAnnotation(); 543 assertNull(ann.getId()); 544 } 545 546 public void testSyncReformat() throws Exception { 547 SchemaModel model = Util.loadSchemaModel("resources/reformat_before.xsd"); 548 GlobalSimpleType type = Util.findGlobalSimpleType(model.getSchema(), "LoanType"); 549 setup(model); 550 551 Util.setDocumentContentTo(model, "resources/reformat_after.xsd"); 552 model.sync(); 553 554 plistener.assertEvent(DocumentComponent.TEXT_CONTENT_PROPERTY, type); 555 clistener.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, type); 556 assertNotNull(model.getSchema().getElements().iterator().next().getAnnotation()); 557 } 558 559 public void testSyncInvalidRoot() throws Exception { 560 SchemaModel model = Util.loadSchemaModel("resources/Empty.xsd"); 561 562 Util.setDocumentContentTo(model, "resources/InvalidRoot.xsd"); 563 try { 564 model.sync(); 565 assertFalse("Did not get IOException", true); 566 } catch(IOException ioe) { 567 assertEquals(model.getState(), Model.State.NOT_WELL_FORMED); 568 } 569 assertNotNull(model.getSchema()); 570 assertTrue(model.getSchema().getElements().isEmpty()); 571 572 Util.setDocumentContentTo(model, "resources/InvalidRoot_corrected.xsd"); 573 model.sync(); 574 assertEquals(1, model.getSchema().getElements().size()); 575 } 576 577 public void testSyncTwoSequences() throws Exception { 578 SchemaModel model = Util.loadSchemaModel("resources/Empty.xsd"); 579 setup(model); 580 581 Util.setDocumentContentTo(model, "resources/TwoSequences.xsd"); 582 model.sync(); 583 584 plistener.assertNoEvents(DocumentComponent.TEXT_CONTENT_PROPERTY, model.getSchema()); 585 clistener.assertEvent(ComponentEvent.EventType.CHILD_ADDED, model.getSchema()); 587 String xpath = "/xsd:schema/xsd:complexType"; 588 GlobalComplexType gct = (GlobalComplexType) Util.findComponent(model.getSchema(), xpath); 589 assertEquals("Get 2 seqences from generic getChildren", 2, gct.getChildren(Sequence.class).size()); 590 assertNotNull("Get 1 sequence from getDefinition", gct.getDefinition()); 591 592 Util.setDocumentContentTo(model, "resources/OneSequence.xsd"); 593 model.sync(); 594 assertEquals("Get 1 seqences from generic getChildren", 1, gct.getChildren(Sequence.class).size()); 595 Sequence seq = (Sequence)gct.getDefinition(); 596 assertEquals("billTo", ((LocalElement)seq.getContent().iterator().next()).getName()); 597 } 598 599 public void testComponentPeerTokensChange() throws Exception { 600 SchemaModel model = Util.loadSchemaModel("resources/Empty_1.xsd"); 601 setup(model); 602 Node peerBefore = model.getSchema().getPeer(); 603 604 Util.setDocumentContentTo(model, "resources/Schema_tokenChanges.xsd"); 605 model.sync(); 606 607 clistener.assertNoEvents(ComponentEvent.EventType.VALUE_CHANGED, model.getSchema()); 608 plistener.assertNoEvents(DocumentComponent.TEXT_CONTENT_PROPERTY, model.getSchema()); 609 assertNotSame(peerBefore, model.getSchema().getPeer()); 610 } 611 612 public void testAppInfoHavingChildrenElementsWithXsdLocalName() throws Exception { 613 SchemaModel model = Util.loadSchemaModel("resources/testAppInfo.xsd"); 614 setup(model); 615 616 AppInfo appInfo = model.getSchema().getAnnotation().getAppInfos().iterator().next(); 617 assertEquals("expect no children, got "+ appInfo.getChildren(), 0, appInfo.getChildren().size()); 618 619 Util.setDocumentContentTo(model, "resources/testAppInfo_after.xsd"); 620 model.sync(); 621 622 clistener.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, appInfo); 623 plistener.assertNoEvents(DocumentComponent.TEXT_CONTENT_PROPERTY, appInfo); 624 clistener.assertNoEvents(ComponentEvent.EventType.CHILD_REMOVED, appInfo); 625 clistener.assertNoEvents(ComponentEvent.EventType.CHILD_ADDED, appInfo); 626 } 627 } 628 | Popular Tags |