Reviewed by Kevin McCullough.
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Jan 2008 01:51:02 +0000 (01:51 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Jan 2008 01:51:02 +0000 (01:51 +0000)
        - Splits Objective-C tests out of wrapper-classes.html and into platform specific test.
        - Adds tests for .__proto__ and .constructor to JS wrapper tests.

        * fast/dom/wrapper-classes.html:
        * platform/mac/fast/dom/wrapper-classes-expected.txt:
        * platform/mac/fast/dom/wrapper-classes-objc-expected.txt: Added.
        * platform/mac/fast/dom/wrapper-classes-objc.html: Copied from fast/dom/wrapper-classes.html.
        * platform/win/Skipped:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29187 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/wrapper-classes.html
LayoutTests/platform/mac/fast/dom/wrapper-classes-expected.txt
LayoutTests/platform/mac/fast/dom/wrapper-classes-objc-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/dom/wrapper-classes-objc.html [new file with mode: 0644]
LayoutTests/platform/win/Skipped

index ca0d171..0eeef5f 100644 (file)
@@ -1,3 +1,16 @@
+2008-01-04  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Kevin McCullough.
+
+        - Splits Objective-C tests out of wrapper-classes.html and into platform specific test.
+        - Adds tests for .__proto__ and .constructor to JS wrapper tests.
+
+        * fast/dom/wrapper-classes.html:
+        * platform/mac/fast/dom/wrapper-classes-expected.txt:
+        * platform/mac/fast/dom/wrapper-classes-objc-expected.txt: Added.
+        * platform/mac/fast/dom/wrapper-classes-objc.html: Copied from fast/dom/wrapper-classes.html.
+        * platform/win/Skipped:
+
 2008-01-04  Stephanie  <slewis@apple.com>
 
         RS by Oliver.
index ab5ab2f..83dcd79 100644 (file)
@@ -27,51 +27,47 @@ function jsWrapperClass(node)
     return string.substr(8, string.length - 9);
 }
 
-function objCWrapperClass(node)
+function tagJSWrapperClass(tagName)
 {
-    if (!window.objCController)
-        return "only works under DumpRenderTree";
-    return objCController.className(node);
+    return jsWrapperClass(document.createElement(tagName));
 }
 
-function objCObjectOfClass(name)
+function tagJSWrapperPrototypeClass(tagName)
 {
-    if (!window.objCController)
-        return "only works under DumpRenderTree";
-    return objCController.objectOfClass(name);
+    return jsWrapperClass(document.createElement(tagName).__proto__);
 }
 
-function tagJSWrapperClass(tagName)
+function tagJSWrapperConstructorClass(tagName)
 {
-    return jsWrapperClass(document.createElement(tagName));
+    return jsWrapperClass(document.createElement(tagName).constructor);
 }
 
-function tagObjCWrapperClass(tagName)
-{
-    return objCWrapperClass(document.createElement(tagName));
-}
-
-function testTag(tagName, className, objCClassName)
+function testTag(tagName, className, prototypeName, constructorName)
 {
+    if (!prototypeName)
+        prototypeName = className + "Prototype";
+    if (!constructorName)
+        constructorName = className + "Constructor";
     shouldBe("tagJSWrapperClass('" + tagName + "')", "'" + className + "'");
-    if (!objCClassName)
-        objCClassName = "DOM" + className;
-    if (window.objCController)
-        shouldBe("tagObjCWrapperClass('" + tagName + "')", "'" + objCClassName + "'");
+    shouldBe("tagJSWrapperPrototypeClass('" + tagName + "')", "'" + prototypeName + "'");
+    shouldBe("tagJSWrapperConstructorClass('" + tagName + "')", "'" + constructorName + "'");
 }
 
-function test(expression, className, objCClassName)
+function test(expression, className, prototypeName, constructorName)
 {
+    if (!prototypeName)
+        prototypeName = className + "Prototype";
+    if (!constructorName)
+        constructorName = className + "Constructor";
     shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'");
-    if (!objCClassName)
-        objCClassName = "DOM" + className;
-    if (window.objCController)
-        shouldBe("objCWrapperClass(" + expression + ")", "'" + objCClassName + "'");
+    shouldBe("jsWrapperClass(" + expression + ".__proto__)", "'" + prototypeName + "'");
+    shouldBe("jsWrapperClass(" + expression + ".constructor)", "'" + constructorName + "'");
 }
 
 function runTest()
 {
-    description("This tests wrapper class names for both JavaScript and Objective-C.");
+    // NOTE: This is a sister test to platform/mac/fast/dom/wrapper-class-objc.html which test the Objective-C wrapper classes.  Update accordingly.
+    description("This tests wrapper class names for JavaScript.");
 
     stylesheet = document.getElementById("style").sheet;
     root = document.documentElement;
@@ -83,7 +79,7 @@ function runTest()
     test("document.createAttribute()", "Attr");
     test("document.createComment()", "Comment");
     test("document.createDocumentFragment()", "DocumentFragment");
-    test("document.implementation", "DOMImplementation", "DOMImplementation");
+    test("document.implementation", "DOMImplementation");
     test("root.attributes", "NamedNodeMap");
     test("document.createNodeIterator(root, 0, null, false)", "NodeIterator");
     test("document.getElementsByTagName('div')", "NodeList");
@@ -141,7 +137,7 @@ function runTest()
     debug('Other');
     debug('');
 
-    test("window", "DOMWindow", "DOMAbstractView");
+    test("window", "DOMWindow");
 
     debug('');
     debug('HTML DOM');
@@ -166,7 +162,7 @@ function runTest()
     testTag("basefont", "HTMLBaseFontElement");
     testTag("bdo", "HTMLElement");
     testTag("big", "HTMLElement");
-    testTag("blockquote", "HTMLBlockquoteElement", "DOMHTMLElement");
+    testTag("blockquote", "HTMLBlockquoteElement");
     testTag("body", "HTMLBodyElement");
     testTag("br", "HTMLBRElement");
     testTag("button", "HTMLButtonElement");
@@ -260,30 +256,6 @@ function runTest()
     testTag("wbr", "HTMLElement");
     testTag("xmp", "HTMLPreElement");
     
-    debug('');
-    debug('JavaScript types');
-    debug('');
-
-    if(window.objCController) {
-        shouldBe("objCWrapperClass(null)", "'nil'");
-        shouldBe("objCWrapperClass(undefined)", "'WebUndefined'");
-        shouldBe("objCWrapperClass(0)", "'NSCFNumber'");
-        shouldBe("objCWrapperClass(1)", "'NSCFNumber'");
-        shouldBe("objCWrapperClass(false)", "'NSCFBoolean'");
-        shouldBe("objCWrapperClass(true)", "'NSCFBoolean'");
-        shouldBe("objCWrapperClass('')", "'NSCFString'");
-        shouldBe("objCWrapperClass({ })", "'WebScriptObject'");
-        shouldBe("objCWrapperClass([ ])", "'WebScriptObject'");
-
-        shouldBe("objCObjectOfClass('NSNull')", "null"); // can't test with typeof because typeof null is 'object'
-        shouldBe("typeof objCObjectOfClass('')", "'undefined'");
-        shouldBe("typeof objCObjectOfClass('WebUndefined')", "'undefined'");
-        shouldBe("typeof objCObjectOfClass('NSCFBoolean')", "'boolean'");
-        shouldBe("typeof objCObjectOfClass('NSCFNumber')", "'number'");
-        shouldBe("typeof objCObjectOfClass('NSCFString')", "'string'");
-        shouldBe("typeof objCObjectOfClass('WebScriptObject')", "'object'");
-        shouldBeTrue("objCObjectOfClass('NSArray') instanceof Array");
-    }
     // Not yet tested:
 
     // CSSCharsetRule
index 618e6f1..4e85155 100644 (file)
@@ -1,4 +1,4 @@
-This tests wrapper class names for both JavaScript and Objective-C.
+This tests wrapper class names for JavaScript.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
@@ -6,332 +6,456 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 Basics
 
 PASS jsWrapperClass(document.createAttribute()) is 'Attr'
-PASS objCWrapperClass(document.createAttribute()) is 'DOMAttr'
+PASS jsWrapperClass(document.createAttribute().__proto__) is 'AttrPrototype'
+PASS jsWrapperClass(document.createAttribute().constructor) is 'AttrConstructor'
 PASS jsWrapperClass(document.createComment()) is 'Comment'
-PASS objCWrapperClass(document.createComment()) is 'DOMComment'
+PASS jsWrapperClass(document.createComment().__proto__) is 'CommentPrototype'
+PASS jsWrapperClass(document.createComment().constructor) is 'CommentConstructor'
 PASS jsWrapperClass(document.createDocumentFragment()) is 'DocumentFragment'
-PASS objCWrapperClass(document.createDocumentFragment()) is 'DOMDocumentFragment'
+PASS jsWrapperClass(document.createDocumentFragment().__proto__) is 'DocumentFragmentPrototype'
+PASS jsWrapperClass(document.createDocumentFragment().constructor) is 'DocumentFragmentConstructor'
 PASS jsWrapperClass(document.implementation) is 'DOMImplementation'
-PASS objCWrapperClass(document.implementation) is 'DOMImplementation'
+PASS jsWrapperClass(document.implementation.__proto__) is 'DOMImplementationPrototype'
+PASS jsWrapperClass(document.implementation.constructor) is 'DOMImplementationConstructor'
 PASS jsWrapperClass(root.attributes) is 'NamedNodeMap'
-PASS objCWrapperClass(root.attributes) is 'DOMNamedNodeMap'
+FAIL jsWrapperClass(root.attributes.__proto__) should be NamedNodeMapPrototype. Was Object.
+FAIL jsWrapperClass(root.attributes.constructor) should be NamedNodeMapConstructor. Was Function.
 PASS jsWrapperClass(document.createNodeIterator(root, 0, null, false)) is 'NodeIterator'
-PASS objCWrapperClass(document.createNodeIterator(root, 0, null, false)) is 'DOMNodeIterator'
+PASS jsWrapperClass(document.createNodeIterator(root, 0, null, false).__proto__) is 'NodeIteratorPrototype'
+FAIL jsWrapperClass(document.createNodeIterator(root, 0, null, false).constructor) should be NodeIteratorConstructor. Was Function.
 PASS jsWrapperClass(document.getElementsByTagName('div')) is 'NodeList'
-PASS objCWrapperClass(document.getElementsByTagName('div')) is 'DOMNodeList'
+PASS jsWrapperClass(document.getElementsByTagName('div').__proto__) is 'NodeListPrototype'
+PASS jsWrapperClass(document.getElementsByTagName('div').constructor) is 'NodeListConstructor'
 PASS jsWrapperClass(document.createRange()) is 'Range'
-PASS objCWrapperClass(document.createRange()) is 'DOMRange'
+PASS jsWrapperClass(document.createRange().__proto__) is 'RangePrototype'
+PASS jsWrapperClass(document.createRange().constructor) is 'RangeConstructor'
 PASS jsWrapperClass(document.createTextNode()) is 'Text'
-PASS objCWrapperClass(document.createTextNode()) is 'DOMText'
+PASS jsWrapperClass(document.createTextNode().__proto__) is 'TextPrototype'
+PASS jsWrapperClass(document.createTextNode().constructor) is 'TextConstructor'
 PASS jsWrapperClass(document.createTreeWalker(root, 0, null, false)) is 'TreeWalker'
-PASS objCWrapperClass(document.createTreeWalker(root, 0, null, false)) is 'DOMTreeWalker'
+PASS jsWrapperClass(document.createTreeWalker(root, 0, null, false).__proto__) is 'TreeWalkerPrototype'
+FAIL jsWrapperClass(document.createTreeWalker(root, 0, null, false).constructor) should be TreeWalkerConstructor. Was Function.
 
 XML
 
 PASS jsWrapperClass(xmlDocument) is 'Document'
-PASS objCWrapperClass(xmlDocument) is 'DOMDocument'
+PASS jsWrapperClass(xmlDocument.__proto__) is 'DocumentPrototype'
+PASS jsWrapperClass(xmlDocument.constructor) is 'DocumentConstructor'
 PASS jsWrapperClass(xmlDocument.createCDATASection()) is 'CDATASection'
-PASS objCWrapperClass(xmlDocument.createCDATASection()) is 'DOMCDATASection'
+PASS jsWrapperClass(xmlDocument.createCDATASection().__proto__) is 'CDATASectionPrototype'
+PASS jsWrapperClass(xmlDocument.createCDATASection().constructor) is 'CDATASectionConstructor'
 PASS jsWrapperClass(xmlDocument.createElementNS('x', 'x', 'x')) is 'Element'
-PASS objCWrapperClass(xmlDocument.createElementNS('x', 'x', 'x')) is 'DOMElement'
+PASS jsWrapperClass(xmlDocument.createElementNS('x', 'x', 'x').__proto__) is 'ElementPrototype'
+PASS jsWrapperClass(xmlDocument.createElementNS('x', 'x', 'x').constructor) is 'ElementConstructor'
 PASS jsWrapperClass(xmlDocument.createEntityReference()) is 'EntityReference'
-PASS objCWrapperClass(xmlDocument.createEntityReference()) is 'DOMEntityReference'
+PASS jsWrapperClass(xmlDocument.createEntityReference().__proto__) is 'EntityReferencePrototype'
+PASS jsWrapperClass(xmlDocument.createEntityReference().constructor) is 'EntityReferenceConstructor'
 PASS jsWrapperClass(xmlDocument.createProcessingInstruction()) is 'ProcessingInstruction'
-PASS objCWrapperClass(xmlDocument.createProcessingInstruction()) is 'DOMProcessingInstruction'
+PASS jsWrapperClass(xmlDocument.createProcessingInstruction().__proto__) is 'ProcessingInstructionPrototype'
+PASS jsWrapperClass(xmlDocument.createProcessingInstruction().constructor) is 'ProcessingInstructionConstructor'
 
 Events
 
 PASS jsWrapperClass(document.createEvent('Event')) is 'Event'
-PASS objCWrapperClass(document.createEvent('Event')) is 'DOMEvent'
+PASS jsWrapperClass(document.createEvent('Event').__proto__) is 'EventPrototype'
+PASS jsWrapperClass(document.createEvent('Event').constructor) is 'EventConstructor'
 PASS jsWrapperClass(document.createEvent('KeyboardEvent')) is 'KeyboardEvent'
-PASS objCWrapperClass(document.createEvent('KeyboardEvent')) is 'DOMKeyboardEvent'
+PASS jsWrapperClass(document.createEvent('KeyboardEvent').__proto__) is 'KeyboardEventPrototype'
+PASS jsWrapperClass(document.createEvent('KeyboardEvent').constructor) is 'KeyboardEventConstructor'
 PASS jsWrapperClass(document.createEvent('MouseEvent')) is 'MouseEvent'
-PASS objCWrapperClass(document.createEvent('MouseEvent')) is 'DOMMouseEvent'
+PASS jsWrapperClass(document.createEvent('MouseEvent').__proto__) is 'MouseEventPrototype'
+PASS jsWrapperClass(document.createEvent('MouseEvent').constructor) is 'MouseEventConstructor'
 PASS jsWrapperClass(document.createEvent('MutationEvent')) is 'MutationEvent'
-PASS objCWrapperClass(document.createEvent('MutationEvent')) is 'DOMMutationEvent'
+PASS jsWrapperClass(document.createEvent('MutationEvent').__proto__) is 'MutationEventPrototype'
+PASS jsWrapperClass(document.createEvent('MutationEvent').constructor) is 'MutationEventConstructor'
 PASS jsWrapperClass(document.createEvent('OverflowEvent')) is 'OverflowEvent'
-PASS objCWrapperClass(document.createEvent('OverflowEvent')) is 'DOMOverflowEvent'
+PASS jsWrapperClass(document.createEvent('OverflowEvent').__proto__) is 'OverflowEventPrototype'
+PASS jsWrapperClass(document.createEvent('OverflowEvent').constructor) is 'OverflowEventConstructor'
 PASS jsWrapperClass(document.createEvent('TextEvent')) is 'TextEvent'
-PASS objCWrapperClass(document.createEvent('TextEvent')) is 'DOMTextEvent'
+PASS jsWrapperClass(document.createEvent('TextEvent').__proto__) is 'TextEventPrototype'
+PASS jsWrapperClass(document.createEvent('TextEvent').constructor) is 'TextEventConstructor'
 PASS jsWrapperClass(document.createEvent('UIEvent')) is 'UIEvent'
-PASS objCWrapperClass(document.createEvent('UIEvent')) is 'DOMUIEvent'
+PASS jsWrapperClass(document.createEvent('UIEvent').__proto__) is 'UIEventPrototype'
+PASS jsWrapperClass(document.createEvent('UIEvent').constructor) is 'UIEventConstructor'
 PASS jsWrapperClass(document.createEvent('WheelEvent')) is 'WheelEvent'
-PASS objCWrapperClass(document.createEvent('WheelEvent')) is 'DOMWheelEvent'
+PASS jsWrapperClass(document.createEvent('WheelEvent').__proto__) is 'WheelEventPrototype'
+PASS jsWrapperClass(document.createEvent('WheelEvent').constructor) is 'WheelEventConstructor'
 
 CSS DOM
 
 PASS jsWrapperClass(document.styleSheets) is 'StyleSheetList'
-PASS objCWrapperClass(document.styleSheets) is 'DOMStyleSheetList'
+PASS jsWrapperClass(document.styleSheets.__proto__) is 'StyleSheetListPrototype'
+PASS jsWrapperClass(document.styleSheets.constructor) is 'StyleSheetListConstructor'
 PASS jsWrapperClass(stylesheet) is 'CSSStyleSheet'
-PASS objCWrapperClass(stylesheet) is 'DOMCSSStyleSheet'
+PASS jsWrapperClass(stylesheet.__proto__) is 'CSSStyleSheetPrototype'
+FAIL jsWrapperClass(stylesheet.constructor) should be CSSStyleSheetConstructor. Was StyleSheetConstructor.
 PASS jsWrapperClass(stylesheet.cssRules) is 'CSSRuleList'
-PASS objCWrapperClass(stylesheet.cssRules) is 'DOMCSSRuleList'
+PASS jsWrapperClass(stylesheet.cssRules.__proto__) is 'CSSRuleListPrototype'
+PASS jsWrapperClass(stylesheet.cssRules.constructor) is 'CSSRuleListConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0)) is 'CSSStyleRule'
-PASS objCWrapperClass(stylesheet.cssRules.item(0)) is 'DOMCSSStyleRule'
+FAIL jsWrapperClass(stylesheet.cssRules.item(0).__proto__) should be CSSStyleRulePrototype. Was CSSRulePrototype.
+PASS jsWrapperClass(stylesheet.cssRules.item(0).constructor) is 'CSSStyleRuleConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style) is 'CSSStyleDeclaration'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style) is 'DOMCSSStyleDeclaration'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.__proto__) is 'CSSStyleDeclarationPrototype'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.constructor) is 'CSSStyleDeclarationConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color')) is 'CSSPrimitiveValue'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color')) is 'DOMCSSPrimitiveValue'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').__proto__) is 'CSSPrimitiveValuePrototype'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').constructor) is 'CSSPrimitiveValueConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue()) is 'RGBColor'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue()) is 'DOMRGBColor'
+FAIL jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue().__proto__) should be RGBColorPrototype. Was Object.
+FAIL jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue().constructor) should be RGBColorConstructor. Was Function.
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue()) is 'Rect'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue()) is 'DOMRect'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue().__proto__) is 'RectPrototype'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue().constructor) is 'RectConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content')) is 'CSSValueList'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content')) is 'DOMCSSValueList'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').constructor) is 'CSSValueListConstructor'
 PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue()) is 'Counter'
-PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue()) is 'DOMCounter'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue().__proto__) is 'CounterPrototype'
+PASS jsWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue().constructor) is 'CounterConstructor'
 PASS jsWrapperClass(stylesheet.media) is 'MediaList'
-PASS objCWrapperClass(stylesheet.media) is 'DOMMediaList'
+PASS jsWrapperClass(stylesheet.media.__proto__) is 'MediaListPrototype'
+PASS jsWrapperClass(stylesheet.media.constructor) is 'MediaListConstructor'
 
 XPath
 
 PASS jsWrapperClass(document.createExpression('//*', document.createNSResolver(document))) is 'XPathExpression'
-PASS objCWrapperClass(document.createExpression('//*', document.createNSResolver(document))) is 'DOMXPathExpression'
+PASS jsWrapperClass(document.createExpression('//*', document.createNSResolver(document)).__proto__) is 'XPathExpressionPrototype'
+FAIL jsWrapperClass(document.createExpression('//*', document.createNSResolver(document)).constructor) should be XPathExpressionConstructor. Was Function.
 PASS jsWrapperClass(document.evaluate('//*', document, document.createNSResolver(document), 0, null)) is 'XPathResult'
-PASS objCWrapperClass(document.evaluate('//*', document, document.createNSResolver(document), 0, null)) is 'DOMXPathResult'
+PASS jsWrapperClass(document.evaluate('//*', document, document.createNSResolver(document), 0, null).__proto__) is 'XPathResultPrototype'
+PASS jsWrapperClass(document.evaluate('//*', document, document.createNSResolver(document), 0, null).constructor) is 'XPathResultConstructor'
 
 Other
 
 PASS jsWrapperClass(window) is 'DOMWindow'
-PASS objCWrapperClass(window) is 'DOMAbstractView'
+PASS jsWrapperClass(window.__proto__) is 'DOMWindowPrototype'
+FAIL jsWrapperClass(window.constructor) should be DOMWindowConstructor. Was Function.
 
 HTML DOM
 
 PASS jsWrapperClass(root.children) is 'HTMLCollection'
-PASS objCWrapperClass(root.children) is 'DOMHTMLCollection'
+FAIL jsWrapperClass(root.children.__proto__) should be HTMLCollectionPrototype. Was Object.
+FAIL jsWrapperClass(root.children.constructor) should be HTMLCollectionConstructor. Was Function.
 PASS jsWrapperClass(document) is 'HTMLDocument'
-PASS objCWrapperClass(document) is 'DOMHTMLDocument'
+PASS jsWrapperClass(document.__proto__) is 'HTMLDocumentPrototype'
+PASS jsWrapperClass(document.constructor) is 'HTMLDocumentConstructor'
 PASS jsWrapperClass(document.createElement('select').options) is 'HTMLOptionsCollection'
-PASS objCWrapperClass(document.createElement('select').options) is 'DOMHTMLOptionsCollection'
+FAIL jsWrapperClass(document.createElement('select').options.__proto__) should be HTMLOptionsCollectionPrototype. Was HTMLCollectionPrototype.
+FAIL jsWrapperClass(document.createElement('select').options.constructor) should be HTMLOptionsCollectionConstructor. Was Function.
 
 HTML Elements
 
 PASS tagJSWrapperClass('a') is 'HTMLAnchorElement'
-PASS tagObjCWrapperClass('a') is 'DOMHTMLAnchorElement'
+PASS tagJSWrapperPrototypeClass('a') is 'HTMLAnchorElementPrototype'
+PASS tagJSWrapperConstructorClass('a') is 'HTMLAnchorElementConstructor'
 PASS tagJSWrapperClass('abbr') is 'HTMLElement'
-PASS tagObjCWrapperClass('abbr') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('abbr') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('abbr') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('acronym') is 'HTMLElement'
-PASS tagObjCWrapperClass('acronym') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('acronym') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('acronym') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('address') is 'HTMLElement'
-PASS tagObjCWrapperClass('address') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('address') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('address') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('applet') is 'HTMLAppletElement'
-PASS tagObjCWrapperClass('applet') is 'DOMHTMLAppletElement'
+PASS tagJSWrapperPrototypeClass('applet') is 'HTMLAppletElementPrototype'
+PASS tagJSWrapperConstructorClass('applet') is 'HTMLAppletElementConstructor'
 PASS tagJSWrapperClass('area') is 'HTMLAreaElement'
-PASS tagObjCWrapperClass('area') is 'DOMHTMLAreaElement'
+PASS tagJSWrapperPrototypeClass('area') is 'HTMLAreaElementPrototype'
+PASS tagJSWrapperConstructorClass('area') is 'HTMLAreaElementConstructor'
 PASS tagJSWrapperClass('b') is 'HTMLElement'
-PASS tagObjCWrapperClass('b') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('b') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('b') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('base') is 'HTMLBaseElement'
-PASS tagObjCWrapperClass('base') is 'DOMHTMLBaseElement'
+PASS tagJSWrapperPrototypeClass('base') is 'HTMLBaseElementPrototype'
+PASS tagJSWrapperConstructorClass('base') is 'HTMLBaseElementConstructor'
 PASS tagJSWrapperClass('basefont') is 'HTMLBaseFontElement'
-PASS tagObjCWrapperClass('basefont') is 'DOMHTMLBaseFontElement'
+PASS tagJSWrapperPrototypeClass('basefont') is 'HTMLBaseFontElementPrototype'
+PASS tagJSWrapperConstructorClass('basefont') is 'HTMLBaseFontElementConstructor'
 PASS tagJSWrapperClass('bdo') is 'HTMLElement'
-PASS tagObjCWrapperClass('bdo') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('bdo') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('bdo') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('big') is 'HTMLElement'
-PASS tagObjCWrapperClass('big') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('big') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('big') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('blockquote') is 'HTMLBlockquoteElement'
-PASS tagObjCWrapperClass('blockquote') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('blockquote') is 'HTMLBlockquoteElementPrototype'
+PASS tagJSWrapperConstructorClass('blockquote') is 'HTMLBlockquoteElementConstructor'
 PASS tagJSWrapperClass('body') is 'HTMLBodyElement'
-PASS tagObjCWrapperClass('body') is 'DOMHTMLBodyElement'
+PASS tagJSWrapperPrototypeClass('body') is 'HTMLBodyElementPrototype'
+PASS tagJSWrapperConstructorClass('body') is 'HTMLBodyElementConstructor'
 PASS tagJSWrapperClass('br') is 'HTMLBRElement'
-PASS tagObjCWrapperClass('br') is 'DOMHTMLBRElement'
+PASS tagJSWrapperPrototypeClass('br') is 'HTMLBRElementPrototype'
+PASS tagJSWrapperConstructorClass('br') is 'HTMLBRElementConstructor'
 PASS tagJSWrapperClass('button') is 'HTMLButtonElement'
-PASS tagObjCWrapperClass('button') is 'DOMHTMLButtonElement'
+PASS tagJSWrapperPrototypeClass('button') is 'HTMLButtonElementPrototype'
+PASS tagJSWrapperConstructorClass('button') is 'HTMLButtonElementConstructor'
 PASS tagJSWrapperClass('canvas') is 'HTMLCanvasElement'
-PASS tagObjCWrapperClass('canvas') is 'DOMHTMLCanvasElement'
+PASS tagJSWrapperPrototypeClass('canvas') is 'HTMLCanvasElementPrototype'
+PASS tagJSWrapperConstructorClass('canvas') is 'HTMLCanvasElementConstructor'
 PASS tagJSWrapperClass('caption') is 'HTMLTableCaptionElement'
-PASS tagObjCWrapperClass('caption') is 'DOMHTMLTableCaptionElement'
+PASS tagJSWrapperPrototypeClass('caption') is 'HTMLTableCaptionElementPrototype'
+PASS tagJSWrapperConstructorClass('caption') is 'HTMLTableCaptionElementConstructor'
 PASS tagJSWrapperClass('center') is 'HTMLElement'
-PASS tagObjCWrapperClass('center') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('center') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('center') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('cite') is 'HTMLElement'
-PASS tagObjCWrapperClass('cite') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('cite') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('cite') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('code') is 'HTMLElement'
-PASS tagObjCWrapperClass('code') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('code') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('code') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('col') is 'HTMLTableColElement'
-PASS tagObjCWrapperClass('col') is 'DOMHTMLTableColElement'
+PASS tagJSWrapperPrototypeClass('col') is 'HTMLTableColElementPrototype'
+PASS tagJSWrapperConstructorClass('col') is 'HTMLTableColElementConstructor'
 PASS tagJSWrapperClass('colgroup') is 'HTMLTableColElement'
-PASS tagObjCWrapperClass('colgroup') is 'DOMHTMLTableColElement'
+PASS tagJSWrapperPrototypeClass('colgroup') is 'HTMLTableColElementPrototype'
+PASS tagJSWrapperConstructorClass('colgroup') is 'HTMLTableColElementConstructor'
 PASS tagJSWrapperClass('dd') is 'HTMLElement'
-PASS tagObjCWrapperClass('dd') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('dd') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('dd') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('del') is 'HTMLModElement'
-PASS tagObjCWrapperClass('del') is 'DOMHTMLModElement'
+PASS tagJSWrapperPrototypeClass('del') is 'HTMLModElementPrototype'
+PASS tagJSWrapperConstructorClass('del') is 'HTMLModElementConstructor'
 PASS tagJSWrapperClass('dfn') is 'HTMLElement'
-PASS tagObjCWrapperClass('dfn') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('dfn') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('dfn') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('dir') is 'HTMLDirectoryElement'
-PASS tagObjCWrapperClass('dir') is 'DOMHTMLDirectoryElement'
+PASS tagJSWrapperPrototypeClass('dir') is 'HTMLDirectoryElementPrototype'
+PASS tagJSWrapperConstructorClass('dir') is 'HTMLDirectoryElementConstructor'
 PASS tagJSWrapperClass('div') is 'HTMLDivElement'
-PASS tagObjCWrapperClass('div') is 'DOMHTMLDivElement'
+PASS tagJSWrapperPrototypeClass('div') is 'HTMLDivElementPrototype'
+PASS tagJSWrapperConstructorClass('div') is 'HTMLDivElementConstructor'
 PASS tagJSWrapperClass('dl') is 'HTMLDListElement'
-PASS tagObjCWrapperClass('dl') is 'DOMHTMLDListElement'
+PASS tagJSWrapperPrototypeClass('dl') is 'HTMLDListElementPrototype'
+PASS tagJSWrapperConstructorClass('dl') is 'HTMLDListElementConstructor'
 PASS tagJSWrapperClass('dt') is 'HTMLElement'
-PASS tagObjCWrapperClass('dt') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('dt') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('dt') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('em') is 'HTMLElement'
-PASS tagObjCWrapperClass('em') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('em') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('em') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('embed') is 'HTMLEmbedElement'
-PASS tagObjCWrapperClass('embed') is 'DOMHTMLEmbedElement'
+PASS tagJSWrapperPrototypeClass('embed') is 'HTMLEmbedElementPrototype'
+PASS tagJSWrapperConstructorClass('embed') is 'HTMLEmbedElementConstructor'
 PASS tagJSWrapperClass('fieldset') is 'HTMLFieldSetElement'
-PASS tagObjCWrapperClass('fieldset') is 'DOMHTMLFieldSetElement'
+PASS tagJSWrapperPrototypeClass('fieldset') is 'HTMLFieldSetElementPrototype'
+PASS tagJSWrapperConstructorClass('fieldset') is 'HTMLFieldSetElementConstructor'
 PASS tagJSWrapperClass('font') is 'HTMLFontElement'
-PASS tagObjCWrapperClass('font') is 'DOMHTMLFontElement'
+PASS tagJSWrapperPrototypeClass('font') is 'HTMLFontElementPrototype'
+PASS tagJSWrapperConstructorClass('font') is 'HTMLFontElementConstructor'
 PASS tagJSWrapperClass('form') is 'HTMLFormElement'
-PASS tagObjCWrapperClass('form') is 'DOMHTMLFormElement'
+PASS tagJSWrapperPrototypeClass('form') is 'HTMLFormElementPrototype'
+PASS tagJSWrapperConstructorClass('form') is 'HTMLFormElementConstructor'
 PASS tagJSWrapperClass('frame') is 'HTMLFrameElement'
-PASS tagObjCWrapperClass('frame') is 'DOMHTMLFrameElement'
+PASS tagJSWrapperPrototypeClass('frame') is 'HTMLFrameElementPrototype'
+PASS tagJSWrapperConstructorClass('frame') is 'HTMLFrameElementConstructor'
 PASS tagJSWrapperClass('frameset') is 'HTMLFrameSetElement'
-PASS tagObjCWrapperClass('frameset') is 'DOMHTMLFrameSetElement'
+PASS tagJSWrapperPrototypeClass('frameset') is 'HTMLFrameSetElementPrototype'
+PASS tagJSWrapperConstructorClass('frameset') is 'HTMLFrameSetElementConstructor'
 PASS tagJSWrapperClass('head') is 'HTMLHeadElement'
-PASS tagObjCWrapperClass('head') is 'DOMHTMLHeadElement'
+PASS tagJSWrapperPrototypeClass('head') is 'HTMLHeadElementPrototype'
+PASS tagJSWrapperConstructorClass('head') is 'HTMLHeadElementConstructor'
 PASS tagJSWrapperClass('h1') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h1') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h1') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h1') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('h2') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h2') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h2') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h2') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('h3') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h3') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h3') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h3') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('h4') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h4') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h4') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h4') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('h5') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h5') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h5') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h5') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('h6') is 'HTMLHeadingElement'
-PASS tagObjCWrapperClass('h6') is 'DOMHTMLHeadingElement'
+PASS tagJSWrapperPrototypeClass('h6') is 'HTMLHeadingElementPrototype'
+PASS tagJSWrapperConstructorClass('h6') is 'HTMLHeadingElementConstructor'
 PASS tagJSWrapperClass('hr') is 'HTMLHRElement'
-PASS tagObjCWrapperClass('hr') is 'DOMHTMLHRElement'
+PASS tagJSWrapperPrototypeClass('hr') is 'HTMLHRElementPrototype'
+PASS tagJSWrapperConstructorClass('hr') is 'HTMLHRElementConstructor'
 PASS tagJSWrapperClass('html') is 'HTMLHtmlElement'
-PASS tagObjCWrapperClass('html') is 'DOMHTMLHtmlElement'
+PASS tagJSWrapperPrototypeClass('html') is 'HTMLHtmlElementPrototype'
+PASS tagJSWrapperConstructorClass('html') is 'HTMLHtmlElementConstructor'
 PASS tagJSWrapperClass('i') is 'HTMLElement'
-PASS tagObjCWrapperClass('i') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('i') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('i') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('iframe') is 'HTMLIFrameElement'
-PASS tagObjCWrapperClass('iframe') is 'DOMHTMLIFrameElement'
+PASS tagJSWrapperPrototypeClass('iframe') is 'HTMLIFrameElementPrototype'
+PASS tagJSWrapperConstructorClass('iframe') is 'HTMLIFrameElementConstructor'
 PASS tagJSWrapperClass('image') is 'HTMLImageElement'
-PASS tagObjCWrapperClass('image') is 'DOMHTMLImageElement'
+PASS tagJSWrapperPrototypeClass('image') is 'HTMLImageElementPrototype'
+PASS tagJSWrapperConstructorClass('image') is 'HTMLImageElementConstructor'
 PASS tagJSWrapperClass('img') is 'HTMLImageElement'
-PASS tagObjCWrapperClass('img') is 'DOMHTMLImageElement'
+PASS tagJSWrapperPrototypeClass('img') is 'HTMLImageElementPrototype'
+PASS tagJSWrapperConstructorClass('img') is 'HTMLImageElementConstructor'
 PASS tagJSWrapperClass('input') is 'HTMLInputElement'
-PASS tagObjCWrapperClass('input') is 'DOMHTMLInputElement'
+PASS tagJSWrapperPrototypeClass('input') is 'HTMLInputElementPrototype'
+PASS tagJSWrapperConstructorClass('input') is 'HTMLInputElementConstructor'
 PASS tagJSWrapperClass('ins') is 'HTMLModElement'
-PASS tagObjCWrapperClass('ins') is 'DOMHTMLModElement'
+PASS tagJSWrapperPrototypeClass('ins') is 'HTMLModElementPrototype'
+PASS tagJSWrapperConstructorClass('ins') is 'HTMLModElementConstructor'
 PASS tagJSWrapperClass('isindex') is 'HTMLIsIndexElement'
-PASS tagObjCWrapperClass('isindex') is 'DOMHTMLIsIndexElement'
+PASS tagJSWrapperPrototypeClass('isindex') is 'HTMLIsIndexElementPrototype'
+PASS tagJSWrapperConstructorClass('isindex') is 'HTMLIsIndexElementConstructor'
 PASS tagJSWrapperClass('kbd') is 'HTMLElement'
-PASS tagObjCWrapperClass('kbd') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('kbd') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('kbd') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('keygen') is 'HTMLSelectElement'
-PASS tagObjCWrapperClass('keygen') is 'DOMHTMLSelectElement'
+PASS tagJSWrapperPrototypeClass('keygen') is 'HTMLSelectElementPrototype'
+PASS tagJSWrapperConstructorClass('keygen') is 'HTMLSelectElementConstructor'
 PASS tagJSWrapperClass('label') is 'HTMLLabelElement'
-PASS tagObjCWrapperClass('label') is 'DOMHTMLLabelElement'
+PASS tagJSWrapperPrototypeClass('label') is 'HTMLLabelElementPrototype'
+PASS tagJSWrapperConstructorClass('label') is 'HTMLLabelElementConstructor'
 PASS tagJSWrapperClass('layer') is 'HTMLElement'
-PASS tagObjCWrapperClass('layer') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('layer') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('layer') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('legend') is 'HTMLLegendElement'
-PASS tagObjCWrapperClass('legend') is 'DOMHTMLLegendElement'
+PASS tagJSWrapperPrototypeClass('legend') is 'HTMLLegendElementPrototype'
+PASS tagJSWrapperConstructorClass('legend') is 'HTMLLegendElementConstructor'
 PASS tagJSWrapperClass('li') is 'HTMLLIElement'
-PASS tagObjCWrapperClass('li') is 'DOMHTMLLIElement'
+PASS tagJSWrapperPrototypeClass('li') is 'HTMLLIElementPrototype'
+PASS tagJSWrapperConstructorClass('li') is 'HTMLLIElementConstructor'
 PASS tagJSWrapperClass('link') is 'HTMLLinkElement'
-PASS tagObjCWrapperClass('link') is 'DOMHTMLLinkElement'
+PASS tagJSWrapperPrototypeClass('link') is 'HTMLLinkElementPrototype'
+PASS tagJSWrapperConstructorClass('link') is 'HTMLLinkElementConstructor'
 PASS tagJSWrapperClass('listing') is 'HTMLPreElement'
-PASS tagObjCWrapperClass('listing') is 'DOMHTMLPreElement'
+PASS tagJSWrapperPrototypeClass('listing') is 'HTMLPreElementPrototype'
+PASS tagJSWrapperConstructorClass('listing') is 'HTMLPreElementConstructor'
 PASS tagJSWrapperClass('map') is 'HTMLMapElement'
-PASS tagObjCWrapperClass('map') is 'DOMHTMLMapElement'
+PASS tagJSWrapperPrototypeClass('map') is 'HTMLMapElementPrototype'
+PASS tagJSWrapperConstructorClass('map') is 'HTMLMapElementConstructor'
 PASS tagJSWrapperClass('marquee') is 'HTMLMarqueeElement'
-PASS tagObjCWrapperClass('marquee') is 'DOMHTMLMarqueeElement'
+PASS tagJSWrapperPrototypeClass('marquee') is 'HTMLMarqueeElementPrototype'
+PASS tagJSWrapperConstructorClass('marquee') is 'HTMLMarqueeElementConstructor'
 PASS tagJSWrapperClass('menu') is 'HTMLMenuElement'
-PASS tagObjCWrapperClass('menu') is 'DOMHTMLMenuElement'
+PASS tagJSWrapperPrototypeClass('menu') is 'HTMLMenuElementPrototype'
+PASS tagJSWrapperConstructorClass('menu') is 'HTMLMenuElementConstructor'
 PASS tagJSWrapperClass('meta') is 'HTMLMetaElement'
-PASS tagObjCWrapperClass('meta') is 'DOMHTMLMetaElement'
+PASS tagJSWrapperPrototypeClass('meta') is 'HTMLMetaElementPrototype'
+PASS tagJSWrapperConstructorClass('meta') is 'HTMLMetaElementConstructor'
 PASS tagJSWrapperClass('nobr') is 'HTMLElement'
-PASS tagObjCWrapperClass('nobr') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('nobr') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('nobr') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('noembed') is 'HTMLElement'
-PASS tagObjCWrapperClass('noembed') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('noembed') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('noembed') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('noframes') is 'HTMLElement'
-PASS tagObjCWrapperClass('noframes') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('noframes') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('noframes') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('nolayer') is 'HTMLElement'
-PASS tagObjCWrapperClass('nolayer') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('nolayer') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('nolayer') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('noscript') is 'HTMLElement'
-PASS tagObjCWrapperClass('noscript') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('noscript') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('noscript') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('object') is 'HTMLObjectElement'
-PASS tagObjCWrapperClass('object') is 'DOMHTMLObjectElement'
+PASS tagJSWrapperPrototypeClass('object') is 'HTMLObjectElementPrototype'
+PASS tagJSWrapperConstructorClass('object') is 'HTMLObjectElementConstructor'
 PASS tagJSWrapperClass('ol') is 'HTMLOListElement'
-PASS tagObjCWrapperClass('ol') is 'DOMHTMLOListElement'
+PASS tagJSWrapperPrototypeClass('ol') is 'HTMLOListElementPrototype'
+PASS tagJSWrapperConstructorClass('ol') is 'HTMLOListElementConstructor'
 PASS tagJSWrapperClass('optgroup') is 'HTMLOptGroupElement'
-PASS tagObjCWrapperClass('optgroup') is 'DOMHTMLOptGroupElement'
+PASS tagJSWrapperPrototypeClass('optgroup') is 'HTMLOptGroupElementPrototype'
+PASS tagJSWrapperConstructorClass('optgroup') is 'HTMLOptGroupElementConstructor'
 PASS tagJSWrapperClass('option') is 'HTMLOptionElement'
-PASS tagObjCWrapperClass('option') is 'DOMHTMLOptionElement'
+PASS tagJSWrapperPrototypeClass('option') is 'HTMLOptionElementPrototype'
+FAIL tagJSWrapperConstructorClass('option') should be HTMLOptionElementConstructor. Was HTMLElementConstructor.
 PASS tagJSWrapperClass('p') is 'HTMLParagraphElement'
-PASS tagObjCWrapperClass('p') is 'DOMHTMLParagraphElement'
+PASS tagJSWrapperPrototypeClass('p') is 'HTMLParagraphElementPrototype'
+PASS tagJSWrapperConstructorClass('p') is 'HTMLParagraphElementConstructor'
 PASS tagJSWrapperClass('param') is 'HTMLParamElement'
-PASS tagObjCWrapperClass('param') is 'DOMHTMLParamElement'
+PASS tagJSWrapperPrototypeClass('param') is 'HTMLParamElementPrototype'
+PASS tagJSWrapperConstructorClass('param') is 'HTMLParamElementConstructor'
 PASS tagJSWrapperClass('plaintext') is 'HTMLElement'
-PASS tagObjCWrapperClass('plaintext') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('plaintext') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('plaintext') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('pre') is 'HTMLPreElement'
-PASS tagObjCWrapperClass('pre') is 'DOMHTMLPreElement'
+PASS tagJSWrapperPrototypeClass('pre') is 'HTMLPreElementPrototype'
+PASS tagJSWrapperConstructorClass('pre') is 'HTMLPreElementConstructor'
 PASS tagJSWrapperClass('q') is 'HTMLQuoteElement'
-PASS tagObjCWrapperClass('q') is 'DOMHTMLQuoteElement'
+PASS tagJSWrapperPrototypeClass('q') is 'HTMLQuoteElementPrototype'
+PASS tagJSWrapperConstructorClass('q') is 'HTMLQuoteElementConstructor'
 PASS tagJSWrapperClass('s') is 'HTMLElement'
-PASS tagObjCWrapperClass('s') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('s') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('s') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('samp') is 'HTMLElement'
-PASS tagObjCWrapperClass('samp') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('samp') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('samp') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('script') is 'HTMLScriptElement'
-PASS tagObjCWrapperClass('script') is 'DOMHTMLScriptElement'
+PASS tagJSWrapperPrototypeClass('script') is 'HTMLScriptElementPrototype'
+PASS tagJSWrapperConstructorClass('script') is 'HTMLScriptElementConstructor'
 PASS tagJSWrapperClass('select') is 'HTMLSelectElement'
-PASS tagObjCWrapperClass('select') is 'DOMHTMLSelectElement'
+PASS tagJSWrapperPrototypeClass('select') is 'HTMLSelectElementPrototype'
+PASS tagJSWrapperConstructorClass('select') is 'HTMLSelectElementConstructor'
 PASS tagJSWrapperClass('small') is 'HTMLElement'
-PASS tagObjCWrapperClass('small') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('small') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('small') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('span') is 'HTMLElement'
-PASS tagObjCWrapperClass('span') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('span') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('span') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('strike') is 'HTMLElement'
-PASS tagObjCWrapperClass('strike') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('strike') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('strike') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('strong') is 'HTMLElement'
-PASS tagObjCWrapperClass('strong') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('strong') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('strong') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('style') is 'HTMLStyleElement'
-PASS tagObjCWrapperClass('style') is 'DOMHTMLStyleElement'
+PASS tagJSWrapperPrototypeClass('style') is 'HTMLStyleElementPrototype'
+PASS tagJSWrapperConstructorClass('style') is 'HTMLStyleElementConstructor'
 PASS tagJSWrapperClass('sub') is 'HTMLElement'
-PASS tagObjCWrapperClass('sub') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('sub') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('sub') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('sup') is 'HTMLElement'
-PASS tagObjCWrapperClass('sup') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('sup') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('sup') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('table') is 'HTMLTableElement'
-PASS tagObjCWrapperClass('table') is 'DOMHTMLTableElement'
+PASS tagJSWrapperPrototypeClass('table') is 'HTMLTableElementPrototype'
+PASS tagJSWrapperConstructorClass('table') is 'HTMLTableElementConstructor'
 PASS tagJSWrapperClass('tbody') is 'HTMLTableSectionElement'
-PASS tagObjCWrapperClass('tbody') is 'DOMHTMLTableSectionElement'
+PASS tagJSWrapperPrototypeClass('tbody') is 'HTMLTableSectionElementPrototype'
+PASS tagJSWrapperConstructorClass('tbody') is 'HTMLTableSectionElementConstructor'
 PASS tagJSWrapperClass('td') is 'HTMLTableCellElement'
-PASS tagObjCWrapperClass('td') is 'DOMHTMLTableCellElement'
+PASS tagJSWrapperPrototypeClass('td') is 'HTMLTableCellElementPrototype'
+PASS tagJSWrapperConstructorClass('td') is 'HTMLTableCellElementConstructor'
 PASS tagJSWrapperClass('textarea') is 'HTMLTextAreaElement'
-PASS tagObjCWrapperClass('textarea') is 'DOMHTMLTextAreaElement'
+PASS tagJSWrapperPrototypeClass('textarea') is 'HTMLTextAreaElementPrototype'
+PASS tagJSWrapperConstructorClass('textarea') is 'HTMLTextAreaElementConstructor'
 PASS tagJSWrapperClass('tfoot') is 'HTMLTableSectionElement'
-PASS tagObjCWrapperClass('tfoot') is 'DOMHTMLTableSectionElement'
+PASS tagJSWrapperPrototypeClass('tfoot') is 'HTMLTableSectionElementPrototype'
+PASS tagJSWrapperConstructorClass('tfoot') is 'HTMLTableSectionElementConstructor'
 PASS tagJSWrapperClass('th') is 'HTMLTableCellElement'
-PASS tagObjCWrapperClass('th') is 'DOMHTMLTableCellElement'
+PASS tagJSWrapperPrototypeClass('th') is 'HTMLTableCellElementPrototype'
+PASS tagJSWrapperConstructorClass('th') is 'HTMLTableCellElementConstructor'
 PASS tagJSWrapperClass('thead') is 'HTMLTableSectionElement'
-PASS tagObjCWrapperClass('thead') is 'DOMHTMLTableSectionElement'
+PASS tagJSWrapperPrototypeClass('thead') is 'HTMLTableSectionElementPrototype'
+PASS tagJSWrapperConstructorClass('thead') is 'HTMLTableSectionElementConstructor'
 PASS tagJSWrapperClass('title') is 'HTMLTitleElement'
-PASS tagObjCWrapperClass('title') is 'DOMHTMLTitleElement'
+PASS tagJSWrapperPrototypeClass('title') is 'HTMLTitleElementPrototype'
+PASS tagJSWrapperConstructorClass('title') is 'HTMLTitleElementConstructor'
 PASS tagJSWrapperClass('tr') is 'HTMLTableRowElement'
-PASS tagObjCWrapperClass('tr') is 'DOMHTMLTableRowElement'
+PASS tagJSWrapperPrototypeClass('tr') is 'HTMLTableRowElementPrototype'
+PASS tagJSWrapperConstructorClass('tr') is 'HTMLTableRowElementConstructor'
 PASS tagJSWrapperClass('tt') is 'HTMLElement'
-PASS tagObjCWrapperClass('tt') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('tt') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('tt') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('u') is 'HTMLElement'
-PASS tagObjCWrapperClass('u') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('u') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('u') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('ul') is 'HTMLUListElement'
-PASS tagObjCWrapperClass('ul') is 'DOMHTMLUListElement'
+PASS tagJSWrapperPrototypeClass('ul') is 'HTMLUListElementPrototype'
+PASS tagJSWrapperConstructorClass('ul') is 'HTMLUListElementConstructor'
 PASS tagJSWrapperClass('var') is 'HTMLElement'
-PASS tagObjCWrapperClass('var') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('var') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('var') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('wbr') is 'HTMLElement'
-PASS tagObjCWrapperClass('wbr') is 'DOMHTMLElement'
+PASS tagJSWrapperPrototypeClass('wbr') is 'HTMLElementPrototype'
+PASS tagJSWrapperConstructorClass('wbr') is 'HTMLElementConstructor'
 PASS tagJSWrapperClass('xmp') is 'HTMLPreElement'
-PASS tagObjCWrapperClass('xmp') is 'DOMHTMLPreElement'
-
-JavaScript types
-
-PASS objCWrapperClass(null) is 'nil'
-PASS objCWrapperClass(undefined) is 'WebUndefined'
-PASS objCWrapperClass(0) is 'NSCFNumber'
-PASS objCWrapperClass(1) is 'NSCFNumber'
-PASS objCWrapperClass(false) is 'NSCFBoolean'
-PASS objCWrapperClass(true) is 'NSCFBoolean'
-PASS objCWrapperClass('') is 'NSCFString'
-PASS objCWrapperClass({ }) is 'WebScriptObject'
-PASS objCWrapperClass([ ]) is 'WebScriptObject'
-PASS objCObjectOfClass('NSNull') is null
-PASS typeof objCObjectOfClass('') is 'undefined'
-PASS typeof objCObjectOfClass('WebUndefined') is 'undefined'
-PASS typeof objCObjectOfClass('NSCFBoolean') is 'boolean'
-PASS typeof objCObjectOfClass('NSCFNumber') is 'number'
-PASS typeof objCObjectOfClass('NSCFString') is 'string'
-PASS typeof objCObjectOfClass('WebScriptObject') is 'object'
-PASS objCObjectOfClass('NSArray') instanceof Array is true
+PASS tagJSWrapperPrototypeClass('xmp') is 'HTMLPreElementPrototype'
+PASS tagJSWrapperConstructorClass('xmp') is 'HTMLPreElementConstructor'
 
diff --git a/LayoutTests/platform/mac/fast/dom/wrapper-classes-objc-expected.txt b/LayoutTests/platform/mac/fast/dom/wrapper-classes-objc-expected.txt
new file mode 100644 (file)
index 0000000..854d24f
--- /dev/null
@@ -0,0 +1,193 @@
+This tests wrapper class names for Objective-C.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Basics
+
+PASS objCWrapperClass(document.createAttribute()) is 'DOMAttr'
+PASS objCWrapperClass(document.createComment()) is 'DOMComment'
+PASS objCWrapperClass(document.createDocumentFragment()) is 'DOMDocumentFragment'
+PASS objCWrapperClass(document.implementation) is 'DOMImplementation'
+PASS objCWrapperClass(root.attributes) is 'DOMNamedNodeMap'
+PASS objCWrapperClass(document.createNodeIterator(root, 0, null, false)) is 'DOMNodeIterator'
+PASS objCWrapperClass(document.getElementsByTagName('div')) is 'DOMNodeList'
+PASS objCWrapperClass(document.createRange()) is 'DOMRange'
+PASS objCWrapperClass(document.createTextNode()) is 'DOMText'
+PASS objCWrapperClass(document.createTreeWalker(root, 0, null, false)) is 'DOMTreeWalker'
+
+XML
+
+PASS objCWrapperClass(xmlDocument) is 'DOMDocument'
+PASS objCWrapperClass(xmlDocument.createCDATASection()) is 'DOMCDATASection'
+PASS objCWrapperClass(xmlDocument.createElementNS('x', 'x', 'x')) is 'DOMElement'
+PASS objCWrapperClass(xmlDocument.createEntityReference()) is 'DOMEntityReference'
+PASS objCWrapperClass(xmlDocument.createProcessingInstruction()) is 'DOMProcessingInstruction'
+
+Events
+
+PASS objCWrapperClass(document.createEvent('Event')) is 'DOMEvent'
+PASS objCWrapperClass(document.createEvent('KeyboardEvent')) is 'DOMKeyboardEvent'
+PASS objCWrapperClass(document.createEvent('MouseEvent')) is 'DOMMouseEvent'
+PASS objCWrapperClass(document.createEvent('MutationEvent')) is 'DOMMutationEvent'
+PASS objCWrapperClass(document.createEvent('OverflowEvent')) is 'DOMOverflowEvent'
+PASS objCWrapperClass(document.createEvent('TextEvent')) is 'DOMTextEvent'
+PASS objCWrapperClass(document.createEvent('UIEvent')) is 'DOMUIEvent'
+PASS objCWrapperClass(document.createEvent('WheelEvent')) is 'DOMWheelEvent'
+
+CSS DOM
+
+PASS objCWrapperClass(document.styleSheets) is 'DOMStyleSheetList'
+PASS objCWrapperClass(stylesheet) is 'DOMCSSStyleSheet'
+PASS objCWrapperClass(stylesheet.cssRules) is 'DOMCSSRuleList'
+PASS objCWrapperClass(stylesheet.cssRules.item(0)) is 'DOMCSSStyleRule'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style) is 'DOMCSSStyleDeclaration'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color')) is 'DOMCSSPrimitiveValue'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue()) is 'DOMRGBColor'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue()) is 'DOMRect'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content')) is 'DOMCSSValueList'
+PASS objCWrapperClass(stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue()) is 'DOMCounter'
+PASS objCWrapperClass(stylesheet.media) is 'DOMMediaList'
+
+XPath
+
+PASS objCWrapperClass(document.createExpression('//*', document.createNSResolver(document))) is 'DOMXPathExpression'
+PASS objCWrapperClass(document.evaluate('//*', document, document.createNSResolver(document), 0, null)) is 'DOMXPathResult'
+
+Other
+
+PASS objCWrapperClass(window) is 'DOMAbstractView'
+
+HTML DOM
+
+PASS objCWrapperClass(root.children) is 'DOMHTMLCollection'
+PASS objCWrapperClass(document) is 'DOMHTMLDocument'
+PASS objCWrapperClass(document.createElement('select').options) is 'DOMHTMLOptionsCollection'
+
+HTML Elements
+
+PASS tagObjCWrapperClass('a') is 'DOMHTMLAnchorElement'
+PASS tagObjCWrapperClass('abbr') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('acronym') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('address') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('applet') is 'DOMHTMLAppletElement'
+PASS tagObjCWrapperClass('area') is 'DOMHTMLAreaElement'
+PASS tagObjCWrapperClass('b') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('base') is 'DOMHTMLBaseElement'
+PASS tagObjCWrapperClass('basefont') is 'DOMHTMLBaseFontElement'
+PASS tagObjCWrapperClass('bdo') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('big') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('blockquote') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('body') is 'DOMHTMLBodyElement'
+PASS tagObjCWrapperClass('br') is 'DOMHTMLBRElement'
+PASS tagObjCWrapperClass('button') is 'DOMHTMLButtonElement'
+PASS tagObjCWrapperClass('canvas') is 'DOMHTMLCanvasElement'
+PASS tagObjCWrapperClass('caption') is 'DOMHTMLTableCaptionElement'
+PASS tagObjCWrapperClass('center') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('cite') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('code') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('col') is 'DOMHTMLTableColElement'
+PASS tagObjCWrapperClass('colgroup') is 'DOMHTMLTableColElement'
+PASS tagObjCWrapperClass('dd') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('del') is 'DOMHTMLModElement'
+PASS tagObjCWrapperClass('dfn') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('dir') is 'DOMHTMLDirectoryElement'
+PASS tagObjCWrapperClass('div') is 'DOMHTMLDivElement'
+PASS tagObjCWrapperClass('dl') is 'DOMHTMLDListElement'
+PASS tagObjCWrapperClass('dt') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('em') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('embed') is 'DOMHTMLEmbedElement'
+PASS tagObjCWrapperClass('fieldset') is 'DOMHTMLFieldSetElement'
+PASS tagObjCWrapperClass('font') is 'DOMHTMLFontElement'
+PASS tagObjCWrapperClass('form') is 'DOMHTMLFormElement'
+PASS tagObjCWrapperClass('frame') is 'DOMHTMLFrameElement'
+PASS tagObjCWrapperClass('frameset') is 'DOMHTMLFrameSetElement'
+PASS tagObjCWrapperClass('head') is 'DOMHTMLHeadElement'
+PASS tagObjCWrapperClass('h1') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('h2') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('h3') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('h4') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('h5') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('h6') is 'DOMHTMLHeadingElement'
+PASS tagObjCWrapperClass('hr') is 'DOMHTMLHRElement'
+PASS tagObjCWrapperClass('html') is 'DOMHTMLHtmlElement'
+PASS tagObjCWrapperClass('i') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('iframe') is 'DOMHTMLIFrameElement'
+PASS tagObjCWrapperClass('image') is 'DOMHTMLImageElement'
+PASS tagObjCWrapperClass('img') is 'DOMHTMLImageElement'
+PASS tagObjCWrapperClass('input') is 'DOMHTMLInputElement'
+PASS tagObjCWrapperClass('ins') is 'DOMHTMLModElement'
+PASS tagObjCWrapperClass('isindex') is 'DOMHTMLIsIndexElement'
+PASS tagObjCWrapperClass('kbd') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('keygen') is 'DOMHTMLSelectElement'
+PASS tagObjCWrapperClass('label') is 'DOMHTMLLabelElement'
+PASS tagObjCWrapperClass('layer') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('legend') is 'DOMHTMLLegendElement'
+PASS tagObjCWrapperClass('li') is 'DOMHTMLLIElement'
+PASS tagObjCWrapperClass('link') is 'DOMHTMLLinkElement'
+PASS tagObjCWrapperClass('listing') is 'DOMHTMLPreElement'
+PASS tagObjCWrapperClass('map') is 'DOMHTMLMapElement'
+PASS tagObjCWrapperClass('marquee') is 'DOMHTMLMarqueeElement'
+PASS tagObjCWrapperClass('menu') is 'DOMHTMLMenuElement'
+PASS tagObjCWrapperClass('meta') is 'DOMHTMLMetaElement'
+PASS tagObjCWrapperClass('nobr') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('noembed') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('noframes') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('nolayer') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('noscript') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('object') is 'DOMHTMLObjectElement'
+PASS tagObjCWrapperClass('ol') is 'DOMHTMLOListElement'
+PASS tagObjCWrapperClass('optgroup') is 'DOMHTMLOptGroupElement'
+PASS tagObjCWrapperClass('option') is 'DOMHTMLOptionElement'
+PASS tagObjCWrapperClass('p') is 'DOMHTMLParagraphElement'
+PASS tagObjCWrapperClass('param') is 'DOMHTMLParamElement'
+PASS tagObjCWrapperClass('plaintext') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('pre') is 'DOMHTMLPreElement'
+PASS tagObjCWrapperClass('q') is 'DOMHTMLQuoteElement'
+PASS tagObjCWrapperClass('s') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('samp') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('script') is 'DOMHTMLScriptElement'
+PASS tagObjCWrapperClass('select') is 'DOMHTMLSelectElement'
+PASS tagObjCWrapperClass('small') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('span') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('strike') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('strong') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('style') is 'DOMHTMLStyleElement'
+PASS tagObjCWrapperClass('sub') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('sup') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('table') is 'DOMHTMLTableElement'
+PASS tagObjCWrapperClass('tbody') is 'DOMHTMLTableSectionElement'
+PASS tagObjCWrapperClass('td') is 'DOMHTMLTableCellElement'
+PASS tagObjCWrapperClass('textarea') is 'DOMHTMLTextAreaElement'
+PASS tagObjCWrapperClass('tfoot') is 'DOMHTMLTableSectionElement'
+PASS tagObjCWrapperClass('th') is 'DOMHTMLTableCellElement'
+PASS tagObjCWrapperClass('thead') is 'DOMHTMLTableSectionElement'
+PASS tagObjCWrapperClass('title') is 'DOMHTMLTitleElement'
+PASS tagObjCWrapperClass('tr') is 'DOMHTMLTableRowElement'
+PASS tagObjCWrapperClass('tt') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('u') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('ul') is 'DOMHTMLUListElement'
+PASS tagObjCWrapperClass('var') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('wbr') is 'DOMHTMLElement'
+PASS tagObjCWrapperClass('xmp') is 'DOMHTMLPreElement'
+
+JavaScript types
+
+PASS objCWrapperClass(null) is 'nil'
+PASS objCWrapperClass(undefined) is 'WebUndefined'
+PASS objCWrapperClass(0) is 'NSCFNumber'
+PASS objCWrapperClass(1) is 'NSCFNumber'
+PASS objCWrapperClass(false) is 'NSCFBoolean'
+PASS objCWrapperClass(true) is 'NSCFBoolean'
+PASS objCWrapperClass('') is 'NSCFString'
+PASS objCWrapperClass({ }) is 'WebScriptObject'
+PASS objCWrapperClass([ ]) is 'WebScriptObject'
+PASS objCObjectOfClass('NSNull') is null
+PASS typeof objCObjectOfClass('') is 'undefined'
+PASS typeof objCObjectOfClass('WebUndefined') is 'undefined'
+PASS typeof objCObjectOfClass('NSCFBoolean') is 'boolean'
+PASS typeof objCObjectOfClass('NSCFNumber') is 'number'
+PASS typeof objCObjectOfClass('NSCFString') is 'string'
+PASS typeof objCObjectOfClass('WebScriptObject') is 'object'
+PASS objCObjectOfClass('NSArray') instanceof Array is true
+
diff --git a/LayoutTests/platform/mac/fast/dom/wrapper-classes-objc.html b/LayoutTests/platform/mac/fast/dom/wrapper-classes-objc.html
new file mode 100644 (file)
index 0000000..da35e03
--- /dev/null
@@ -0,0 +1,300 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../../../fast/js/resources/js-test-style.css">
+<script src="../../../../fast/js/resources/js-test-pre.js"></script>
+<style id="style" media="screen">
+.non-existent-class {
+    color: black;
+    clip: rect(0, 0, 1, 1);
+    content: counter(dummy, square);
+}
+</style>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<iframe id="xmlframe" onload="frameLoaded()" style="height:0px" src="data:application/xhtml+xml,<?xml version='1.0' encoding='UTF-8'?><body/>"></iframe>
+<script>
+
+if (window.layoutTestController)
+    layoutTestController.waitUntilDone();
+
+function objCWrapperClass(node)
+{
+    if (!window.objCController)
+        return "only works under DumpRenderTree";
+    return objCController.className(node);
+}
+
+function objCObjectOfClass(name)
+{
+    if (!window.objCController)
+        return "only works under DumpRenderTree";
+    return objCController.objectOfClass(name);
+}
+
+function tagObjCWrapperClass(tagName)
+{
+    return objCWrapperClass(document.createElement(tagName));
+}
+
+function testTag(tagName, className, objCClassName)
+{
+    if (!objCClassName)
+        objCClassName = "DOM" + className;
+    if (window.objCController)
+        shouldBe("tagObjCWrapperClass('" + tagName + "')", "'" + objCClassName + "'");
+}
+
+function test(expression, className, objCClassName)
+{
+    if (!objCClassName)
+        objCClassName = "DOM" + className;
+    if (window.objCController)
+        shouldBe("objCWrapperClass(" + expression + ")", "'" + objCClassName + "'");
+}
+
+function runTest()
+{
+    // NOTE: This is a sister test to fast/dom/wrapper-class.html which test the JS wrapper classes.  Update accordingly.
+    description("This tests wrapper class names for Objective-C.");
+
+    stylesheet = document.getElementById("style").sheet;
+    root = document.documentElement;
+    xmlDocument = document.getElementById("xmlframe").contentDocument;
+
+    debug('Basics');
+    debug('');
+
+    test("document.createAttribute()", "Attr");
+    test("document.createComment()", "Comment");
+    test("document.createDocumentFragment()", "DocumentFragment");
+    test("document.implementation", "DOMImplementation", "DOMImplementation");
+    test("root.attributes", "NamedNodeMap");
+    test("document.createNodeIterator(root, 0, null, false)", "NodeIterator");
+    test("document.getElementsByTagName('div')", "NodeList");
+    test("document.createRange()", "Range");
+    test("document.createTextNode()", "Text");
+    test("document.createTreeWalker(root, 0, null, false)", "TreeWalker");
+
+    debug('');
+    debug('XML');
+    debug('');
+
+    test("xmlDocument", "Document");
+    test("xmlDocument.createCDATASection()", "CDATASection");
+    test("xmlDocument.createElementNS('x', 'x', 'x')", "Element");
+    test("xmlDocument.createEntityReference()", "EntityReference");
+    test("xmlDocument.createProcessingInstruction()", "ProcessingInstruction");
+
+    debug('');
+    debug('Events');
+    debug('');
+
+    test("document.createEvent('Event')", "Event");
+    test("document.createEvent('KeyboardEvent')", "KeyboardEvent");
+    test("document.createEvent('MouseEvent')", "MouseEvent");
+    test("document.createEvent('MutationEvent')", "MutationEvent");
+    test("document.createEvent('OverflowEvent')", "OverflowEvent");
+    test("document.createEvent('TextEvent')", "TextEvent");
+    test("document.createEvent('UIEvent')", "UIEvent");
+    test("document.createEvent('WheelEvent')", "WheelEvent");
+
+    debug('');
+    debug('CSS DOM');
+    debug('');
+
+    test("document.styleSheets", "StyleSheetList");
+    test("stylesheet", "CSSStyleSheet");
+    test("stylesheet.cssRules", "CSSRuleList");
+    test("stylesheet.cssRules.item(0)", "CSSStyleRule");
+    test("stylesheet.cssRules.item(0).style", "CSSStyleDeclaration");
+    test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('color')", "CSSPrimitiveValue");
+    test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue()", "RGBColor");
+    test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue()", "Rect");
+    test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('content')", "CSSValueList");
+    test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue()", "Counter");
+    test("stylesheet.media", "MediaList");
+
+    debug('');
+    debug('XPath');
+    debug('');
+
+    test("document.createExpression('//*', document.createNSResolver(document))", "XPathExpression");
+    test("document.evaluate('//*', document, document.createNSResolver(document), 0, null)", "XPathResult");
+
+    debug('');
+    debug('Other');
+    debug('');
+
+    test("window", "DOMWindow", "DOMAbstractView");
+
+    debug('');
+    debug('HTML DOM');
+    debug('');
+
+    test("root.children", "HTMLCollection");
+    test("document", "HTMLDocument");
+    test("document.createElement('select').options", "HTMLOptionsCollection");
+
+    debug('');
+    debug('HTML Elements');
+    debug('');
+
+    testTag("a", "HTMLAnchorElement");
+    testTag("abbr", "HTMLElement");
+    testTag("acronym", "HTMLElement");
+    testTag("address", "HTMLElement");
+    testTag("applet", "HTMLAppletElement");
+    testTag("area", "HTMLAreaElement");
+    testTag("b", "HTMLElement");
+    testTag("base", "HTMLBaseElement");
+    testTag("basefont", "HTMLBaseFontElement");
+    testTag("bdo", "HTMLElement");
+    testTag("big", "HTMLElement");
+    testTag("blockquote", "HTMLBlockquoteElement", "DOMHTMLElement");
+    testTag("body", "HTMLBodyElement");
+    testTag("br", "HTMLBRElement");
+    testTag("button", "HTMLButtonElement");
+    testTag("canvas", "HTMLCanvasElement");
+    testTag("caption", "HTMLTableCaptionElement");
+    testTag("center", "HTMLElement");
+    testTag("cite", "HTMLElement");
+    testTag("code", "HTMLElement");
+    testTag("col", "HTMLTableColElement");
+    testTag("colgroup", "HTMLTableColElement");
+    testTag("dd", "HTMLElement");
+    testTag("del", "HTMLModElement");
+    testTag("dfn", "HTMLElement");
+    testTag("dir", "HTMLDirectoryElement");
+    testTag("div", "HTMLDivElement");
+    testTag("dl", "HTMLDListElement");
+    testTag("dt", "HTMLElement");
+    testTag("em", "HTMLElement");
+    testTag("embed", "HTMLEmbedElement");
+    testTag("fieldset", "HTMLFieldSetElement");
+    testTag("font", "HTMLFontElement");
+    testTag("form", "HTMLFormElement");
+    testTag("frame", "HTMLFrameElement");
+    testTag("frameset", "HTMLFrameSetElement");
+    testTag("head", "HTMLHeadElement");
+    testTag("h1", "HTMLHeadingElement");
+    testTag("h2", "HTMLHeadingElement");
+    testTag("h3", "HTMLHeadingElement");
+    testTag("h4", "HTMLHeadingElement");
+    testTag("h5", "HTMLHeadingElement");
+    testTag("h6", "HTMLHeadingElement");
+    testTag("hr", "HTMLHRElement");
+    testTag("html", "HTMLHtmlElement");
+    testTag("i", "HTMLElement");
+    testTag("iframe", "HTMLIFrameElement");
+    testTag("image", "HTMLImageElement");
+    testTag("img", "HTMLImageElement");
+    testTag("input", "HTMLInputElement");
+    testTag("ins", "HTMLModElement");
+    testTag("isindex", "HTMLIsIndexElement");
+    testTag("kbd", "HTMLElement");
+    testTag("keygen", "HTMLSelectElement");
+    testTag("label", "HTMLLabelElement");
+    testTag("layer", "HTMLElement");
+    testTag("legend", "HTMLLegendElement");
+    testTag("li", "HTMLLIElement");
+    testTag("link", "HTMLLinkElement");
+    testTag("listing", "HTMLPreElement");
+    testTag("map", "HTMLMapElement");
+    testTag("marquee", "HTMLMarqueeElement");
+    testTag("menu", "HTMLMenuElement");
+    testTag("meta", "HTMLMetaElement");
+    testTag("nobr", "HTMLElement");
+    testTag("noembed", "HTMLElement");
+    testTag("noframes", "HTMLElement");
+    testTag("nolayer", "HTMLElement");
+    testTag("noscript", "HTMLElement");
+    testTag("object", "HTMLObjectElement");
+    testTag("ol", "HTMLOListElement");
+    testTag("optgroup", "HTMLOptGroupElement");
+    testTag("option", "HTMLOptionElement");
+    testTag("p", "HTMLParagraphElement");
+    testTag("param", "HTMLParamElement");
+    testTag("plaintext", "HTMLElement");
+    testTag("pre", "HTMLPreElement");
+    testTag("q", "HTMLQuoteElement");
+    testTag("s", "HTMLElement");
+    testTag("samp", "HTMLElement");
+    testTag("script", "HTMLScriptElement");
+    testTag("select", "HTMLSelectElement");
+    testTag("small", "HTMLElement");
+    testTag("span", "HTMLElement");
+    testTag("strike", "HTMLElement");
+    testTag("strong", "HTMLElement");
+    testTag("style", "HTMLStyleElement");
+    testTag("sub", "HTMLElement");
+    testTag("sup", "HTMLElement");
+    testTag("table", "HTMLTableElement");
+    testTag("tbody", "HTMLTableSectionElement");
+    testTag("td", "HTMLTableCellElement");
+    testTag("textarea", "HTMLTextAreaElement");
+    testTag("tfoot", "HTMLTableSectionElement");
+    testTag("th", "HTMLTableCellElement");
+    testTag("thead", "HTMLTableSectionElement");
+    testTag("title", "HTMLTitleElement");
+    testTag("tr", "HTMLTableRowElement");
+    testTag("tt", "HTMLElement");
+    testTag("u", "HTMLElement");
+    testTag("ul", "HTMLUListElement");
+    testTag("var", "HTMLElement");
+    testTag("wbr", "HTMLElement");
+    testTag("xmp", "HTMLPreElement");
+    
+    debug('');
+    debug('JavaScript types');
+    debug('');
+
+    shouldBe("objCWrapperClass(null)", "'nil'");
+    shouldBe("objCWrapperClass(undefined)", "'WebUndefined'");
+    shouldBe("objCWrapperClass(0)", "'NSCFNumber'");
+    shouldBe("objCWrapperClass(1)", "'NSCFNumber'");
+    shouldBe("objCWrapperClass(false)", "'NSCFBoolean'");
+    shouldBe("objCWrapperClass(true)", "'NSCFBoolean'");
+    shouldBe("objCWrapperClass('')", "'NSCFString'");
+    shouldBe("objCWrapperClass({ })", "'WebScriptObject'");
+    shouldBe("objCWrapperClass([ ])", "'WebScriptObject'");
+
+    shouldBe("objCObjectOfClass('NSNull')", "null"); // can't test with typeof because typeof null is 'object'
+    shouldBe("typeof objCObjectOfClass('')", "'undefined'");
+    shouldBe("typeof objCObjectOfClass('WebUndefined')", "'undefined'");
+    shouldBe("typeof objCObjectOfClass('NSCFBoolean')", "'boolean'");
+    shouldBe("typeof objCObjectOfClass('NSCFNumber')", "'number'");
+    shouldBe("typeof objCObjectOfClass('NSCFString')", "'string'");
+    shouldBe("typeof objCObjectOfClass('WebScriptObject')", "'object'");
+    shouldBeTrue("objCObjectOfClass('NSArray') instanceof Array");
+
+    // Not yet tested:
+
+    // CSSCharsetRule
+    // CSSFontFaceRule
+    // CSSImportRule
+    // CSSMediaRule
+    // CSSPageRule
+    // CSSRule
+    // CSSValue
+    // SVGColor
+    // SVGPaint
+    // SVGZoomEvent
+
+    // the various window sub-objects
+
+    // what else is missing?
+
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}
+
+function frameLoaded()
+{
+    runTest();
+}
+
+</script>
+</body>
+</html>
index 69a2cfa..2fc3942 100644 (file)
@@ -209,9 +209,6 @@ svg/custom/use-events-crash.svg
 # Pixel depth and color depth different on boomer <rdar://problem/5137719>
 fast/dom/Window/window-screen-properties.html
 
-# Layout Tests fail in boomer because of not objCWrapperClass. <rdar://problem/5137769>
-fast/dom/wrapper-classes.html
-
 # This test uses Mac-specific key codes <rdar://problem/5076426>
 fast/events/arrow-navigation.html