KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > model > impl > xdm > SyncTest


1 /*
2  * MergeTest.java
3  * JUnit based test
4  *
5  * Created on October 28, 2005, 3:40 PM
6  */

7
8 package org.netbeans.modules.xml.schema.model.impl.xdm;
9
10 import java.beans.PropertyChangeEvent JavaDoc;
11 import java.beans.PropertyChangeListener JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import javax.swing.text.Document JavaDoc;
16 import javax.swing.undo.UndoManager JavaDoc;
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 JavaDoc;
31 import org.w3c.dom.Node JavaDoc;
32 import org.w3c.dom.NodeList JavaDoc;
33 import org.w3c.dom.Text JavaDoc;
34
35 /**
36  *
37  * @author ajit
38  */

39 public class SyncTest extends TestCase {
40     
41     public static final String JavaDoc TEST_XSD = "resources/PurchaseOrder.xsd";
42     public static final String JavaDoc TEST_XSD_OP = "resources/PurchaseOrderSyncTest.xsd";
43     
44     private SchemaModel model;
45     private TestPropertyListener plistener;
46     private TestComponentListener clistener;
47     
48     public SyncTest(String JavaDoc testName) {
49         super(testName);
50     }
51
52     @Override JavaDoc
53     protected void setUp() throws Exception JavaDoc {
54     }
55  
56     private void setup(Model model) throws Exception JavaDoc {
57         plistener = new TestPropertyListener();
58         model.addPropertyChangeListener(plistener);
59         clistener = new TestComponentListener();
60         model.addComponentListener(clistener);
61     }
62     
63     @Override JavaDoc
64     protected void tearDown() {
65         TestCatalogModel.getDefault().clearDocumentPool();
66     }
67     
68     static class TestPropertyListener implements PropertyChangeListener JavaDoc {
69         ArrayList JavaDoc<PropertyChangeEvent JavaDoc> events = new ArrayList JavaDoc<PropertyChangeEvent JavaDoc>();
70         public void propertyChange(PropertyChangeEvent JavaDoc evt) {
71             events.add(evt);
72         }
73         
74         public void assertNoEvents(String JavaDoc propertyName, Object JavaDoc source) {
75             for (PropertyChangeEvent JavaDoc 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 JavaDoc propertyName, int expectedCount) {
83             int found = 0;
84             for (PropertyChangeEvent JavaDoc 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 JavaDoc propertyName, Object JavaDoc source) {
93             for (PropertyChangeEvent JavaDoc e : events) {
94                 if (propertyName.equals(e.getPropertyName()) && e.getSource() == source) {
95                     return; //matched
96
}
97             }
98             assertTrue("Expect property change event "+propertyName, false);
99         }
100         
101         public void assertEvent(String JavaDoc propertyName, Object JavaDoc old, Object JavaDoc now) {
102             for (PropertyChangeEvent JavaDoc 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; //matched
113
}
114             }
115             assertTrue("Expect property change event on "+propertyName+" with "+old+" and "+now, false);
116         }
117     }
118     
119     class TestComponentListener implements ComponentListener {
120         ArrayList JavaDoc<ComponentEvent> accu = new ArrayList JavaDoc<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 JavaDoc<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 JavaDoc {
168         model = Util.loadSchemaModel(TEST_XSD);
169         Document JavaDoc 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 JavaDoc {
186         SchemaModel model = Util.loadSchemaModel("resources/SyncTestNonGlobal_before.xsd");
187         Document JavaDoc doc = AbstractDocumentModel.class.cast(model).getBaseDocument();
188         SchemaImpl schema = (SchemaImpl) model.getSchema();
189         Node JavaDoc schemaNode = schema.getPeer();
190         GlobalElementImpl gei = (GlobalElementImpl) schema.getElements().iterator().next();
191         Node JavaDoc elementNode = gei.getPeer();
192         LocalComplexTypeImpl lcti = (LocalComplexTypeImpl) gei.getInlineType();
193         Node JavaDoc lctiNode = lcti.getPeer();
194         SequenceImpl seq = (SequenceImpl) lcti.getDefinition();
195         
196         Util.setDocumentContentTo(doc, "resources/SyncTestNonGlobal_after.xsd");
197         model.sync();
198         
199         //make sure elements and nodes on the path before sequence is same, only peer updated
200
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 JavaDoc {
214         SchemaModel model = Util.loadSchemaModel("resources/SyncTestGlobal_before.xsd");
215         Document JavaDoc doc = AbstractDocumentModel.class.cast(model).getBaseDocument();
216         SchemaImpl schema = (SchemaImpl) model.getSchema();
217         Node JavaDoc 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         //make sure componentson the path before sequence is same, only peer get updated
224
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 JavaDoc {
232         SchemaModel model = Util.loadSchemaModel("resources/SyncTestGlobal_before.xsd");
233         Document JavaDoc 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         //make sure elements and nodes on the path before sequence is same
240
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 JavaDoc {
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 JavaDoc<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 JavaDoc nl = htmlDoc.getDocumentationElement().getChildNodes();
268         Element JavaDoc n = (Element JavaDoc) nl.item(1);
269         n = (Element JavaDoc) n.getChildNodes().item(1);
270         Text JavaDoc textNode = (Text JavaDoc) n.getChildNodes().item(0);
271         assertEquals("html documentation sync", "Testing CHANGED documenation elemnent", textNode.getNodeValue());
272         
273         n = (Element JavaDoc) appinfo.getAppInfoElement().getChildNodes().item(1);
274         textNode = (Text JavaDoc) n.getChildNodes().item(0);
275         assertEquals("appinfo element sync", "checkForPrimesCHANGED", textNode.getNodeValue());
276         n = (Element JavaDoc) appinfo.getAppInfoElement().getChildNodes().item(3);
277         textNode = (Text JavaDoc) n.getChildNodes().item(0);
278         assertEquals("appinfo element sync", "checkForPrimesADDED", textNode.getNodeValue());
279     }
280     
281     public void testLocalElementReferenceTransform() throws Exception JavaDoc {
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 JavaDoc {
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 JavaDoc<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 JavaDoc {
317         SchemaModel model = Util.loadSchemaModel("resources/Empty.xsd");
318         UndoManager JavaDoc ur = new UndoManager JavaDoc();
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"); // edit #1
326
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 JavaDoc {
344         SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder.xsd");
345         UndoManager JavaDoc ur = new UndoManager JavaDoc();
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 JavaDoc {
362         SchemaModel model = Util.loadSchemaModel("resources/PurchaseOrder.xsd");
363         TestComponentListener listener = new TestComponentListener();
364         model.addComponentListener(listener);
365         UndoManager JavaDoc ur = new UndoManager JavaDoc();
366         model.addUndoableEditListener(ur);
367         
368         ArrayList JavaDoc<GlobalComplexType> types = new ArrayList JavaDoc(model.getSchema().getComplexTypes());
369         GlobalComplexType type = types.get(1);
370         assertEquals("USAddress", type.getName());
371         Sequence seq = (Sequence) type.getDefinition();
372         java.util.List JavaDoc<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 JavaDoc nameNode = name.getPeer();
378         Node JavaDoc 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 JavaDoc nameNode1 = name.getPeer();
395         Node JavaDoc 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 JavaDoc nameNode2 = name.getPeer();
404         Node JavaDoc 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 JavaDoc nameNode3 = name.getPeer();
417         Node JavaDoc 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 JavaDoc {
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 JavaDoc {
448         SchemaModel model = Util.loadSchemaModel(TEST_XSD);
449         UndoManager JavaDoc um = new UndoManager JavaDoc();
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 JavaDoc {
466         SchemaModel model = Util.loadSchemaModel(TEST_XSD);
467         UndoManager JavaDoc um = new UndoManager JavaDoc();
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 JavaDoc {
486         SchemaModel model = Util.loadSchemaModel("resources/undoredotest.xsd");
487         UndoManager JavaDoc um = new UndoManager JavaDoc();
488         model.addUndoableEditListener(um);
489         
490         GlobalComplexType gct = (GlobalComplexType)Util.findComponent(
491                 model.getSchema(), "/schema/complexType[@name='USAddress']");
492         java.util.List JavaDoc<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 JavaDoc {
514         SchemaModel model = Util.loadSchemaModel("resources/PO_copypasteundoSequence.xsd");
515         UndoManager JavaDoc um = new UndoManager JavaDoc();
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 JavaDoc {
536         SchemaModel model = Util.loadSchemaModel("resources/loanApplication_id.xsd");
537         UndoManager JavaDoc um = new UndoManager JavaDoc();
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 JavaDoc {
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 JavaDoc {
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 JavaDoc 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 JavaDoc {
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()); // maybe not
586

587         String JavaDoc 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 JavaDoc {
600         SchemaModel model = Util.loadSchemaModel("resources/Empty_1.xsd");
601         setup(model);
602         Node JavaDoc 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 JavaDoc {
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