diff --git a/lib/Test/TAPBrowser.js b/lib/Test/TAPBrowser.js
index 9318a07..e79fee2 100644
--- a/lib/Test/TAPBrowser.js
+++ b/lib/Test/TAPBrowser.js
@@ -1,137 +1,103 @@
-Test.TAPBrowser = function (path, tests) {
- this.test_path = path;
+function load(path) {
+ var url = location.pathname + "#" + encodeURIComponent(path.replace(/^\.\//, ''))
+ Test.TAP.prototype.diag('loading: '+path+' (run in a single window)...');
+ var req = new XMLHttpRequest();
+ req.open("GET", path, false);
+ req.send(null);
+ if (req.readyState == 4) {
+ var testobj = eval(req.responseText);
+ return testobj;
+ }
+}
+
+function createScriptTag(library) {
+ var path = library.replace(/\./g, '/')+'.js';
+ var script = document.createElement("script");
+ script.src = lib+'/'+path;
+ return script;
+}
+
+function loadlib(library) {
+ document.body.appendChild(createScriptTag(library));
+}
+
+function loadTest(test) {
+ var path = testlib+'/'+test;
+ return load(path);
+}
+
+function loadComponents() {
+ for (c in toLoad) {
+ var comp = toLoad[c];
+ loadlib(comp);
+ }
+}
+
+function runtest(t) {
+ var outtxt = "";
+ var div = document.createElement("div");
- this.parseLocation()
+ var onclick = function () {
+ var c = div.className;
+ if (c.match(/big/)) {
+ c = c.replace(/big/, "small");
+ } else if (c.match(/small/)) {
+ c = c.replace(/small/, "big");
+ }
+ div.className = c;
+ };
+ div.addEventListener('click', onclick, true);
+
+ div.className = 'test small';
+ document.body.appendChild(div);
- if(this.params.test) {
- this.tests = [this.params.test];
+ var outfunc = function(text) {
+ if (text) {
+ outtxt += text;
+ if (text.match(/(not ok|Test Suite Crashed)/g) ) {
+ div.innerHTML = "
" + div.innerHTML + "\n" + text + "
"
+ } else {
+ div.innerHTML = "" + div.innerHTML + "\n" + text + "
"
+ }
+
+ }
+ }
+
+ // set globally for synchronous run
+ Test.TAP.prototype.out = outfunc;
+ var testobj = loadTest(t);
+ if (!testobj) {
+ alert ("Test Object: "+t+" did not load");
+ throw new ReferenceError("Test Object did now load");
+ }
+ // also set to instance for asynchronous output
+ testobj.out = outfunc
+
+ testobj.on_finished = function () {
+ if (outtxt.match(/(not ok|Test Suite Crashed)/g) ) {
+ div.className += ' failsuite';
+ div.className.replace(/small/, 'big');
+
+ }
+ results.push(div);
+ }
+
+ setTimeout(function () {
+ testobj.run_tests()
+ }, 0)
+}
+
+var test = loc.match(/.+[#?](.*)\??.*/);
+
+loadComponents();
+
+window.onload = function() {
+ var testlist = [];
+ if (test) {
+ runtest(test[1]);
} else {
- this.tests = tests
- }
-
- if(this.params.real_world) {
- var world = new Test.RealWorld()
- world[this.params.real_world]()
+ for (t in tests) {
+ runtest(tests[t]);
+ }
}
}
-
-Test.TAPBrowser.prototype = {
-
- parseLocation: function () {
- var info = {};
- var hash = new String(location.hash)
- if(hash.length > 1) {
- var parts = hash.substr(1).split(";")
- for(var i = 0; i < parts.length; i++) {
- var pair = parts[i].split("=");
- info[pair[0]] = pair[1]
- }
- }
- this.params = info;
- },
-
- loadTest: function (t) {
-
- var path = this.createPath(t);
-
- var url = location.pathname + "#test=" + encodeURIComponent(path.replace(/^\.\//, ''))
- Test.TAP.prototype.diag('loading: '+path+' (run in a single window)...');
-
- var req;
- if(navigator.appName == 'Microsoft Internet Explorer') {
- req = new ActiveXObject("Microsoft.XMLHTTP");
- } else {
- req = new XMLHttpRequest();
- }
- if(!req) throw "Can't create XML HTTP Request Object"
- req.open("GET", path, false);
- req.send(null);
-
- // TODO is this AJAX Impl. robust enough?
- if (req.readyState == 4) {
- if(window && window.console && console.log) {
- console.log("Evaluating test file "+path)
- }
- var testobj;
- try {
- var js = req.responseText;
- // TODO this needs to be added to every source file instead
- testobj = eval(js);
- } catch(e) {
- throw(e)
- }
- return testobj;
- }
- },
-
- createPath: function (t) {
- var path = this.test_path +'/'+t;
- return path
- },
-
- runTest: function (t) {
- var outtxt = "";
- var div = document.createElement("div");
-
- var onclick = function () {
- var c = div.className;
- if (c.match(/big/)) {
- c = c.replace(/big/, "small");
- } else if (c.match(/small/)) {
- c = c.replace(/small/, "big");
- }
- div.className = c;
- };
-
- if(div.addEventListener) {
- div.addEventListener('click', onclick, true);
- } else if(div.attachEvent) {
- div.attachEvent('onclick', onclick);
- } else {
- throw "Can't attach event without addEventListener or attachEvent";
- }
-
- div.className = 'test small';
- document.body.appendChild(div);
-
- var outfunc = function(text) {
- if (text) {
- outtxt += text;
- div.innerHTML = div.innerHTML + "\n" + text + "
"
- }
- }
-
- // set globally for synchronous run
- Test.TAP.prototype.out = outfunc;
- var testobj = this.loadTest(t);
- if (!testobj) {
- alert ("Test Object: "+t+" did not load");
- throw new ReferenceError("Test Object did now load");
- }
- // also set to instance for asynchronous output
- testobj.out = outfunc
-
- testobj.on_finished = function () {
- if (outtxt.match(/(not ok|Test Suite Crashed)/g) ) {
- div.className += ' fail';
- div.className.replace(/small/, 'big');
- } else {
- div.className += ' pass';
- }
- }
-
- setTimeout(function () {
- testobj.run_tests();
- }, 0)
- },
-
- run: function () {
- for (var i = 0; i < this.tests.length; i++) {
- var t = this.tests[i]
- this.runTest(t)
- }
- }
-
-}
-
-
diff --git a/tmpl/TapHarness.html b/tmpl/TapHarness.html
index 467239e..f042f02 100644
--- a/tmpl/TapHarness.html
+++ b/tmpl/TapHarness.html
@@ -26,7 +26,7 @@
.fail { background-color : red; }
.pass { background-color : green; }
-
+.failsuite {border: 3px solid red;}