Bug 782651 - Get importTestsuite.py working again; r=jhammel
authorMs2ger <ms2ger@gmail.com>
Thu, 06 Sep 2012 09:14:48 +0200
changeset 104369 eaddbfdee40b9820b2069430347fad4c3ccdceb1
parent 104368 0c4fa25f637ba230081d9fca316acc063187e6b2
child 104370 4e6c53859f89e3fe2daafa6a3e62f94df70874f7
push id23421
push userMs2ger@gmail.com
push dateThu, 06 Sep 2012 08:20:50 +0000
treeherdermozilla-central@47126ccdb660 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjhammel
bugs782651
milestone18.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 782651 - Get importTestsuite.py working again; r=jhammel
dom/imptests/editing/Makefile.in
dom/imptests/editing/conformancetest/Makefile.in
dom/imptests/editing/css/Makefile.in
dom/imptests/editing/selecttest/Makefile.in
dom/imptests/failures/webapps/DOMCore/tests/approved/test_interfaces.html.json
dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html.json
dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-contains.xml.json
dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html.json
dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode-binding.html.json
dom/imptests/html/tests/submission/Mozilla/Makefile.in
dom/imptests/html/tests/submission/Opera/microdata/Makefile.in
dom/imptests/importTestsuite.py
dom/imptests/parseFailures.py
dom/imptests/webapps/DOMCore/tests/approved/Makefile.in
dom/imptests/webapps/DOMCore/tests/approved/test_interfaces.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/constants.js
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constants.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constructors.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-contains.xml
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode-binding.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode.html
dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_attributes.html
dom/imptests/webapps/DOMCore/tests/submissions/Opera/Makefile.in
dom/imptests/webapps/WebStorage/tests/submissions/Infraware/Makefile.in
dom/imptests/webapps/WebStorage/tests/submissions/Infraware/iframe/Makefile.in
dom/imptests/webapps/WebStorage/tests/submissions/Makefile.in
dom/imptests/webapps/WebStorage/tests/submissions/Ms2ger/Makefile.in
dom/imptests/webapps/XMLHttpRequest/tests/submissions/Ms2ger/Makefile.in
dom/imptests/writeMakefile.py
--- a/dom/imptests/editing/Makefile.in
+++ b/dom/imptests/editing/Makefile.in
@@ -1,25 +1,23 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   css \
   conformancetest \
   selecttest \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   implementation.js \
   tests.js \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/editing/conformancetest/Makefile.in
+++ b/dom/imptests/editing/conformancetest/Makefile.in
@@ -1,23 +1,21 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_runtest.html \
   test_event.html \
   data.js \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/editing/css/Makefile.in
+++ b/dom/imptests/editing/css/Makefile.in
@@ -1,21 +1,19 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   reset.css \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/editing/selecttest/Makefile.in
+++ b/dom/imptests/editing/selecttest/Makefile.in
@@ -1,34 +1,32 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_addRange.html \
   test_collapse.html \
   test_collapseToStartEnd.html \
   test_deleteFromDocument.html \
   test_Document-open.html \
   test_extend.html \
   test_getRangeAt.html \
   test_getSelection.html \
   test_interfaces.html \
   test_isCollapsed.html \
   test_removeAllRanges.html \
   test_selectAllChildren.html \
   common.js \
   test-iframe.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/failures/webapps/DOMCore/tests/approved/test_interfaces.html.json
+++ b/dom/imptests/failures/webapps/DOMCore/tests/approved/test_interfaces.html.json
@@ -247,44 +247,44 @@
   "Element interface: attribute attributes": true,
   "Element interface: attribute children": true,
   "Element interface: attribute firstElementChild": true,
   "Element interface: attribute lastElementChild": true,
   "Element interface: attribute previousElementSibling": true,
   "Element interface: attribute nextElementSibling": true,
   "Element interface: attribute childElementCount": true,
   "Element interface: operation remove()": true,
-  "Stringification of xmlDoc.createElementNS(null, \"test\")": "debug",
-  "Element interface: xmlDoc.createElementNS(null, \"test\") must inherit property \"id\" with the proper type (4)": true,
-  "Element interface: xmlDoc.createElementNS(null, \"test\") must inherit property \"className\" with the proper type (5)": true,
-  "Element interface: calling getAttribute(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling getAttributeNS(DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling setAttribute(DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling setAttributeNS(DOMString,DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling removeAttribute(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling removeAttributeNS(DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling hasAttribute(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling hasAttributeNS(DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling getElementsByTagName(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling getElementsByTagNameNS(DOMString,DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: calling getElementsByClassName(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Element interface: xmlDoc.createElementNS(null, \"test\") must inherit property \"remove\" with the proper type (25)": true,
-  "Node interface: calling compareDocumentPosition(Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling contains(Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling insertBefore(Node,Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling appendChild(Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling replaceChild(Node,Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling removeChild(Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling isEqualNode(Node) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling lookupPrefix(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "Node interface: calling isDefaultNamespace(DOMString) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
-  "EventTarget interface: calling dispatchEvent(Event) on xmlDoc.createElementNS(null, \"test\") with too few arguments must throw TypeError": true,
+  "Stringification of element": "debug",
+  "Element interface: element must inherit property \"id\" with the proper type (4)": true,
+  "Element interface: element must inherit property \"className\" with the proper type (5)": true,
+  "Element interface: calling getAttribute(DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling getAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling setAttribute(DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling setAttributeNS(DOMString,DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling removeAttribute(DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling removeAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling hasAttribute(DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling hasAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling getElementsByTagName(DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling getElementsByTagNameNS(DOMString,DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: calling getElementsByClassName(DOMString) on element with too few arguments must throw TypeError": true,
+  "Element interface: element must inherit property \"remove\" with the proper type (25)": true,
+  "Node interface: calling compareDocumentPosition(Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling contains(Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling insertBefore(Node,Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling appendChild(Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling replaceChild(Node,Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling removeChild(Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling isEqualNode(Node) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling lookupPrefix(DOMString) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling lookupNamespaceURI(DOMString) on element with too few arguments must throw TypeError": true,
+  "Node interface: calling isDefaultNamespace(DOMString) on element with too few arguments must throw TypeError": true,
+  "EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on element with too few arguments must throw TypeError": true,
+  "EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on element with too few arguments must throw TypeError": true,
+  "EventTarget interface: calling dispatchEvent(Event) on element with too few arguments must throw TypeError": true,
   "Attr interface: existence and properties of interface object": true,
   "Attr interface: existence and properties of interface prototype object": true,
   "Attr interface: existence and properties of interface prototype object's \"constructor\" property": true,
   "Attr interface: attribute value": true,
   "Attr interface: attribute namespaceURI": true,
   "Attr interface: attribute prefix": true,
   "Attr interface: attribute localName": true,
   "Stringification of document.querySelector(\"[id]\").attributes[0]": "debug",
--- a/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
+++ b/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
@@ -1,43 +1,42 @@
 # THIS FILE IS AUTOGENERATED BY parseFailures.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_DOMImplementation-createDocument.html.json \
   test_Document-createElementNS.html.json \
   test_Document-getElementsByTagName.html.json \
   test_Element-children.html.json \
   test_Event-constructors.html.json \
   test_Event-defaultPrevented.html.json \
   test_EventTarget-dispatchEvent.html.json \
   test_Node-appendChild.html.json \
   test_Node-constants.html.json \
+  test_Node-contains.xml.json \
   test_Node-insertBefore.html.json \
   test_Node-isEqualNode.xhtml.json \
   test_Node-removeChild.html.json \
   test_Node-replaceChild.html.json \
   test_NodeFilter-constants.html.json \
   test_Range-attributes.html.json \
   test_Range-commonAncestorContainer.html.json \
   test_Range-comparePoint.html.json \
   test_Range-detach.html.json \
-  test_Range-intersectsNode.html.json \
+  test_Range-intersectsNode-binding.html.json \
   test_attributes.html.json \
   test_case.html.json \
   test_historical.html.json \
   test_interfaces.html.json \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html.json
+++ b/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html.json
@@ -1,4 +1,4 @@
 {
-  "Constants for createDocumentPosition on [object DOM Constructor.prototype].": true,
-  "Constants for nodeType on [object DOM Constructor.prototype].": true
+  "Constants for createDocumentPosition on Node prototype object.": true,
+  "Constants for nodeType on Node prototype object.": true
 }
new file mode 100644
--- /dev/null
+++ b/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-contains.xml.json
@@ -0,0 +1,3 @@
+{
+  "Should throw TypeError if the arguments are wrong.": true
+}
--- a/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html.json
+++ b/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html.json
@@ -1,4 +1,4 @@
 {
-  "Constants for acceptNode on undefined.": true,
-  "Constants for whatToShow on undefined.": true
+  "Constants for acceptNode on NodeFilter prototype object.": true,
+  "Constants for whatToShow on NodeFilter prototype object.": true
 }
new file mode 100644
--- /dev/null
+++ b/dom/imptests/failures/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode-binding.html.json
@@ -0,0 +1,3 @@
+{
+  "Calling intersectsNode without an argument or with an invalid argument should throw a TypeError.": true
+}
--- a/dom/imptests/html/tests/submission/Mozilla/Makefile.in
+++ b/dom/imptests/html/tests/submission/Mozilla/Makefile.in
@@ -1,28 +1,26 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_body-onload.html \
   test_pageload-image.html \
   test_pageload-video.html \
   test_script-for-onload.html \
   test_window-onerror-parse-error.html \
   test_window-onerror-runtime-error.html \
   test_window-onerror-runtime-error-throw.html \
   nested-document-write-external.js \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/html/tests/submission/Opera/microdata/Makefile.in
+++ b/dom/imptests/html/tests/submission/Opera/microdata/Makefile.in
@@ -1,21 +1,19 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_001.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/importTestsuite.py
+++ b/dom/imptests/importTestsuite.py
@@ -100,21 +100,20 @@ def printMakefiles(thissrcdir, dest, dir
       path = "%s/%s" % (dest, d)
     else:
       # Empty directory, i.e., the repository root
       path = dest
     print "Creating Makefile.in in %s..." % (path, )
 
     subdirs, mochitests, supportfiles = parseManifestFile(dest, d)
 
-    abspath = "%s/%s" % (thissrcdir, path)
     files = ["test_%s" % (mochitest, ) for mochitest in mochitests]
     files.extend(supportfiles)
 
-    result = writeMakefile.substMakefile("importTestsuite.py", abspath, subdirs, files)
+    result = writeMakefile.substMakefile("importTestsuite.py", subdirs, files)
 
     fp = open(path + "/Makefile.in", "wb")
     fp.write(result)
     fp.close()
 
 def hgadd(dest, directories):
   """Inform hg of the files in |directories|."""
   print "hg addremoving..."
--- a/dom/imptests/parseFailures.py
+++ b/dom/imptests/parseFailures.py
@@ -43,17 +43,17 @@ def dumpFailures(lines):
 
 def writeMakefiles(files):
     pathmap = {}
     for path in files:
         dirp, leaf = path.rsplit('/', 1)
         pathmap.setdefault(dirp, []).append(leaf)
 
     for k, v in pathmap.iteritems():
-        result = writeMakefile.substMakefile('parseFailures.py', 'dom/imptests/' + k, [], v)
+        result = writeMakefile.substMakefile('parseFailures.py', [], v)
 
         fp = open(k + '/Makefile.in', 'wb')
         fp.write(result)
         fp.close()
 
 def main(logPath):
     fp = open(logPath, 'rb')
     lines = extractLines(fp)
--- a/dom/imptests/webapps/DOMCore/tests/approved/Makefile.in
+++ b/dom/imptests/webapps/DOMCore/tests/approved/Makefile.in
@@ -1,24 +1,23 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_interfaces.html \
   test_Range-cloneContents.html \
   test_Range-cloneRange.html \
   test_Range-collapse.html \
   test_Range-commonAncestorContainer.html \
   test_Range-compareBoundaryPoints.html \
   test_Range-comparePoint.html \
   test_Range-deleteContents.html \
@@ -29,10 +28,9 @@ include $(topsrcdir)/config/rules.mk
   test_Range-mutations.html \
   test_Range-selectNode.html \
   test_Range-set.html \
   test_Range-surroundContents.html \
   common.js \
   Range-test-iframe.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/DOMCore/tests/approved/test_interfaces.html
+++ b/dom/imptests/webapps/DOMCore/tests/approved/test_interfaces.html
@@ -484,28 +484,30 @@ interface DOMSettableTokenList : DOMToke
 </script>
 <script>
 "use strict";
 var xmlDoc = document.implementation.createDocument(null, "", null);
 var domException;
 try { document.appendChild(document); } catch(e) { domException = e; }
 var detachedRange = document.createRange();
 detachedRange.detach();
+var element = xmlDoc.createElementNS(null, "test");
+element.setAttribute("bar", "baz");
 
 var idlArray = new IdlArray();
 idlArray.add_idls(document.querySelector("script[type=text\\/plain]").textContent);
 idlArray.add_objects({
 	DOMException: ['domException'],
 	Event: ['document.createEvent("Event")', 'new Event("foo")'],
 	CustomEvent: ['new CustomEvent("foo")'],
 	XMLDocument: ['xmlDoc'],
 	DOMImplementation: ['document.implementation'],
 	DocumentFragment: ['document.createDocumentFragment()'],
 	DocumentType: ['document.doctype'],
-	Element: ['xmlDoc.createElementNS(null, "test")'],
+	Element: ['element'],
 	Attr: ['document.querySelector("[id]").attributes[0]'],
 	Text: ['document.createTextNode("abc")'],
 	ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
 	Comment: ['document.createComment("abc")'],
 	Range: ['document.createRange()', 'detachedRange'],
 	NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
 	TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
 	NodeList: ['document.querySelectorAll("script")'],
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/Makefile.in
@@ -1,24 +1,23 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_attributes.html \
   test_case.html \
   test_CharacterData-appendData.html \
   test_CharacterData-deleteData.html \
   test_CharacterData-insertData.html \
   test_CharacterData-replaceData.html \
   test_Document-adoptNode.html \
   test_Document-createComment.html \
@@ -82,34 +81,34 @@ include $(topsrcdir)/config/rules.mk
   test_Event-defaultPrevented.html \
   test_Event-initEvent.html \
   test_EventTarget-dispatchEvent.html \
   test_historical.html \
   test_interfaces.html \
   test_Node-appendChild.html \
   test_Node-cloneNode.html \
   test_Node-constants.html \
+  test_Node-contains.xml \
   test_Node-insertBefore.html \
   test_Node-isEqualNode.xhtml \
   test_Node-lookupPrefix.xhtml \
   test_Node-nodeName.html \
   test_Node-nodeName.xhtml \
   test_Node-normalize.html \
   test_Node-parentElement.html \
   test_Node-parentNode.html \
   test_Node-removeChild.html \
   test_Node-replaceChild.html \
   test_NodeFilter-constants.html \
   test_Range-attributes.html \
   test_Range-commonAncestorContainer.html \
   test_Range-comparePoint.html \
   test_Range-detach.html \
-  test_Range-intersectsNode.html \
+  test_Range-intersectsNode-binding.html \
   attributes.js \
   case.js \
   creators.js \
   constants.js \
   Document-createProcessingInstruction.js \
   productions.js \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/constants.js
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/constants.js
@@ -1,10 +1,11 @@
 function testConstants(objects, constants, msg) {
-  objects.forEach(function(o) {
+  objects.forEach(function(arr) {
+    var o = arr[0], desc = arr[1];
     test(function() {
       constants.forEach(function(d) {
         assert_true(d[0] in o, "Object " + o + " doesn't have " + d[0])
         assert_equals(o[d[0]], d[1], "Object " + o + " value for " + d[0] + " is wrong")
       })
-    }, "Constants for " + msg + " on " + o + ".")
+    }, "Constants for " + msg + " on " + desc + ".")
   })
 }
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constants.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constants.html
@@ -1,20 +1,20 @@
 <!doctype html>
 <title>Event constants</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="constants.js"></script>
 <div id="log"></div>
 <script>
 var objects = [
-  Event,
-  Event.prototype,
-  document.createEvent("Event"),
-  document.createEvent("CustomEvent")
+  [Event, "Event interface object"],
+  [Event.prototype, "Event prototype object"],
+  [document.createEvent("Event"), "Event object"],
+  [document.createEvent("CustomEvent"), "CustomEvent object"]
 ]
 testConstants(objects, [
   ["NONE", 0],
   ["CAPTURING_PHASE", 1],
   ["AT_TARGET", 2],
   ["BUBBLING_PHASE", 3]
 ], "eventPhase")
 </script>
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constructors.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Event-constructors.html
@@ -1,20 +1,57 @@
 <!doctype html>
 <title>Event constructors</title>
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <div id=log></div>
 <script>
 test(function() {
+  assert_throws(new TypeError(), function() {
+    new Event()
+  })
+})
+test(function() {
+  var test_error = { name: "test" }
+  assert_throws(test_error, function() {
+    new Event({ toString: function() { throw test_error; } })
+  })
+})
+test(function() {
+  var ev = new Event("")
+  assert_equals(ev.type, "")
+  assert_equals(ev.target, null)
+  assert_equals(ev.currentTarget, null)
+  assert_equals(ev.eventPhase, Event.NONE)
+  assert_equals(ev.bubbles, false)
+  assert_equals(ev.cancelable, false)
+  assert_equals(ev.defaultPrevented, false)
+  assert_equals(ev.isTrusted, false)
+  assert_true(ev.timeStamp > 0)
+  assert_true("initEvent" in ev)
+})
+test(function() {
   var ev = new Event("test")
   assert_equals(ev.type, "test")
   assert_equals(ev.target, null)
   assert_equals(ev.currentTarget, null)
-  assert_equals(ev.eventPhase, Event.AT_TARGET)
+  assert_equals(ev.eventPhase, Event.NONE)
+  assert_equals(ev.bubbles, false)
+  assert_equals(ev.cancelable, false)
+  assert_equals(ev.defaultPrevented, false)
+  assert_equals(ev.isTrusted, false)
+  assert_true(ev.timeStamp > 0)
+  assert_true("initEvent" in ev)
+})
+test(function() {
+  var ev = Event("test")
+  assert_equals(ev.type, "test")
+  assert_equals(ev.target, null)
+  assert_equals(ev.currentTarget, null)
+  assert_equals(ev.eventPhase, Event.NONE)
   assert_equals(ev.bubbles, false)
   assert_equals(ev.cancelable, false)
   assert_equals(ev.defaultPrevented, false)
   assert_equals(ev.isTrusted, false)
   assert_true(ev.timeStamp > 0)
   assert_true("initEvent" in ev)
 })
 test(function() {
@@ -25,16 +62,22 @@ test(function() {
 })
 test(function() {
   var ev = new Event("@", { bubblesIGNORED: true, cancelable: true})
   assert_equals(ev.type, "@")
   assert_equals(ev.bubbles, false)
   assert_equals(ev.cancelable, true)
 })
 test(function() {
+  var ev = new Event("@", { "bubbles\0IGNORED": true, cancelable: true})
+  assert_equals(ev.type, "@")
+  assert_equals(ev.bubbles, false)
+  assert_equals(ev.cancelable, true)
+})
+test(function() {
   var ev = new Event("Xx", { cancelable: true})
   assert_equals(ev.type, "Xx")
   assert_equals(ev.bubbles, false)
   assert_equals(ev.cancelable, true)
 })
 test(function() {
   var ev = new Event("Xx", {})
   assert_equals(ev.type, "Xx")
@@ -44,16 +87,38 @@ test(function() {
 test(function() {
   var ev = new Event("Xx", {bubbles: true, cancelable: false, sweet: "x"})
   assert_equals(ev.type, "Xx")
   assert_equals(ev.bubbles, true)
   assert_equals(ev.cancelable, false)
   assert_equals(ev.sweet, undefined)
 })
 test(function() {
+  var called = []
+  var ev = new Event("Xx", {
+    get cancelable() {
+      called.push("cancelable")
+      return false
+    },
+    get bubbles() {
+      called.push("bubbles")
+      return true;
+    },
+    get sweet() {
+      called.push("sweet")
+      return "x"
+    }
+  })
+  assert_array_equals(called, ["bubbles", "cancelable"])
+  assert_equals(ev.type, "Xx")
+  assert_equals(ev.bubbles, true)
+  assert_equals(ev.cancelable, false)
+  assert_equals(ev.sweet, undefined)
+})
+test(function() {
   var ev = new CustomEvent("$", {detail: 54, sweet: "x", sweet2: "x", cancelable:true})
   assert_equals(ev.type, "$")
   assert_equals(ev.bubbles, false)
   assert_equals(ev.cancelable, true)
   assert_equals(ev.sweet, undefined)
   assert_equals(ev.detail, 54)
 })
 </script>
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-constants.html
@@ -1,20 +1,20 @@
 <!doctype html>
 <title>Node constants</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="constants.js"></script>
 <div id="log"></div>
 <script>
 var objects = [
-  Node,
-  Node.prototype,
-  document.createElement("foo"),
-  document.createTextNode("bar")
+  [Node, "Node interface object"],
+  [Node.prototype, "Node prototype object"],
+  [document.createElement("foo"), "Element object"],
+  [document.createTextNode("bar"), "Text object"]
 ]
 testConstants(objects, [
   ["ELEMENT_NODE", 1],
   ["ATTRIBUTE_NODE", 2],
   ["TEXT_NODE", 3],
   ["CDATA_SECTION_NODE", 4],
   ["ENTITY_REFERENCE_NODE", 5],
   ["ENTITY_NODE", 6],
new file mode 100644
--- /dev/null
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Node-contains.xml
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Node.nodeName</title>
+<link rel="author" title="Olli Pettay" href="mailto:Olli@Pettay.fi"/>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<div id="test">
+  <input type="button" id="testbutton"/>
+  <a id="link">Link text</a>
+</div>
+<script>
+<![CDATA[
+test(function() {
+  assert_throws(new TypeError(), function() {
+    document.contains();
+  });
+  assert_throws(new TypeError(), function() {
+    document.contains(9);
+  });
+}, "Should throw TypeError if the arguments are wrong.");
+
+test(function() {
+  assert_equals(document.contains(null), false, "Document shouldn't contain null.");
+}, "contains(null) should be false");
+
+test(function() {
+  assert_equals(document.contains(document), true, "Document should contain itself!");
+  assert_equals(document.contains(document.createElement("foo")), false, "Document shouldn't contain element which is't in the document");
+  assert_equals(document.contains(document.createTextNode("foo")), false, "Document shouldn't contain text node which is't in the document");
+}, "document.contains");
+
+test(function() {
+  var tb = document.getElementById("testbutton");
+  assert_equals(tb.contains(tb), true, "Element should contain itself.")
+  assert_equals(document.contains(tb), true, "Document should contain element in it!");
+  assert_equals(document.documentElement.contains(tb), true, "Element should contain element in it!");
+}, "contains with a button");
+
+test(function() {
+  var link = document.getElementById("link");
+  var text = link.firstChild;
+  assert_equals(document.contains(text), true, "Document should contain a text node in it.");
+  assert_equals(link.contains(text), true, "Element should contain a text node in it.");
+  assert_equals(text.contains(text), true, "Text node should contain itself.");
+  assert_equals(text.contains(link), false, "text node shouldn't contain its parent.");
+}, "contains with a text node");
+
+test(function() {
+  var pi = document.createProcessingInstruction("adf", "asd");
+  assert_equals(pi.contains(document), false, "Processing instruction shouldn't contain document");
+  assert_equals(document.contains(pi), false, "Document shouldn't contain newly created processing instruction");
+  document.documentElement.appendChild(pi);
+  document.contains(pi, true, "Document should contain processing instruction");
+}, "contains with a processing instruction");
+
+test(function() {
+  if ("createContextualFragment" in document.createRange()) {
+    var df = document.createRange().createContextualFragment("<div>foo</div>");
+    assert_equals(df.contains(df.firstChild), true, "Document fragment should contain its child");
+    assert_equals(df.contains(df.firstChild.firstChild), true,
+       "Document fragment should contain its descendant");
+    assert_equals(df.contains(df), true, "Document fragment should contain itself.");
+  }
+}, "contains with a document fragment");
+
+test(function() {
+  var d = document.implementation.createHTMLDocument("");
+  assert_equals(document.contains(d), false,
+     "Document shouldn't contain another document.");
+  assert_equals(document.contains(d.createElement("div")), false,
+     "Document shouldn't contain an element from another document.");
+  assert_equals(document.contains(d.documentElement), false,
+     "Document shouldn't contain an element from another document.");
+}, "contaibs with another document");
+]]>
+</script>
+</body>
+</html>
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_NodeFilter-constants.html
@@ -1,18 +1,18 @@
 <!doctype html>
 <title>NodeFilter constants</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="constants.js"></script>
 <div id="log"></div>
 <script>
 var objects = [
-  NodeFilter,
-  NodeFilter.prototype
+  [NodeFilter, "NodeFilter interface object"],
+  [NodeFilter.prototype, "NodeFilter prototype object"]
 ]
 testConstants(objects, [
   ["FILTER_ACCEPT", 1],
   ["FILTER_REJECT", 2],
   ["FILTER_SKIP", 3]
 ], "acceptNode")
 testConstants(objects, [
   ["SHOW_ALL", 0xFFFFFFFF],
rename from dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode.html
rename to dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode-binding.html
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_Range-intersectsNode-binding.html
@@ -2,28 +2,23 @@
 <title>Range.intersectsNode</title>
 <link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <div id=log></div>
 <script>
 test(function() {
   var r = document.createRange();
-  assert_throws(new TypeError(), function() { r.intersectsNode(null); });
-  r.detach();
+  assert_throws(new TypeError(), function() { r.intersectsNode(); });
   assert_throws(new TypeError(), function() { r.intersectsNode(null); });
-  assert_throws("INVALID_STATE_ERR", function() { r.intersectsNode(document); });
-})
-test(function() { // Step 2
-  var r = document.createRange();
-  assert_throws("INVALID_NODE_TYPE_ERR",
-                function() { r.intersectsNode(document); });
-  if (document.createAttribute) {
-    assert_throws("INVALID_NODE_TYPE_ERR",
-                  function() { r.intersectsNode(document.createAttribute("foo")); });
-  }
-})
-test(function() { // Step 3
-  var r = document.createRange();
-  assert_throws("NOT_FOUND_ERR",
-                function() { r.intersectsNode(document.createElement("div")); });
-})
+  assert_throws(new TypeError(), function() { r.intersectsNode(undefined); });
+  assert_throws(new TypeError(), function() { r.intersectsNode(42); });
+  assert_throws(new TypeError(), function() { r.intersectsNode("foo"); });
+  assert_throws(new TypeError(), function() { r.intersectsNode({}); });
+  r.detach();
+  assert_throws(new TypeError(), function() { r.intersectsNode(); });
+  assert_throws(new TypeError(), function() { r.intersectsNode(null); });
+  assert_throws(new TypeError(), function() { r.intersectsNode(undefined); });
+  assert_throws(new TypeError(), function() { r.intersectsNode(42); });
+  assert_throws(new TypeError(), function() { r.intersectsNode("foo"); });
+  assert_throws(new TypeError(), function() { r.intersectsNode({}); });
+}, "Calling intersectsNode without an argument or with an invalid argument should throw a TypeError.")
 </script>
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_attributes.html
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Ms2ger/test_attributes.html
@@ -26,33 +26,33 @@ test(function() {
 // setAttribute exhaustive tests
 // Step 1
 test(function() {
   var el = document.createElement("foo")
   for (var i = 0; i < invalid_names.length; i++) {
     assert_throws("INVALID_CHARACTER_ERR", function() { el.setAttribute(invalid_names[i], "test") })
   }
 }, "When qualifiedName does not match the Name production, an " +
-   "INVALID_CHARACTER_ERR exception is to be thrown.")
+   "INVALID_CHARACTER_ERR exception is to be thrown. (setAttribute)")
 
 // Step 2
 test(function() {
   var el = document.createElement("div")
   el.setAttribute("ALIGN", "left")
   assert_equals(el.getAttributeNS("", "ALIGN"), null)
   assert_equals(el.getAttributeNS("", "align"), "left")
   assert_equals(el.getAttribute("align"), "left")
-}, "setAttribute should lowercase its name argument")
+}, "setAttribute should lowercase its name argument (upper case attribute)")
 test(function() {
   var el = document.createElement("div")
   el.setAttribute("CHEEseCaKe", "tasty")
   assert_equals(el.getAttributeNS("", "CHEEseCaKe"), null)
   assert_equals(el.getAttributeNS("", "cheesecake"), "tasty")
   assert_equals(el.getAttribute("cheesecake"), "tasty")
-}, "setAttribute should lowercase its name argument")
+}, "setAttribute should lowercase its name argument (mixed case attribute)")
 
 // Step 3
 test(function() {
   var el = document.createElement("foo")
   var tests = ["xmlns", "xmlns:a", "xmlnsx", "xmlns0"]
   for (var i = 0; i < tests.length; i++) {
     assert_throws("NAMESPACE_ERR",
                   function() { el.setAttribute(tests[i], "fail") },
@@ -103,17 +103,17 @@ test(function() {
 // Step 1
 test(function() {
   var el = document.createElement("foo")
   for (var i = 0, il = invalid_names.length; i < il; ++i) {
     assert_throws("INVALID_CHARACTER_ERR",
                   function() { el.setAttributeNS("a", invalid_names[i], "fail") })
   }
 }, "When qualifiedName does not match the Name production, an " +
-   "INVALID_CHARACTER_ERR exception is to be thrown.")
+   "INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)")
 
 // Step 2
 test(function() {
   var el = document.createElement("foo")
   for (var i = 0, il = invalid_qnames.length; i < il; ++i) {
     assert_throws("NAMESPACE_ERR",
                   function() { el.setAttributeNS("a", invalid_qnames[i], "fail") },
                   "Expected exception for " + invalid_qnames[i] + ".")
@@ -279,17 +279,17 @@ test(function() {
   assert_equals(el.hasAttributeNS("", "align"), false)
   assert_equals(el.getAttribute("ALIGN"), null)
   assert_equals(el.getAttribute("align"), null)
   assert_equals(el.getAttributeNS(null, "ALIGN"), "left")
   assert_equals(el.getAttributeNS("", "ALIGN"), "left")
   assert_equals(el.getAttributeNS(null, "align"), null)
   assert_equals(el.getAttributeNS("", "align"), null)
   el.removeAttributeNS("", "ALIGN")
-}, "Only lowercase attributes are returned on HTML elements")
+}, "Only lowercase attributes are returned on HTML elements (upper case attribute)")
 test(function() {
   var el = document.createElement("div")
   el.setAttributeNS("", "CHEEseCaKe", "tasty")
   assert_equals(el.hasAttribute("CHEESECAKE"), false)
   assert_equals(el.hasAttribute("CHEEseCaKe"), false)
   assert_equals(el.hasAttribute("cheesecake"), false)
   assert_equals(el.hasAttributeNS("", "CHEESECAKE"), false)
   assert_equals(el.hasAttributeNS("", "CHEEseCaKe"), true)
@@ -302,17 +302,17 @@ test(function() {
   assert_equals(el.getAttribute("cheesecake"), null)
   assert_equals(el.getAttributeNS(null, "CHEESECAKE"), null)
   assert_equals(el.getAttributeNS("", "CHEESECAKE"), null)
   assert_equals(el.getAttributeNS(null, "CHEEseCaKe"), "tasty")
   assert_equals(el.getAttributeNS("", "CHEEseCaKe"), "tasty")
   assert_equals(el.getAttributeNS(null, "cheesecake"), null)
   assert_equals(el.getAttributeNS("", "cheesecake"), null)
   el.removeAttributeNS("", "CHEEseCaKe")
-}, "Only lowercase attributes are returned on HTML elements")
+}, "Only lowercase attributes are returned on HTML elements (mixed case attribute)")
 test(function() {
   var el = document.createElement("div")
   document.body.appendChild(el)
   el.setAttributeNS("", "align", "left")
   el.setAttributeNS("xx", "align", "right")
   el.setAttributeNS("", "foo", "left")
   el.setAttributeNS("xx", "foo", "right")
   assert_equals(el.hasAttribute("align"), true)
--- a/dom/imptests/webapps/DOMCore/tests/submissions/Opera/Makefile.in
+++ b/dom/imptests/webapps/DOMCore/tests/submissions/Opera/Makefile.in
@@ -1,24 +1,23 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_getElementsByClassName-01.htm \
   test_getElementsByClassName-02.htm \
   test_getElementsByClassName-03.htm \
   test_getElementsByClassName-04.htm \
   test_getElementsByClassName-05.htm \
   test_getElementsByClassName-06.htm \
   test_getElementsByClassName-07.htm \
   test_getElementsByClassName-08.htm \
@@ -29,10 +28,9 @@ include $(topsrcdir)/config/rules.mk
   test_getElementsByClassName-13.htm \
   test_getElementsByClassName-14.htm \
   test_getElementsByClassName-15.htm \
   test_getElementsByClassName-16.htm \
   test_getElementsByClassName-17.htm \
   test_getElementsByClassName-18.htm \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/WebStorage/tests/submissions/Infraware/Makefile.in
+++ b/dom/imptests/webapps/WebStorage/tests/submissions/Infraware/Makefile.in
@@ -1,25 +1,24 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   iframe \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_event_constructor.html \
   test_event_local_key.html \
   test_event_local_newvalue.html \
   test_event_local_oldvalue.html \
   test_event_local_storagearea.html \
   test_event_local_storageeventinit.html \
   test_event_local_url.html \
   test_event_session_key.html \
@@ -38,10 +37,9 @@ include $(topsrcdir)/config/rules.mk
   test_storage_session_clear.html \
   test_storage_session_getitem.html \
   test_storage_session_key.html \
   test_storage_session_length.html \
   test_storage_session_removeitem.html \
   test_storage_session_setitem.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/WebStorage/tests/submissions/Infraware/iframe/Makefile.in
+++ b/dom/imptests/webapps/WebStorage/tests/submissions/Infraware/iframe/Makefile.in
@@ -1,27 +1,25 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   local_change_item_iframe.html \
   local_security_iframe.html \
   local_set_item_clear_iframe.html \
   local_set_item_iframe.html \
   session_change_item_iframe.html \
   session_set_item_clear_iframe.html \
   session_set_item_iframe.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/WebStorage/tests/submissions/Makefile.in
+++ b/dom/imptests/webapps/WebStorage/tests/submissions/Makefile.in
@@ -1,16 +1,19 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   Infraware \
   Ms2ger \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
+
+
 include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/WebStorage/tests/submissions/Ms2ger/Makefile.in
+++ b/dom/imptests/webapps/WebStorage/tests/submissions/Ms2ger/Makefile.in
@@ -1,24 +1,23 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_event_constructor_js.html \
   test_missing_arguments.html \
   test_storage_local_clear_js.html \
   test_storage_local_getitem_js.html \
   test_storage_local_index_js.html \
   test_storage_local_in_js.html \
   test_storage_local_length_js.html \
   test_storage_local_removeitem_js.html \
@@ -27,10 +26,9 @@ include $(topsrcdir)/config/rules.mk
   test_storage_session_getitem_js.html \
   test_storage_session_index_js.html \
   test_storage_session_in_js.html \
   test_storage_session_length_js.html \
   test_storage_session_removeitem_js.html \
   test_storage_session_setitem_js.html \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/webapps/XMLHttpRequest/tests/submissions/Ms2ger/Makefile.in
+++ b/dom/imptests/webapps/XMLHttpRequest/tests/submissions/Ms2ger/Makefile.in
@@ -1,22 +1,20 @@
 # THIS FILE IS AUTOGENERATED BY importTestsuite.py - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \
+include $(DEPTH)/config/autoconf.mk
+
+DIRS := \
   $(NULL)
 
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_FILES = \
+MOCHITEST_FILES := \
   test_interfaces.html \
   test_setrequestheader-invalid-arguments.htm \
   $(NULL)
 
-libs:: $(_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+include $(topsrcdir)/config/rules.mk
--- a/dom/imptests/writeMakefile.py
+++ b/dom/imptests/writeMakefile.py
@@ -1,45 +1,38 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
 import string
 
 makefileTemplate = """# THIS FILE IS AUTOGENERATED BY ${caller} - DO NOT EDIT
 
-DEPTH = @DEPTH@
+DEPTH := @DEPTH@
 
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
+topsrcdir := @top_srcdir@
+srcdir := @srcdir@
+VPATH := @srcdir@
+relativesrcdir := @relativesrcdir@
 
-DIRS = \\
+include $$(DEPTH)/config/autoconf.mk
+
 ${dirs}
 
-include $$(DEPTH)/config/autoconf.mk
-"""
-
-filesTemplate = """
-MOCHITEST_FILES := \\
 ${files}
 
 include $$(topsrcdir)/config/rules.mk
 """
 
 def makefileString(entries):
   if not len(entries):
     return "  $(NULL)"
   return "\n".join(["  %s \\" % (entry, ) for entry in entries]) + "\n  $(NULL)"
 
-def substMakefile(caller, path, subdirs, files):
-  result = string.Template(makefileTemplate).substitute({
-    "caller": caller,
-    "dirs": makefileString(subdirs)
-  })
+def assignList(variable, entries):
+  return "%s := \\\n%s" % (variable, makefileString(entries))
 
-  if files:
-    result += string.Template(filesTemplate).substitute({
-      "files": makefileString(files)
-    })
-
-  return result
+def substMakefile(caller, subdirs, files):
+  return string.Template(makefileTemplate).substitute({
+    "caller": caller,
+    "dirs": assignList("DIRS", subdirs),
+    "files": assignList("MOCHITEST_FILES", files) if files else ""
+  })