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