KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > text > structure > XMLDocumentModelTest


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.xml.text.structure;
20
21 import java.util.List JavaDoc;
22 import java.util.Vector JavaDoc;
23 import javax.swing.text.AttributeSet JavaDoc;
24 import javax.swing.text.BadLocationException JavaDoc;
25 import org.netbeans.editor.BaseDocument;
26 import org.netbeans.junit.NbTestCase;
27 import org.netbeans.modules.editor.structure.api.DocumentElement;
28 import org.netbeans.modules.editor.structure.api.DocumentElementEvent;
29 import org.netbeans.modules.editor.structure.api.DocumentElementListener;
30 import org.netbeans.modules.editor.structure.api.DocumentModel;
31 import org.netbeans.modules.editor.structure.api.DocumentModelException;
32 import org.netbeans.modules.editor.structure.api.DocumentModelListener;
33 import org.netbeans.modules.editor.structure.api.DocumentModelUtils;
34 import org.netbeans.modules.editor.structure.spi.DocumentModelProvider;
35 import org.netbeans.modules.xml.text.syntax.XMLKit;
36 import org.netbeans.modules.xml.text.test.TestBase;
37
38
39 /** XML DocumentModel provider unit tests
40  *
41  * @author Marek Fukala
42  */

43 public class XMLDocumentModelTest extends TestBase {
44     
45     private static final int MODEL_TIMEOUT = 500; //ms
46

47     BaseDocument doc = null;
48     
49     public XMLDocumentModelTest() {
50         super("xml-document-model-test");
51     }
52     
53     public void setUp() throws BadLocationException JavaDoc {
54     }
55     
56     protected void runTest() throws Throwable JavaDoc {
57         System.out.println(getName());
58         super.runTest();
59     }
60     //--------- test methods -----------
61
public void testModelBasis() throws DocumentModelException, BadLocationException JavaDoc {
62         //initialize documents used in tests
63
initDoc1();
64      
65         //set the document content
66
DocumentModel model = DocumentModel.getDocumentModel(doc);
67      
68         assertNotNull(model);
69      
70         assertNotNull(model.getDocument());
71      
72         DocumentElement root = model.getRootElement();
73         assertNotNull(root);
74      
75         assertNull(root.getParentElement());
76      
77         List JavaDoc children = root.getChildren();
78         assertEquals(2, children.size());
79      
80         DocumentElement rootel = root.getElement(1); //<root> element
81

82         //check parent
83
assertEquals(root, rootel.getParentElement());
84      
85         //check name and type
86
assertEquals("root", rootel.getName());
87         assertEquals(XMLDocumentModelProvider.XML_TAG, rootel.getType());
88      
89         //check content and offsets
90
assertEquals(21, rootel.getStartOffset());
91         assertEquals(55, rootel.getEndOffset());
92      
93         //check children count
94
assertEquals(2, rootel.getElementCount());
95      
96         //test children (A)
97
DocumentElement a = rootel.getElement(0);
98         //check parent
99
assertEquals(rootel, a.getParentElement());
100      
101         assertEquals( "a", a.getName());
102         assertEquals(XMLDocumentModelProvider.XML_TAG, a.getType());
103         //check content and offsets
104
assertEquals(27, a.getStartOffset());
105         assertEquals(37, a.getEndOffset());
106      
107         //test children (B)
108
DocumentElement b = rootel.getElement(1);
109         //check parent
110
assertEquals(rootel, b.getParentElement());
111      
112         assertEquals("b", b.getName());
113         assertEquals(XMLDocumentModelProvider.XML_TAG, b.getType());
114         //check content and offsets
115
assertEquals(38, b.getStartOffset());
116         assertEquals(48, b.getEndOffset());
117      
118         //test children of B (T)
119
DocumentElement t = b.getElement(0);
120         //check parent
121
assertEquals(b, t.getParentElement());
122      
123         assertEquals("...", t.getName());
124         assertEquals(XMLDocumentModelProvider.XML_CONTENT, t.getType());
125         //check content and offsets
126
assertEquals(41, t.getStartOffset());
127         assertEquals(44, t.getEndOffset());
128      
129     }
130      
131      
132     public void testAddElement() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
133         //initialize documents used in tests
134
initDoc1();
135         //set the document content
136
DocumentModel model = DocumentModel.getDocumentModel(doc);
137      
138         DocumentElement root = model.getRootElement();
139         DocumentElement rootTag = root.getElement(1); //get <root> element
140

141         //listen to model
142
final Vector JavaDoc addedElements = new Vector JavaDoc();
143         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
144             public void documentElementAdded(DocumentElement de) {
145                 addedElements.add(de);
146             }
147         });
148      
149         //listen to element
150
final Vector JavaDoc addedElements2 = new Vector JavaDoc();
151         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
152             public void elementAdded(DocumentElementEvent e) {
153                 addedElements2.add(e.getChangedChild());
154             }
155         });
156      
157         assertEquals(2, rootTag.getElementCount()); //has A, B children
158

159         //DocumentModelUtils.dumpElementStructure(root);
160

161         doc.insertString(27,"<new></new>",null);
162         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
163

164         //System.out.println(doc.getText(0, doc.getLength()));
165
//DocumentModelUtils.dumpElementStructure(root);
166

167         assertEquals(3, rootTag.getElementCount()); //has NEW, A, B children
168

169         //check events
170
assertEquals(1, addedElements.size());
171         assertEquals(1, addedElements2.size());
172      
173         DocumentElement newElement = rootTag.getElement(0);
174         //test children (B)
175
assertEquals("new", newElement.getName());
176         assertEquals(XMLDocumentModelProvider.XML_TAG, newElement.getType());
177         //check content and offsets
178
assertEquals(27, newElement.getStartOffset());
179         assertEquals(37, newElement.getEndOffset());
180      
181         //test new element has no children
182
assertEquals(0, newElement.getChildren().size());
183      
184         //test new element parent
185
DocumentElement newElementParent = newElement.getParentElement();
186         assertEquals(rootTag, newElementParent);
187      
188     }
189      
190     public void testRemoveEmptyTagElement() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
191         //initialize documents used in tests
192
initDoc1();
193         //set the document content
194
DocumentModel model = DocumentModel.getDocumentModel(doc);
195      
196         DocumentElement root = model.getRootElement();
197         DocumentElement rootTag = root.getElement(1); //get <root> element
198
DocumentElement aTag = rootTag.getElement(0); //get <a> element
199

200         //listen to model
201
final Vector JavaDoc removedElements = new Vector JavaDoc();
202         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
203             public void documentElementRemoved(DocumentElement de) {
204                 removedElements.add(de);
205             }
206         });
207      
208         //listen to element
209
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
210         aTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
211             public void elementRemoved(DocumentElementEvent e) {
212                 removedElements2.add(e.getChangedChild());
213             }
214         });
215      
216         assertEquals(1, aTag.getElementCount()); //has only C children
217

218         doc.remove(30,"<c/>".length());
219         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
220

221         assertEquals(1, removedElements.size());
222         assertEquals(1, removedElements2.size());
223      
224         assertEquals(0, aTag.getElementCount()); //has B children
225

226     }
227      
228     public void testRemoveTagElementWithTextContent() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
229         //initialize documents used in tests
230
initDoc1();
231         //set the document content
232
DocumentModel model = DocumentModel.getDocumentModel(doc);
233      
234         DocumentElement root = model.getRootElement();
235         DocumentElement rootTag = root.getElement(1); //get <root> element
236

237         //listen to model
238
final Vector JavaDoc removedElements = new Vector JavaDoc();
239         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
240             public void documentElementRemoved(DocumentElement de) {
241                 removedElements.add(de);
242             }
243         });
244      
245         //listen to element
246
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
247         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
248             public void elementRemoved(DocumentElementEvent e) {
249                 removedElements2.add(e.getChangedChild());
250             }
251         });
252      
253         assertEquals(2, rootTag.getElementCount()); //has A and B children
254

255         doc.remove(38,"<b>text</b>".length());
256         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
257

258         assertEquals(2, removedElements.size()); //two events - one for B and one for TEXT
259
assertEquals(2, removedElements2.size());
260      
261         assertEquals(1, rootTag.getElementCount()); //now has only A child
262

263     }
264      
265     public void testRemoveNestedElements() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
266         //initialize documents used in tests
267
initDoc1();
268         //set the document content
269
DocumentModel model = DocumentModel.getDocumentModel(doc);
270      
271         DocumentElement root = model.getRootElement();
272         DocumentElement rootTag = root.getElement(1); //get <root> element
273

274         //listen to model
275
final Vector JavaDoc removedElements = new Vector JavaDoc();
276         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
277             public void documentElementRemoved(DocumentElement de) {
278                 removedElements.add(de);
279             }
280         });
281      
282         //listen to element
283
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
284         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
285             public void elementRemoved(DocumentElementEvent e) {
286                 removedElements2.add(e.getChangedChild());
287             }
288         });
289      
290         assertEquals(2, rootTag.getElementCount()); //has A, B children
291

292 // DocumentModelUtils.dumpElementStructure(root);
293

294         doc.remove(27,"<a><c/></a>".length());
295         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
296

297 // System.out.println(doc.getText(0, doc.getLength()));
298
// DocumentModelUtils.dumpElementStructure(root);
299

300         //#63357 - [navigator] Inconsistece when deleted tag connects other two
301
//evaluation: empty elements of <c> and <a> stays in the structure and events are not fired!
302
assertEquals(2, removedElements.size());
303         assertEquals(2, removedElements2.size());
304      
305         assertEquals(1, rootTag.getElementCount()); //has B children
306

307     }
308      
309     public void testRemoveAndAddEntireDocumentContent() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
310         //initialize documents used in tests
311
initDoc1();
312         //set the document content
313
DocumentModel model = DocumentModel.getDocumentModel(doc);
314      
315         DocumentElement root = model.getRootElement();
316      
317 // System.out.println("AFTER INIT:::");
318
// DocumentModelUtils.dumpElementStructure(root);
319
// DocumentModelUtils.dumpModelElements(model);
320

321      
322         //listen to model
323
final Vector JavaDoc removedElements = new Vector JavaDoc();
324         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
325             public void documentElementRemoved(DocumentElement de) {
326                 removedElements.add(de);
327             }
328         });
329      
330         //listen to element
331
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
332         root.addDocumentElementListener(new DocumentElementListenerAdapter() {
333             public void elementRemoved(DocumentElementEvent e) {
334                 removedElements2.add(e.getChangedChild());
335             }
336         });
337      
338         //remove entire document content
339
doc.remove(0,doc.getLength());
340         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
341

342 // System.out.println("AFTER REMOVE:::");
343
// DocumentModelUtils.dumpElementStructure(root);
344
// DocumentModelUtils.dumpModelElements(model);
345

346         assertEquals(6, removedElements.size()); //all elements removed
347

348         //XXX probably should be only one element removed, but because of the
349
//elements removal mechanism, when entire document is erased and
350
//where all empty elements (startoffset == endoffset)
351
//are considered as children of root element the event is fired 6-times.
352
assertEquals(6, removedElements2.size()); //<root> removed
353

354         assertEquals(0, root.getElementCount()); //has not children
355

356         //insert the document content back
357

358         //listen to model
359
final Vector JavaDoc addedElements = new Vector JavaDoc();
360         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
361             public void documentElementAdded(DocumentElement de) {
362                 addedElements.add(de);
363             }
364         });
365      
366         //listen to element
367
final Vector JavaDoc addedElements2 = new Vector JavaDoc();
368         root.addDocumentElementListener(new DocumentElementListenerAdapter() {
369             public void elementAdded(DocumentElementEvent e) {
370                 addedElements2.add(e.getChangedChild());
371             }
372         });
373      
374         doc.insertString(0,"<?xml version='1.0'?><root><a><c/></a><b>text</b></root>",null);
375         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
376

377 // System.out.println("AFTER ADD>>>:::");
378
// DocumentModelUtils.dumpElementStructure(root);
379
// DocumentModelUtils.dumpModelElements(model);
380

381         //check events
382
assertEquals(6, addedElements.size()); //all elements added
383
assertEquals(2, addedElements2.size()); //<root> and PI added
384

385         assertEquals(2, root.getElementCount()); //has <root> and PI child
386

387         //check PI tag
388
DocumentElement piTag = root.getElement(0);
389         assertNotNull(piTag);
390      
391         //check root tag and its children
392
DocumentElement rootTag = root.getElement(1);
393         assertNotNull(rootTag);
394         //check basic properties of the root tag
395
assertEquals("root", rootTag.getName());
396         assertEquals(XMLDocumentModelProvider.XML_TAG, rootTag.getType());
397      
398         assertEquals(2, rootTag.getElementCount()); //has A and B children
399
assertEquals(0, piTag.getElementCount()); //has no children
400

401         DocumentElement aTag = rootTag.getElement(0);
402         DocumentElement bTag = rootTag.getElement(1);
403         assertNotNull(aTag);
404         assertEquals("a", aTag.getName());
405         assertNotNull(bTag);
406         assertEquals("b", bTag.getName());
407         assertEquals(1, aTag.getElementCount()); //has C children
408
assertEquals(1, bTag.getElementCount()); //has text children
409

410         DocumentElement cTag = aTag.getElement(0);
411         assertNotNull(cTag);
412         assertEquals("c", cTag.getName());
413         assertEquals(0, cTag.getElementCount()); //has no children
414

415         DocumentElement text = bTag.getElement(0);
416         assertNotNull(text);
417         assertEquals(XMLDocumentModelProvider.XML_CONTENT, text.getType());
418         assertEquals(0, text.getElementCount()); //has no children
419

420     }
421      
422     public void testReplaceEntireDocumentContent() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
423         //initialize documents used in tests
424
initDoc1();
425         //set the document content
426
DocumentModel model = DocumentModel.getDocumentModel(doc);
427      
428         DocumentElement root = model.getRootElement();
429      
430         //listen to model
431
final Vector JavaDoc removedElements = new Vector JavaDoc();
432         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
433             public void documentElementRemoved(DocumentElement de) {
434                 removedElements.add(de);
435             }
436         });
437      
438         //listen to element
439
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
440         root.addDocumentElementListener(new DocumentElementListenerAdapter() {
441             public void elementRemoved(DocumentElementEvent e) {
442                 removedElements2.add(e.getChangedChild());
443             }
444         });
445      
446         //remove entire document content
447
doc.remove(0,doc.getLength());
448         doc.insertString(0,"xxx",null);
449         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
450

451 // System.out.println("AFTER REPLACE:::");
452
// DocumentModelUtils.dumpElementStructure(root);
453
// DocumentModelUtils.dumpModelElements(model);
454

455         assertEquals(6, removedElements.size()); //all elements removed
456

457         //XXX probably should be only one element removed, but because of the
458
//elements removal mechanism, when entire document is erased and
459
//where all empty elements (startoffset == endoffset)
460
//are considered as children of root element the event is fired 6-times.
461
assertEquals(6, removedElements2.size()); //<root> removed
462

463         assertEquals(1, root.getElementCount()); //has one text children
464

465         DocumentElement text = root.getElement(0);
466         assertNotNull(text);
467         assertEquals(XMLDocumentModelProvider.XML_CONTENT, text.getType());
468         assertEquals(0, text.getElementCount()); //has no children
469

470     }
471      
472     //inserts a character into <root> tag element (e.g. <roXot>) so the element is not valid
473
//the ROOT element should be destroyed and its children (A, B) should be moved to its parent (document root element)
474
public void testInvalidateTagElement() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
475         //initialize documents used in tests
476
initDoc1();
477         //set the document content
478
DocumentModel model = DocumentModel.getDocumentModel(doc);
479      
480         DocumentElement root = model.getRootElement();
481         DocumentElement rootTag = root.getElement(1); //get <root> element
482
DocumentElement aTag = rootTag.getElement(0);
483         DocumentElement bTag = rootTag.getElement(1);
484      
485         //add-listen to model
486
final Vector JavaDoc addedElements = new Vector JavaDoc();
487         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
488             public void documentElementAdded(DocumentElement de) {
489                 addedElements.add(de);
490             }
491         });
492      
493         //add-listen to element
494
final Vector JavaDoc addedElements2 = new Vector JavaDoc();
495         root.addDocumentElementListener(new DocumentElementListenerAdapter() {
496             public void elementAdded(DocumentElementEvent e) {
497                 addedElements2.add(e.getChangedChild());
498             }
499         });
500      
501         //remove-listen to model
502
final Vector JavaDoc removedElements = new Vector JavaDoc();
503         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
504             public void documentElementRemoved(DocumentElement de) {
505                 removedElements.add(de);
506             }
507         });
508      
509         //remove-listen to element
510
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
511         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
512             public void elementRemoved(DocumentElementEvent e) {
513 // System.out.println("removed " + e.getChangedChild());
514
removedElements2.add(e.getChangedChild());
515             }
516         });
517      
518         assertEquals(2, root.getElementCount()); //has PI and ROOT child
519

520         //DocumentModelUtils.dumpElementStructure(root);
521

522         doc.insertString(24,"X",null);
523         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
524

525         //System.out.println(doc.getText(0, doc.getLength()));
526
//DocumentModelUtils.dumpElementStructure(root);
527

528         assertEquals(3, root.getElementCount()); //has PI, A, B children
529

530         //check events
531
assertEquals(0, addedElements.size());
532         assertEquals(2, addedElements2.size());
533      
534         assertEquals(1, removedElements.size());
535         assertEquals(2, removedElements2.size());//A,B from ROOT
536

537         //test children
538
assertEquals("b", bTag.getName());
539         assertEquals(XMLDocumentModelProvider.XML_TAG, bTag.getType());
540         assertEquals(1, bTag.getElementCount());
541         assertEquals(root, bTag.getParentElement());
542      
543         assertEquals("a", aTag.getName());
544         assertEquals(XMLDocumentModelProvider.XML_TAG, aTag.getType());
545         assertEquals(1, aTag.getElementCount());
546         assertEquals(root, aTag.getParentElement());
547      
548         //check content and offsets
549
assertEquals(28, aTag.getStartOffset());
550         assertEquals(38, aTag.getEndOffset());
551      
552         //check if the ROOT element has been really removed
553
try {
554             rootTag.getParentElement(); //should throw the IAE
555
assertTrue("The removed element still can obtain its parent!?!?!", false);
556         } catch(IllegalArgumentException JavaDoc iae) {
557             //OK
558
}
559      
560         assertEquals(0, rootTag.getChildren().size()); //has not children
561
}
562      
563     public void testCreateAndUpdateCommentElement() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
564         //initialize documents used in tests
565
initDoc1();
566         //set the document content
567
DocumentModel model = DocumentModel.getDocumentModel(doc);
568      
569         DocumentElement root = model.getRootElement();
570         DocumentElement rootTag = root.getElement(1); //get <root> element
571
DocumentElement aTag = rootTag.getElement(0);
572      
573         //add-listen to model
574
final Vector JavaDoc addedElements = new Vector JavaDoc();
575         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
576             public void documentElementAdded(DocumentElement de) {
577 // System.out.println("added " + de);
578
addedElements.add(de);
579             }
580         });
581      
582         //add-listen to element
583
final Vector JavaDoc addedElementsToATag = new Vector JavaDoc();
584         aTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
585             public void elementAdded(DocumentElementEvent e) {
586                 addedElementsToATag.add(e.getChangedChild());
587             }
588         });
589      
590         assertEquals(1, aTag.getElementCount()); //A has only C children
591

592         doc.insertString(30,"<!-- xml comment -->",null);
593         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
594
//text after:
595
// <?xml version='1.0'?><root><a><!-- xml comment --><c/></a><b>text</b></root>
596
// 012345678901234567890123456789012345678901234567890123456789
597
// 0 1 2 3 4 5
598

599 // System.out.println(doc.getText(0, doc.getLength()));
600
// DocumentModelUtils.dumpElementStructure(root);
601

602         //check events
603
assertEquals(1, addedElements.size());
604         assertEquals(1, addedElementsToATag.size());
605      
606         //test a tag and its content
607
assertEquals("a", aTag.getName());
608         assertEquals(XMLDocumentModelProvider.XML_TAG, aTag.getType());
609         assertEquals(2, aTag.getElementCount()); //the new commnent and C tag
610
assertEquals(rootTag, aTag.getParentElement());
611      
612         //check content and offsets
613
assertEquals(27, aTag.getStartOffset());
614         assertEquals(57, aTag.getEndOffset());
615      
616         //check the comment element
617
DocumentElement comment = aTag.getElement(0);
618         assertEquals("comment", comment.getName());
619         assertEquals(XMLDocumentModelProvider.XML_COMMENT, comment.getType());
620         assertEquals(0, comment.getElementCount()); //check has not children
621
assertEquals(aTag, comment.getParentElement());
622         //check boundaries
623
assertEquals(30, comment.getStartOffset());
624         assertEquals(49, comment.getEndOffset());
625      
626         //test comment content update
627
//add-listen to model
628
final Vector JavaDoc modifiedEls = new Vector JavaDoc();
629         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
630             public void documentElementChanged(DocumentElement de) {
631                 modifiedEls.add(de);
632             }
633         });
634         //add-listen to element
635
final Vector JavaDoc commentModifications = new Vector JavaDoc();
636         comment.addDocumentElementListener(new DocumentElementListenerAdapter() {
637             public void contentChanged(DocumentElementEvent de) {
638                 commentModifications.add(de);
639             }
640         });
641         doc.insertString(36,"big ",null);
642         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
643

644         assertEquals(1, modifiedEls.size()); //one model change event fired
645
assertEquals(1, commentModifications.size()); //one change event fired
646

647      
648     }
649      
650     public void testElementAttributes() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
651         //initialize documents used in tests
652
initDoc2();
653         //set the document content
654
DocumentModel model = DocumentModel.getDocumentModel(doc);
655      
656         DocumentElement root = model.getRootElement();
657         DocumentElement rootTag = root.getElement(1); //get <root> element
658

659         AttributeSet JavaDoc attrs = rootTag.getAttributes();
660         assertNotNull(attrs);
661      
662         assertEquals(1, attrs.getAttributeCount()); //one attribute
663
assertTrue(attrs.containsAttribute("attrname", "value"));
664         assertEquals("value", (String JavaDoc)attrs.getAttribute("attrname"));
665      
666         //listen to model
667
final Vector JavaDoc modelAttrsChanges = new Vector JavaDoc();
668         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
669             public void documentElementAttributesChanged(DocumentElement de) {
670                 modelAttrsChanges.add(de);
671             }
672         });
673      
674         //listen to element
675
final Vector JavaDoc elementAttrsChanges = new Vector JavaDoc();
676         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
677             public void attributesChanged(DocumentElementEvent e) {
678                 elementAttrsChanges.add(e.getChangedChild());
679             }
680         });
681      
682         doc.insertString(39,"aaa",null);
683         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
684

685 // System.out.println(doc.getText(0, doc.getLength()));
686
// DocumentModelUtils.dumpElementStructure(root);
687

688         //check events
689
assertEquals(1, modelAttrsChanges.size());
690         assertEquals(1, elementAttrsChanges.size());
691      
692         //check the element
693
attrs = rootTag.getAttributes();
694         assertNotNull(attrs);
695      
696         assertEquals(1, attrs.getAttributeCount()); //one attribute
697
assertTrue(attrs.containsAttribute("attrname", "vaaaalue"));
698         assertEquals("vaaaalue", (String JavaDoc)attrs.getAttribute("attrname"));
699      
700      
701     }
702      
703     public void testMergeTwoElementsIntoOne() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
704         //initialize documents used in tests
705
initDoc3();
706         //set the document content
707
DocumentModel model = DocumentModel.getDocumentModel(doc);
708         DocumentElement root = model.getRootElement();
709      
710         System.out.println(doc.getText(0, doc.getLength()));
711         DocumentModelUtils.dumpElementStructure(root);
712      
713         DocumentElement rootTag = root.getElement(1); //get <wood> element
714
DocumentElement wood1 = rootTag.getElement(0);
715         DocumentElement wood2 = rootTag.getElement(1);
716      
717         assertEquals("tree", wood1.getName());
718         assertEquals("tree", wood2.getName());
719      
720         //listen to model
721
final Vector JavaDoc modelChanges = new Vector JavaDoc();
722         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
723             public void documentElementRemoved(DocumentElement de) {
724                 modelChanges.add(de);
725             }
726         });
727      
728         //listen to element
729
final Vector JavaDoc elementChanges = new Vector JavaDoc();
730         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
731             public void elementRemoved(DocumentElementEvent e) {
732                 elementChanges.add(e.getChangedChild());
733             }
734         });
735      
736         doc.remove(40,"/><tree id=\"2\"".length());
737         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
738

739         System.out.println(doc.getText(0, doc.getLength()));
740         DocumentModelUtils.dumpElementStructure(root);
741      
742         //check events
743
assertEquals(1, modelChanges.size());
744         assertEquals(wood2, modelChanges.get(0));
745         assertEquals(1, elementChanges.size());
746         assertEquals(wood2, elementChanges.get(0));
747      
748         //check the element
749
AttributeSet JavaDoc attrs = wood1.getAttributes();
750         assertNotNull(attrs);
751      
752         assertEquals(1, attrs.getAttributeCount()); //one attribute
753
assertTrue(attrs.containsAttribute("id", "1"));
754      
755     }
756      
757     public void testRemoveTwoElementsWithSameName() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
758         //initialize documents used in tests
759
initDoc3();
760         //set the document content
761
DocumentModel model = DocumentModel.getDocumentModel(doc);
762         DocumentElement root = model.getRootElement();
763      
764         System.out.println(doc.getText(0, doc.getLength()));
765         DocumentModelUtils.dumpElementStructure(root);
766      
767         DocumentElement rootTag = root.getElement(1); //get <wood> element
768
DocumentElement wood1 = rootTag.getElement(0);
769         DocumentElement wood2 = rootTag.getElement(1);
770      
771         assertEquals("tree", wood1.getName());
772         assertEquals("tree", wood2.getName());
773      
774         //listen to model
775
final Vector JavaDoc modelChanges = new Vector JavaDoc();
776         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
777             public void documentElementRemoved(DocumentElement de) {
778                 System.out.println("removed " + de);
779                 modelChanges.add(de);
780             }
781         });
782      
783         //listen to element
784
final Vector JavaDoc elementChanges = new Vector JavaDoc();
785         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
786             public void elementRemoved(DocumentElementEvent e) {
787                 System.out.println("removed " + e.getChangedChild());
788                 elementChanges.add(e.getChangedChild());
789             }
790         });
791      
792         doc.remove(27, "<tree id=\"1\"/><tree id=\"2\"/>".length());
793         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
794

795         System.out.println(doc.getText(0, doc.getLength()));
796         DocumentModelUtils.dumpElementStructure(root);
797      
798         //check events
799
assertEquals(2, elementChanges.size()); //two elements removed
800
assertEquals(2, modelChanges.size()); //two elements removed
801

802         assertEquals(0, rootTag.getElementCount());
803      
804     }
805      
806     public void testDoTwoModificationsOnVariousPlaces() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
807         //initialize documents used in tests
808
initDoc1();
809         //set the document content
810
DocumentModel model = DocumentModel.getDocumentModel(doc);
811         DocumentElement root = model.getRootElement();
812      
813         System.out.println(doc.getText(0, doc.getLength()));
814         DocumentModelUtils.dumpElementStructure(root);
815      
816         DocumentElement rootTag = root.getElement(1); //get root
817
DocumentElement aTag = rootTag.getElement(0); //a tag
818
DocumentElement bTag= rootTag.getElement(1); //b tag
819

820         //listen to model
821
final Vector JavaDoc modelChanges = new Vector JavaDoc();
822         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
823             public void documentElementAdded(DocumentElement de) {
824                 modelChanges.add(de);
825             }
826         });
827      
828         //listen to element
829
final Vector JavaDoc aChanges = new Vector JavaDoc();
830         aTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
831             public void elementAdded(DocumentElementEvent e) {
832                 aChanges.add(e.getChangedChild());
833             }
834         });
835      
836         final Vector JavaDoc bChanges = new Vector JavaDoc();
837         bTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
838             public void elementAdded(DocumentElementEvent e) {
839                 bChanges.add(e.getChangedChild());
840             }
841         });
842      
843         doc.insertString(30,"<tag1></tag1>", null);
844         doc.insertString(41+"<tag1></tag1>".length(),"<tag2></tag2>", null);
845         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
846

847         System.out.println(doc.getText(0, doc.getLength()));
848         DocumentModelUtils.dumpElementStructure(root);
849      
850         //check events
851
assertEquals(2, modelChanges.size());
852      
853         assertEquals(1, aChanges.size());
854         assertEquals(1, bChanges.size());
855      
856         DocumentElement tag1 = aTag.getElement(0);
857         assertNotNull(tag1);
858         assertEquals("tag1",tag1.getName());
859      
860         DocumentElement tag2 = bTag.getElement(0);
861         assertNotNull(tag2);
862         assertEquals("tag2",tag2.getName());
863      
864     }
865      
866     public void testRemoveDocumentContentPartToTheEndOfTheFile() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
867         //initialize documents used in tests
868
initDoc1();
869         //set the document content
870
DocumentModel model = DocumentModel.getDocumentModel(doc);
871         DocumentElement root = model.getRootElement();
872      
873         System.out.println(doc.getText(0, doc.getLength()));
874         DocumentModelUtils.dumpElementStructure(root);
875      
876         //listen to model
877
final Vector JavaDoc modelChanges = new Vector JavaDoc();
878         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
879             public void documentElementRemoved(DocumentElement de) {
880                 System.out.println("removed " + de);
881                 modelChanges.add(de);
882             }
883         });
884      
885         //listen to element
886
final Vector JavaDoc elementChanges = new Vector JavaDoc();
887         root.addDocumentElementListener(new DocumentElementListenerAdapter() {
888             public void elementRemoved(DocumentElementEvent e) {
889                 System.out.println("removed " + e.getChangedChild());
890                 elementChanges.add(e.getChangedChild());
891             }
892         });
893      
894         doc.remove(21, doc.getLength() - 21);
895         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
896

897         System.out.println(doc.getText(0, doc.getLength()));
898         DocumentModelUtils.dumpElementStructure(root);
899      
900         //check events
901

902         //the only <root> element should be removed from the main ROOT document element
903
//but due to a design flaw in the document model the original elements strucure cannot be
904
//determined after a removal of a document part so all removed elements are considered
905
//as children of the most top element which contains their start and end offsets.
906
//this problem is filtered out in the treenodes so the navigator works correctly.
907
assertEquals(5, elementChanges.size()); //<root> should be removed
908

909         assertEquals(5, modelChanges.size()); //ROOT, A,B,C, text should be removed
910

911         assertEquals(1, root.getElementCount()); //has only <?xml...?> element
912

913     }
914      
915     public void testRemoveElementAttributes() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
916         //initialize documents used in tests
917
initDoc2();
918         //set the document content
919
DocumentModel model = DocumentModel.getDocumentModel(doc);
920      
921         DocumentElement root = model.getRootElement();
922         DocumentElement rootTag = root.getElement(1); //get <root> element
923

924         AttributeSet JavaDoc attrs = rootTag.getAttributes();
925         assertNotNull(attrs);
926      
927         assertEquals(1, attrs.getAttributeCount()); //one attribute
928
assertTrue(attrs.containsAttribute("attrname", "value"));
929         assertEquals("value", (String JavaDoc)attrs.getAttribute("attrname"));
930      
931         //listen to model
932
final Vector JavaDoc modelAttrsChanges = new Vector JavaDoc();
933         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
934             public void documentElementAttributesChanged(DocumentElement de) {
935                 modelAttrsChanges.add(de);
936             }
937         });
938      
939         //listen to element
940
final Vector JavaDoc elementAttrsChanges = new Vector JavaDoc();
941         rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
942             public void attributesChanged(DocumentElementEvent e) {
943                 elementAttrsChanges.add(e.getChangedChild());
944             }
945         });
946      
947         doc.remove(26, " attrname=\"value\"".length());
948         Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
949

950         System.out.println(doc.getText(0, doc.getLength()));
951         DocumentModelUtils.dumpElementStructure(root);
952      
953         //check events
954
assertEquals(1, modelAttrsChanges.size());
955         assertEquals(1, elementAttrsChanges.size());
956      
957         //check the element
958
attrs = rootTag.getAttributes();
959         assertNotNull(attrs);
960      
961         assertEquals(0, attrs.getAttributeCount()); //one attribute
962

963     }
964      
965     public void testChangeTreeFromElementsWithSameName() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
966         //initialize documents used in tests
967
initDoc4();
968         //set the document content
969
DocumentModel model = DocumentModel.getDocumentModel(doc);
970         DocumentElement root = model.getRootElement();
971      
972         System.out.println(doc.getText(0, doc.getLength()));
973         DocumentModelUtils.dumpElementStructure(root);
974      
975         assertEquals(2, root.getElementCount()); //has <?xml ...?> and <tree id="1"> elements
976

977         DocumentElement tree1 = root.getElement(1); //get <tree id="1"> element
978
assertEquals(1, tree1.getElementCount()); //has <tree id="2"> element
979

980         DocumentElement tree2 = tree1.getElement(0); //<tree id="2"> element
981
assertEquals(2, tree2.getElementCount()); //has <tree id="3"> and <tree id="4"> elements
982

983         DocumentElement tree3 = tree2.getElement(0); //<tree id="3"> element
984
DocumentElement tree4 = tree2.getElement(1); //<tree id="4"> element
985

986         assertEquals("tree", tree3.getName());
987         assertEquals("tree", tree4.getName());
988      
989         //listen to model
990
final Vector JavaDoc modelChanges = new Vector JavaDoc();
991         model.addDocumentModelListener(new DocumentModelListenerAdapter() {
992             public void documentElementRemoved(DocumentElement de) {
993                 System.out.println("removed " + de);
994                 modelChanges.add(de);
995             }
996         });
997      
998         //listen to element
999
final Vector JavaDoc tree1Removes = new Vector JavaDoc();
1000        final Vector JavaDoc tree1Adds = new Vector JavaDoc();
1001        tree1.addDocumentElementListener(new DocumentElementListenerAdapter() {
1002            public void elementRemoved(DocumentElementEvent e) {
1003                System.out.println("removed " + e.getChangedChild());
1004                tree1Removes.add(e.getChangedChild());
1005            }
1006            public void elementAdded(DocumentElementEvent e) {
1007                System.out.println("added " + e.getChangedChild());
1008                tree1Adds.add(e.getChangedChild());
1009            }
1010        });
1011     
1012        doc.insertString(36, "BIG", null);
1013        Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1014

1015        System.out.println(doc.getText(0, doc.getLength()));
1016        DocumentModelUtils.dumpElementStructure(root);
1017     
1018        //check events
1019

1020        // tree2 removed from model
1021
assertEquals(1, modelChanges.size());
1022        assertEquals(tree2, modelChanges.get(0));
1023     
1024        //tree2 removed from tree1
1025
assertEquals(1, tree1Removes.size());
1026        assertEquals(tree2, tree1Removes.get(0));
1027     
1028        //tree3 and tree4 added to tree1
1029
assertEquals(2, tree1Adds.size());
1030        assertEquals(tree1Adds.get(0), tree3);
1031        assertEquals(tree1Adds.get(1), tree4);
1032        assertEquals(tree1.getElement(0), tree3);
1033        assertEquals(tree1.getElement(1), tree4);
1034     
1035        //OK lets return back to the original state
1036

1037        //listen to model
1038
final Vector JavaDoc modelChanges2 = new Vector JavaDoc();
1039        model.addDocumentModelListener(new DocumentModelListenerAdapter() {
1040            public void documentElementAdded(DocumentElement de) {
1041                System.out.println("added " + de);
1042                modelChanges2.add(de);
1043            }
1044        });
1045     
1046        tree1Adds.clear();
1047        tree1Removes.clear();
1048     
1049        doc.remove(36, "BIG".length());
1050        Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1051

1052        System.out.println(doc.getText(0, doc.getLength()));
1053        DocumentModelUtils.dumpElementStructure(root);
1054     
1055     
1056        //check events
1057

1058        // tree2 added to the model
1059
assertEquals(1, modelChanges.size());
1060        //tree2 added to tree1
1061
assertEquals(1, tree1Adds.size());
1062        //tree3 and 4 removed from tree1
1063
assertEquals(2, tree1Removes.size());
1064     
1065        //so now tree1 has only one children - tree2
1066
assertEquals(1, tree1.getElementCount());
1067        DocumentElement tree2_2 = tree1.getElement(0);
1068     
1069        //and tree2 has tree3 and tree4
1070
assertEquals(2, tree2.getElementCount());
1071     
1072        assertEquals(tree3, tree2.getElement(0));
1073        assertEquals(tree4, tree2.getElement(1));
1074     
1075        assertEquals(2, root.getElementCount()); //has <?xml ...?> and <tree id="1"> elements
1076

1077    }
1078     
1079    public void testRemoveElementsInText() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
1080        //initialize documents used in tests
1081
initDoc5();
1082        //set the document content
1083
DocumentModel model = DocumentModel.getDocumentModel(doc);
1084     
1085        DocumentElement root = model.getRootElement();
1086        DocumentElement rootTag = root.getElement(2); //get <root> element (first is PI, second whitespaces)
1087

1088        //listen to model
1089
final Vector JavaDoc removedElements = new Vector JavaDoc();
1090        model.addDocumentModelListener(new DocumentModelListenerAdapter() {
1091            public void documentElementRemoved(DocumentElement de) {
1092                removedElements.add(de);
1093            }
1094        });
1095     
1096        //listen to element
1097
final Vector JavaDoc removedElements2 = new Vector JavaDoc();
1098        rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
1099            public void elementRemoved(DocumentElementEvent e) {
1100                removedElements2.add(e.getChangedChild());
1101            }
1102        });
1103     
1104        DocumentModelUtils.dumpElementStructure(root);
1105     
1106        doc.remove(31," <a> <c/> </a> ".length());
1107        Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1108

1109        System.out.println(doc.getText(0, doc.getLength()));
1110        DocumentModelUtils.dumpElementStructure(root);
1111     
1112        assertEquals(6, removedElements.size()); //remove A, C + WHs
1113
assertEquals(6, removedElements2.size());
1114     
1115        assertEquals(3, rootTag.getElementCount()); //has B children and 2 WS children
1116

1117    }
1118     
1119     
1120    public void testEditElementWithOneCharContent_71596() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
1121        //initialize documents used in tests
1122
initDoc6();
1123        //set the document content
1124
DocumentModel model = DocumentModel.getDocumentModel(doc);
1125        DocumentElement root = model.getRootElement();
1126     
1127        System.out.println(doc.getText(0, doc.getLength()));
1128        DocumentModelUtils.dumpElementStructure(root);
1129     
1130        DocumentElement rootTag = root.getElement(0); //get <root> element
1131

1132        assertNotNull(rootTag.getName());
1133     
1134        //listen to model
1135
final Vector JavaDoc modelChanges = new Vector JavaDoc();
1136        model.addDocumentModelListener(new DocumentModelListenerAdapter() {
1137            public void documentElementAdded(DocumentElement de) {
1138                modelChanges.add(de);
1139            }
1140        });
1141     
1142        //listen to element
1143
final Vector JavaDoc elementChanges = new Vector JavaDoc();
1144        rootTag.addDocumentElementListener(new DocumentElementListenerAdapter() {
1145            public void elementAdded(DocumentElementEvent e) {
1146                elementChanges.add(e.getChangedChild());
1147            }
1148        });
1149     
1150        doc.insertString(5," ",null);
1151        Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1152

1153        System.out.println(doc.getText(0, doc.getLength()));
1154        DocumentModelUtils.dumpElementStructure(root);
1155     
1156        assertEquals(1, rootTag.getElementCount());
1157     
1158        //check events
1159
assertEquals(0, modelChanges.size());
1160        assertEquals(0, elementChanges.size());
1161     
1162    }
1163
1164    public void testModelLocking() throws DocumentModelException, BadLocationException JavaDoc, InterruptedException JavaDoc {
1165        //initialize documents used in tests
1166
initDoc1();
1167        
1168        final Semaphore semaphore = new Semaphore();
1169        Runnable JavaDoc r = new Runnable JavaDoc() {
1170            public void run() {
1171                //set the document content
1172
try {
1173                    DocumentModel model = DocumentModel.getDocumentModel(doc);
1174                    //get the document element
1175
DocumentElement root = model.getRootElement();
1176                    //make the document dirty
1177
doc.insertString(0, " ", null);
1178                    //force the model to resort the children
1179
root.getChildren();
1180                    
1181                    semaphore.state = true;
1182                    synchronized (semaphore) {
1183                        semaphore.notifyAll();
1184                    }
1185                }catch(Throwable JavaDoc t) {
1186                    t.printStackTrace();
1187                    t.printStackTrace(getLog());
1188                }
1189            }
1190        };
1191        
1192        Thread JavaDoc t = new Thread JavaDoc(r);
1193        t.start();
1194        
1195        try {
1196            synchronized (semaphore) {
1197                semaphore.wait(5000);
1198            }
1199        } catch(InterruptedException JavaDoc ioe) {
1200            ;
1201        }
1202        
1203        assertTrue("The DocumentElement.getChildren() locked up! (model.writeLock() called under model.readLock())", semaphore.state);
1204        
1205    }
1206    
1207    //Jirka Kovalsky's test - not completed yet hence commented out
1208
/*public void testEncapsulateValue_73131() throws DocumentModelException, BadLocationException, InterruptedException {
1209       BaseDocument doc = new BaseDocument(XMLKit.class, false);
1210       doc.putProperty("mimeType", "text/xml");
1211       doc.insertString(0, "<root>X</root>", null);
1212      
1213       DocumentModel model = DocumentModel.getDocumentModel(doc);
1214      
1215       assertNotNull(model);
1216       assertNotNull(model.getDocument());
1217       DocumentElement root = model.getRootElement();
1218      
1219       System.out.println(doc.getText(0, doc.getLength()));
1220       Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1221      
1222       DocumentModelUtils.dumpElementStructure(root);
1223      
1224       doc.insertString(5, " id=1\"", null);
1225       Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1226       System.out.println(doc.getText(0, doc.getLength()));
1227      
1228       DocumentModelUtils.dumpElementStructure(root);
1229              // <root id=1">X</root>
1230       // 01234567890123456789
1231       doc.insertString(9, "\"", null);
1232       Thread.sleep(MODEL_TIMEOUT * 2); //wait for the model update (started after 500ms)
1233       System.out.println(doc.getText(0, doc.getLength()));
1234      
1235       DocumentModelUtils.dumpElementStructure(root);
1236       DocumentElement rootTag = root.getElement(0); //get <root> element
1237       assertEquals(1, rootTag.getElementCount()); // check that root has one element (X)
1238   }*/

1239    
1240    
1241    private void initDoc1() throws BadLocationException JavaDoc {
1242        /*
1243          supposed structure:
1244            ROOT
1245             |
1246             +--<?xml version='1.0'?>
1247             +--<root>
1248                   |
1249                   +--<a>
1250                   | |
1251                   | +---<c>
1252                   |
1253                   +--<b>
1254                       |
1255                       +----text
1256         */

1257        doc = new BaseDocument(XMLKit.class, false);
1258        doc.putProperty("mimeType", "text/xml");
1259        
1260        doc.insertString(0,"<?xml version='1.0'?><root><a><c/></a><b>text</b></root>",null);
1261        // 012345678901234567890123456789012345678901234567890123456789
1262
// 0 1 2 3 4 5
1263
}
1264    
1265    private void initDoc2() throws BadLocationException JavaDoc {
1266        /*
1267          supposed structure:
1268            ROOT
1269             |
1270             +--<?xml version='1.0'?>
1271             +--<root attrname="value">
1272                   |
1273                   +---text
1274         */

1275        doc = new BaseDocument(XMLKit.class, false);
1276        doc.putProperty("mimeType", "text/xml");
1277        
1278        doc.insertString(0,"<?xml version='1.0'?><root attrname=\"value\">text</root>",null);
1279        // 012345678901234567890123456789012345678901234567890123456789
1280
// 0 1 2 3 4 5
1281
}
1282    
1283    private void initDoc3() throws BadLocationException JavaDoc {
1284        /*
1285          supposed structure:
1286            ROOT
1287             |
1288             +--<?xml version='1.0'?>
1289             +--<wood>
1290                   |
1291                   +---<tree id="1">
1292                   +---<tree id="2">
1293         */

1294        doc = new BaseDocument(XMLKit.class, false);
1295        doc.putProperty("mimeType", "text/xml");
1296        
1297        doc.insertString(0,"<?xml version=\"1.0\"?><wood><tree id=\"1\"/><tree id=\"2\"/></wood>",null);
1298        // 01234567890123 4567 89012345678901234567 89 01234567890123456789012345678901234567890123456789012345678901234567890123456789
1299
// 0 1 2 3 4 5 6 7 8
1300
}
1301    
1302    private void initDoc4() throws BadLocationException JavaDoc {
1303        /*
1304          supposed structure:
1305            ROOT
1306             |
1307             +--<?xml version='1.0'?>
1308             +--<tree id="1">
1309                   |
1310                   +---<tree id="2">
1311                           |
1312                           +-- <tree id="3"> |
1313                           +-- <tree id="4">
1314         */

1315        doc = new BaseDocument(XMLKit.class, false);
1316        doc.putProperty("mimeType", "text/xml");
1317        
1318        doc.insertString(0,"<?xml version=\"1.0\"?><tree id=\"1\"><tree id=\"2\"><tree id=\"3\"></tree><tree id=\"4\"></tree></tree></tree>",null);
1319        // 01234567890123 4567 89012345678901234567 89 01234567890123456789012345678901234567890123456789012345678901234567890123456789
1320
// 0 1 2 3 4 5 6 7 8
1321
}
1322    
1323    private void initDoc5() throws BadLocationException JavaDoc {
1324        /*
1325          supposed structure:
1326            ROOT
1327             |
1328             +--<?xml version='1.0'?>
1329             +--<root>
1330                   |
1331                   +--<a>
1332                   | |
1333                   | +---<c>
1334                   |
1335                   +--<b>
1336                       |
1337                       +----text
1338         */

1339        doc = new BaseDocument(XMLKit.class, false);
1340        doc.putProperty("mimeType", "text/xml");
1341        
1342        doc.insertString(0,"<?xml version='1.0'?> <root> <a> <c/> </a> <b>text</b> </root>",null);
1343        // 012345678901234567890123456789012345678901234567890123456789
1344
// 0 1 2 3 4 5
1345
}
1346    
1347    private void initDoc6() throws BadLocationException JavaDoc {
1348        /*
1349          supposed structure:
1350            ROOT
1351             |
1352             +--<root>X</root>
1353         */

1354        doc = new BaseDocument(XMLKit.class, false);
1355        doc.putProperty("mimeType", "text/xml");
1356        
1357        doc.insertString(0,"<root>X</root>",null);
1358        // 0123456789012345
1359
// 0 1
1360
}
1361    
1362    private static class DocumentModelListenerAdapter implements DocumentModelListener {
1363        public void documentElementAdded(DocumentElement de) {
1364        }
1365        public void documentElementAttributesChanged(DocumentElement de) {
1366        }
1367        public void documentElementChanged(DocumentElement de) {
1368        }
1369        public void documentElementRemoved(DocumentElement de) {
1370        }
1371    }
1372    
1373    private static class DocumentElementListenerAdapter implements DocumentElementListener {
1374        public void attributesChanged(DocumentElementEvent e) {
1375        }
1376        public void childrenReordered(DocumentElementEvent e) {
1377        }
1378        public void contentChanged(DocumentElementEvent e) {
1379        }
1380        public void elementAdded(DocumentElementEvent e) {
1381        }
1382        public void elementRemoved(DocumentElementEvent e) {
1383        }
1384    }
1385    
1386    private static class Semaphore {
1387        public boolean state = false;
1388    }
1389}
1390
Popular Tags