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/nodegetfeature05";
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
43c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      docsLoaded = 0;
44c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
45c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var docRef = null;
46c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      if (typeof(this.doc) != 'undefined') {
47c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block        docRef = this.doc;
48c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      }
49c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      docsLoaded += preload(docRef, "doc", "barfoo");
50c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
51c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block       if (docsLoaded == 1) {
52c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block          setUpPageStatus = 'complete';
53c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block       }
54c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    } catch(ex) {
55c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    	catchInitializationError(builder, ex);
56c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block        setUpPageStatus = 'complete';
57c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    }
58c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block}
59c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
60c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
61c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
62c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//
63c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//   This method is called on the completion of
64c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//      each asychronous load started in setUpTests.
65c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//
66c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//   When every synchronous loaded document has completed,
67c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//      the page status is changed which allows the
68c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block//      body of the test to be executed.
69c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction loadComplete() {
70c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    if (++docsLoaded == 1) {
71c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block        setUpPageStatus = 'complete';
72c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    }
73c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block}
74c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
75c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
76c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block/**
77c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block*
78c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockCheck implementation of Node.getFeature on Element.
79c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
80c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block* @author Curt Arnold
81c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block* @see http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core#Node3-getFeature
82c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block*/
83c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction nodegetfeature05() {
84c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block   var success;
85c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    if(checkInitialization(builder, "nodegetfeature05") != null) return;
86c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    var doc;
87c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var node;
88c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var nullVersion = null;
89c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
90c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var featureImpl;
91c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var isSupported;
92c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var domImpl;
93c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
94c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      var docRef = null;
95c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      if (typeof(this.doc) != 'undefined') {
96c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block        docRef = this.doc;
97c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      }
98c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      doc = load(docRef, "doc", "barfoo");
99c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      domImpl = doc.implementation;
100c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blocknode = doc.documentElement;
101c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
102c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("Core",nullVersion);
103c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertSame("coreUnspecifiedVersion",node,featureImpl);
104c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockfeatureImpl = node.getFeature("cOrE",nullVersion);
105c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertSame("cOrEUnspecifiedVersion",node,featureImpl);
106c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockfeatureImpl = node.getFeature("+cOrE",nullVersion);
107c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertSame("PlusCoreUnspecifiedVersion",node,featureImpl);
108c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockfeatureImpl = node.getFeature("org.w3c.domts.bogus.feature",nullVersion);
109c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertNull("unrecognizedFeature",featureImpl);
110c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block    featureImpl = node.getFeature("cOrE","2.0");
111c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertSame("Core20",node,featureImpl);
112c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockfeatureImpl = node.getFeature("cOrE","3.0");
113c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      assertSame("Core30",node,featureImpl);
114c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockisSupported = node.isSupported("XML",nullVersion);
115c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("XML",nullVersion);
116c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
117c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
118c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
119c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
120c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("XMLUnspecified",node,featureImpl);
121c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
122c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
123c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("SVG",nullVersion);
124c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("SVG",nullVersion);
125c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
126c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
127c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
128c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
129c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("SVGUnspecified",node,featureImpl);
130c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
131c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
132c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("HTML",nullVersion);
133c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("HTML",nullVersion);
134c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
135c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
136c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
137c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
138c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("HTMLUnspecified",node,featureImpl);
139c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
140c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
141c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("Events",nullVersion);
142c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("Events",nullVersion);
143c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
144c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
145c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
146c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
147c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("EventsUnspecified",node,featureImpl);
148c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
149c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
150c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("LS",nullVersion);
151c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("LS",nullVersion);
152c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
153c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
154c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
155c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
156c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("LSUnspecified",node,featureImpl);
157c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
158c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
159c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("LS-Async",nullVersion);
160c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("LS-Async",nullVersion);
161c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
162c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
163c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
164c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
165c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("LSAsyncUnspecified",node,featureImpl);
166c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
167c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
168c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("XPath",nullVersion);
169c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("XPath",nullVersion);
170c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
171c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
172c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
173c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
174c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertSame("XPathUnspecified",node,featureImpl);
175c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
176c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
177c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("+HTML",nullVersion);
178c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("HTML",nullVersion);
179c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
180c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
181c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
182c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
183c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertNotNull("PlusHTMLUnspecified",featureImpl);
184c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
185c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
186c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported = node.isSupported("+SVG",nullVersion);
187c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block      featureImpl = node.getFeature("SVG",nullVersion);
188c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
189c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	if(
190c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	isSupported
191c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	) {
192c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	assertNotNull("PlusSVGUnspecified",featureImpl);
193c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
194c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block	}
195c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
196c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block}
197c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
198c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
199c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
200c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block
201c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction runTest() {
202c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block   nodegetfeature05();
203c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block}
204