1/*
2 This Java source file was generated by test-to-java.xsl
3 and is a derived work from the source document.
4 The source document contained the following notice:
5
6
7
8 Copyright (c) 2001-2004 World Wide Web Consortium,
9 (Massachusetts Institute of Technology, Institut National de
10 Recherche en Informatique et en Automatique, Keio University).  All
11 Rights Reserved.  This program is distributed under the W3C's Software
12 Intellectual Property License.  This program is distributed in the
13 hope that it will be useful, but WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE.
16
17 See W3C License http://www.w3.org/Consortium/Legal/ for more details.
18
19
20 */
21
22package tests.org.w3c.dom;
23
24import org.w3c.dom.Node;
25import org.w3c.dom.Document;
26import org.w3c.dom.Element;
27import org.w3c.dom.DocumentType;
28import org.w3c.dom.Text;
29import org.w3c.dom.DOMImplementation;
30import org.w3c.dom.EntityReference;
31import org.w3c.dom.NodeList;
32import org.w3c.dom.CDATASection;
33import org.w3c.dom.ProcessingInstruction;
34import org.w3c.dom.Comment;
35
36import javax.xml.parsers.DocumentBuilder;
37
38/**
39 * The method "normalize" puts all Text nodes in the full depth of the sub-tree
40 * underneath this Node, including attribute nodes, into a "normal" form where
41 * only structure (e.g., elements, comments, processing instructions, CDATA
42 * sections, and entity references) separates Text nodes, i.e., there are
43 * neither adjacent Text nodes nor empty Text nodes.
44 *
45 * Create a dom tree consisting of elements, comments, processing instructions,
46 * CDATA sections, and entity references nodes seperated by text nodes. Check
47 * the length of the node list of each before and after normalize has been
48 * called.
49 *
50 * @author IBM
51 * @author Neil Delima
52 * @see <a
53 *      href="http://www.w3.org/TR/DOM-Level-2-Core/core#ID-normalize">http://www.w3.org/TR/DOM-Level-2-Core/core#ID-normalize</a>
54 */
55public final class NodeNormalize extends DOMTestCase {
56
57    DOMDocumentBuilderFactory factory;
58
59    DocumentBuilder builder;
60
61    protected void setUp() throws Exception {
62        super.setUp();
63        try {
64            factory = new DOMDocumentBuilderFactory(DOMDocumentBuilderFactory
65                    .getConfiguration1());
66            builder = factory.getBuilder();
67        } catch (Exception e) {
68            fail("Unexpected exception" + e.getMessage());
69        }
70    }
71
72    protected void tearDown() throws Exception {
73        factory = null;
74        builder = null;
75        super.tearDown();
76    }
77
78    /**
79     * Runs the test case.
80     *
81     * @throws Throwable
82     *             Any uncaught exception causes test to fail
83     */
84    public void testNormalize() throws Throwable {
85        Document doc;
86        Document newDoc;
87        DOMImplementation domImpl;
88
89        DocumentType docTypeNull = null;
90
91        Element documentElement;
92        Element element1;
93        Element element2;
94        Element element3;
95        Element element4;
96        Element element5;
97        Element element6;
98        Element element7;
99        Text text1;
100        Text text2;
101        Text text3;
102        ProcessingInstruction pi;
103        CDATASection cData;
104        Comment comment;
105        EntityReference entRef;
106        NodeList elementList;
107
108        doc = (Document) load("staffNS", builder);
109        domImpl = doc.getImplementation();
110        newDoc = domImpl.createDocument("http://www.w3.org/DOM/Test",
111                "dom:root", docTypeNull);
112        element1 = newDoc.createElement("element1");
113        element2 = newDoc.createElement("element2");
114        element3 = newDoc.createElement("element3");
115        element4 = newDoc.createElement("element4");
116        element5 = newDoc.createElement("element5");
117        element6 = newDoc.createElement("element6");
118        element7 = newDoc.createElement("element7");
119        text1 = newDoc.createTextNode("text1");
120        text2 = newDoc.createTextNode("text2");
121        text3 = newDoc.createTextNode("text3");
122        cData = newDoc.createCDATASection("Cdata");
123        comment = newDoc.createComment("comment");
124        pi = newDoc.createProcessingInstruction("PITarget", "PIData");
125        entRef = newDoc.createEntityReference("EntRef");
126        assertNotNull("createdEntRefNotNull", entRef);
127        documentElement = newDoc.getDocumentElement();
128        documentElement.appendChild(element1);
129        element2.appendChild(text1);
130        element2.appendChild(text2);
131        element2.appendChild(text3);
132        element1.appendChild(element2);
133        text1 = (Text) text1.cloneNode(false);
134        text2 = (Text) text2.cloneNode(false);
135        element3.appendChild(entRef);
136        element3.appendChild(text1);
137        element3.appendChild(text2);
138        element1.appendChild(element3);
139        text1 = (Text) text1.cloneNode(false);
140        text2 = (Text) text2.cloneNode(false);
141        element4.appendChild(cData);
142        element4.appendChild(text1);
143        element4.appendChild(text2);
144        element1.appendChild(element4);
145        text2 = (Text) text2.cloneNode(false);
146        text3 = (Text) text3.cloneNode(false);
147        element5.appendChild(comment);
148        element5.appendChild(text2);
149        element5.appendChild(text3);
150        element1.appendChild(element5);
151        text2 = (Text) text2.cloneNode(false);
152        text3 = (Text) text3.cloneNode(false);
153        element6.appendChild(pi);
154        element6.appendChild(text2);
155        element6.appendChild(text3);
156        element1.appendChild(element6);
157        entRef = (EntityReference) entRef.cloneNode(false);
158        text1 = (Text) text1.cloneNode(false);
159        text2 = (Text) text2.cloneNode(false);
160        text3 = (Text) text3.cloneNode(false);
161        element7.appendChild(entRef);
162        element7.appendChild(text1);
163        element7.appendChild(text2);
164        element7.appendChild(text3);
165        element1.appendChild(element7);
166        elementList = element1.getChildNodes();
167        assertEquals("nodeNormalize01_1Bef", 6, elementList.getLength());
168        elementList = element2.getChildNodes();
169        assertEquals("nodeNormalize01_2Bef", 3, elementList.getLength());
170        elementList = element3.getChildNodes();
171        assertEquals("nodeNormalize01_3Bef", 3, elementList.getLength());
172        elementList = element4.getChildNodes();
173        assertEquals("nodeNormalize01_4Bef", 3, elementList.getLength());
174        elementList = element5.getChildNodes();
175        assertEquals("nodeNormalize01_5Bef", 3, elementList.getLength());
176        elementList = element6.getChildNodes();
177        assertEquals("nodeNormalize01_6Bef", 3, elementList.getLength());
178        elementList = element7.getChildNodes();
179        assertEquals("nodeNormalize01_7Bef", 4, elementList.getLength());
180        newDoc.normalize();
181        elementList = element1.getChildNodes();
182        assertEquals("nodeNormalize01_1Aft", 6, elementList.getLength());
183        elementList = element2.getChildNodes();
184        assertEquals("nodeNormalize01_2Aft", 1, elementList.getLength());
185        elementList = element3.getChildNodes();
186        assertEquals("nodeNormalize01_3Aft", 2, elementList.getLength());
187        elementList = element4.getChildNodes();
188        assertEquals("nodeNormalize01_4Aft", 2, elementList.getLength());
189        elementList = element5.getChildNodes();
190        assertEquals("nodeNormalize01_5Aft", 2, elementList.getLength());
191        elementList = element6.getChildNodes();
192        assertEquals("nodeNormalize01_6Aft", 2, elementList.getLength());
193        elementList = element7.getChildNodes();
194        assertEquals("nodeNormalize01_7Aft", 2, elementList.getLength());
195    }
196
197}
198