1
2/*
3Copyright é 2001-2004 World Wide Web Consortium,
4(Massachusetts Institute of Technology, European Research Consortium
5for Informatics and Mathematics, Keio University). All
6Rights Reserved. This work is distributed under the W3Cî Software License [1] in the
7hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9
10[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
11*/
12
13
14
15   /**
16    *  Gets URI that identifies the test.
17    *  @return uri identifier of test
18    */
19function getTargetURI() {
20      return "http://www.w3.org/2001/DOM-Test-Suite/level3/core/handleerror01";
21   }
22
23var docsLoaded = -1000000;
24var builder = null;
25
26//
27//   This function is called by the testing framework before
28//      running the test suite.
29//
30//   If there are no configuration exceptions, asynchronous
31//        document loading is started.  Otherwise, the status
32//        is set to complete and the exception is immediately
33//        raised when entering the body of the test.
34//
35function setUpPage() {
36   setUpPageStatus = 'running';
37   try {
38     //
39     //   creates test document builder, may throw exception
40     //
41     builder = createConfiguredBuilder();
42       setImplementationAttribute("namespaceAware", true);
43
44      docsLoaded = 0;
45
46      var docRef = null;
47      if (typeof(this.doc) != 'undefined') {
48        docRef = this.doc;
49      }
50      docsLoaded += preload(docRef, "doc", "barfoo");
51
52       if (docsLoaded == 1) {
53          setUpPageStatus = 'complete';
54       }
55    } catch(ex) {
56    	catchInitializationError(builder, ex);
57        setUpPageStatus = 'complete';
58    }
59}
60
61
62
63//
64//   This method is called on the completion of
65//      each asychronous load started in setUpTests.
66//
67//   When every synchronous loaded document has completed,
68//      the page status is changed which allows the
69//      body of the test to be executed.
70function loadComplete() {
71    if (++docsLoaded == 1) {
72        setUpPageStatus = 'complete';
73    }
74}
75
76
77     /**
78      *    Inner class implementation for variable errorHandler
79      */
80var errorHandler;
81
82/**
83        * Constructor
84
85        */
86
87function DOMErrorHandlerN10054() {
88           }
89
90        /**
91         *
92This method is called on the error handler when an error occurs.
93If an exception is thrown from this method, it is considered to be equivalent of returningtrue.
94
95         * @param error
96The error object that describes the error. This object may be reused by the DOM implementation across multiple calls to thehandleErrormethod.
97
98         */
99DOMErrorHandlerN10054.prototype.handleError = function(error) {
100         //
101         //   bring class variables into function scope
102         //
103                return false;
104}
105
106/**
107*
108Add two CDATASection containing "]]>" and call Node.normalize
109with an error handler that stops processing.  Only one of the
110CDATASections should be split.
111
112* @author Curt Arnold
113* @see http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core#ID-normalize
114* @see http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core#parameter-split-cdata-sections
115* @see http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core#ID-ERRORS-DOMErrorHandler-handleError
116*/
117function handleerror01() {
118   var success;
119    if(checkInitialization(builder, "handleerror01") != null) return;
120    var doc;
121      var elem;
122      var domConfig;
123      var elemList;
124      var newChild;
125      var oldChild;
126      var child;
127      var childValue;
128      var childType;
129      var retval;
130      var errors = new Array();
131
132      errorHandler = new DOMErrorHandlerN10054();
133
134
135      var docRef = null;
136      if (typeof(this.doc) != 'undefined') {
137        docRef = this.doc;
138      }
139      doc = load(docRef, "doc", "barfoo");
140      elemList = doc.getElementsByTagName("p");
141      elem = elemList.item(0);
142      oldChild = elem.firstChild;
143
144      newChild = doc.createCDATASection("this is not ]]> good");
145      retval = elem.replaceChild(newChild,oldChild);
146      newChild = doc.createCDATASection("this is not ]]> bad");
147      retval = elem.appendChild(newChild);
148      domConfig = doc.domConfig;
149
150      domConfig.setParameter("split-cdata-sections", true);
151	 domConfig.setParameter("error-handler", errorHandler.handleError);
152	 doc.normalizeDocument();
153      elemList = doc.getElementsByTagName("p");
154      elem = elemList.item(0);
155      child = elem.lastChild;
156
157      childValue = child.nodeValue;
158
159
160	if(
161	("this is not ]]> bad" == childValue)
162	) {
163	childType = child.nodeType;
164
165      assertEquals("lastChildCDATA",4,childType);
166       child = elem.firstChild;
167
168      childValue = child.nodeValue;
169
170      assert("firstChildNotIntact","this is not ]]> good" != childValue);
171
172	}
173
174		else {
175			child = elem.firstChild;
176
177      childValue = child.nodeValue;
178
179      assertEquals("firstChildIntact","this is not ]]> good",childValue);
180
181		}
182
183}
184
185
186
187
188function runTest() {
189   handleerror01();
190}
191