diff --git a/www/assert/index.html b/www/assert/index.html index 5feebf5ae..68c995f68 100644 --- a/www/assert/index.html +++ b/www/assert/index.html @@ -4,6 +4,24 @@ + + + +
diff --git a/www/assert/main.js b/www/assert/main.js index f8c4f7ce1..0ffea44e6 100644 --- a/www/assert/main.js +++ b/www/assert/main.js @@ -10,13 +10,30 @@ define([ window.TextPatcher = TextPatcher; var assertions = 0; + var failed = false; + var failedOn; + var failMessages = []; + + var ASSERTS = []; + var runASSERTS = function () { + ASSERTS.forEach(function (f, index) { + f(index); + }); + }; var assert = function (test, msg) { - if (test()) { - assertions++; - } else { - throw new Error(msg || ''); - } + ASSERTS.push(function (i) { + if (test()) { + assertions++; + } else { + failed = true; + failedOn = assertions; + failMessages.push({ + test: i, + message: msg + }); + } + }); }; var $body = $('body'); @@ -43,8 +60,93 @@ define([ }, "Round trip serialization introduced artifacts."); }; - roundTrip($('#target')[0]); - roundTrip($('#widget')[0]); + [ '#target', + '#widget', + ].forEach(function (sel) { + roundTrip($(sel)[0]); + }); + + var strungJSON = function (orig) { + var result; + assert(function () { + result = JSON.stringify(JSON.parse(orig)); + return result === orig; + }, "expected result (" + result + ") to equal original (" + orig + ")"); + }; + + [ '{"border":"1","style":{"width":"500px"}}', + '{"style":{"width":"500px"},"border":"1"}', + ].forEach(function (orig) { + strungJSON(orig); + }); + + //assert(function () { }, "this is expected to fail"); + + /* TODO Test how browsers handle weird elements + like "_moz-resizing":"true" + + and anything else you can think of. + + Start with Hyperjson, turn it into a DOM and come back + */ + + var swap = function (str, dict) { + return str.replace(/\{\{(.*?)\}\}/g, function (all, key) { + return typeof dict[key] !== 'undefined'? dict[key] : all; + }); + }; + + var multiline = function (f) { + var str; + f.toString().replace(/\/\*([\s\S]*)\*\//g, function (all, out) { + str = out; + }); + return str || ''; + }; + + var formatFailures = function () { + var template = multiline(function () { /* ++Failed on test number {{test}} with error: +> "{{message}}" ++