+ }
+
+ function reset() {
+ document.getElementById('main').innerHTML = fixture;
+ }
+
+ /**
+ * Asserts true.
+ * @example ok( $("a").size() > 5, "There must be at least 5 anchors" );
+ */
+ function ok(a, msg) {
+ Test.push( [ !!a, msg ] );
+ }
+
+ /**
+ * Asserts that two arrays are the same
+ */
+ function isSet(a, b, msg) {
+ var ret = true;
+ if ( a && b && a.length == b.length ) {
+ for ( var i in a )
+ if ( a[i] != b[i] )
+ ret = false;
+ } else
+ ret = false;
+ if ( !ret && console )
+ console.log( msg, a, b );
+ Test.push( [ ret, msg ] );
+ }
+
+ /**
+ * Returns an array of elements with the given IDs, eg.
+ * @example q("main", "foo", "bar")
+ * @result [<div id="main">, <span id="foo">, <input id="bar">]
+ */
+ function q() {
+ var r = [];
+ for ( var i = 0; i < arguments.length; i++ )
+ r.push( document.getElementById( arguments[i] ) );
+ return r;
+ }
+
+ /**
+ * Asserts that a select matches the given IDs
+ * @example t("Check for something", "//[a]", ["foo", "baar"]);
+ * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar'
+ */
+ function t(a,b,c) {
+ var f = jQuery.find(b);
+ var s = "";
+ for ( var i = 0; i < f.length; i++ )
+ s += (s && ",") + '"' + f[i].id + '"';
+ isSet(f, q.apply(q,c), a + " (" + b + ")");
+ }