Index: build/runtest/env.js
===================================================================
--- build/runtest/env.js	(revision 6251)
+++ build/runtest/env.js	(working copy)
@@ -41,6 +41,9 @@
 			get href(){
 				return curLocation.toString();
 			},
+			
+			search: "", // the path after `?'
+			
 			toString: function(){
 				return this.href;
 			}
@@ -143,6 +146,18 @@
 	};
 	
 	DOMDocument.prototype = {
+	    
+	    createComment: function(text){
+			return makeNode( this._dom.createComment(text) );
+	    },
+	    
+	    createDocumentFragment: function(text){
+	        // https://developer.mozilla.org/en/DOM/document.createDocumentFragment
+	        // https://developer.mozilla.org/En/DOM/DocumentFragment
+	        // eh ... ?
+	        return this._dom;
+	    },
+	    
 		createTextNode: function(text){
 			return makeNode( this._dom.createTextNode(
 				text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")) );
Index: build/runtest/testrunner.js
===================================================================
--- build/runtest/testrunner.js	(revision 6251)
+++ build/runtest/testrunner.js	(working copy)
@@ -141,6 +141,17 @@
 	log( result, result ? message + ": " + expected : message + " expected: " + expected + " actual: " + actual );
 }
 
+
+function same(a, b, message) {
+    // well, this isn't quite the same as test/qunit/testrunner.js
+    // but seems to work ok
+    var result = a === b;
+	message = message || (result ? "okay" : "failed");
+	log( result, result ? message + ": " + a : message + " expected: " + a + " actual: " + b );
+	// was this:
+    // push(equiv(a, b), a, b, message);
+}
+
 var numTests = 0, total = 0, pass = 0, fail = 0;
 
 function log(state, msg){
