standalone-pre.js revision cfb0617749a64f2e177386b030d46007b8c4b179
1function description(msg) 2{ 3 print(msg); 4 print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n"); 5 print(); 6} 7 8function debug(msg) 9{ 10 print(msg); 11} 12 13function escapeString(text) 14{ 15 return text.replace(/\0/g, ""); 16} 17 18function testPassed(msg) 19{ 20 print("PASS", escapeString(msg)); 21} 22 23function testFailed(msg) 24{ 25 print("FAIL", escapeString(msg)); 26} 27 28function areArraysEqual(_a, _b) 29{ 30 if (_a.length !== _b.length) 31 return false; 32 for (var i = 0; i < _a.length; i++) 33 if (_a[i] !== _b[i]) 34 return false; 35 return true; 36} 37 38function isMinusZero(n) 39{ 40 // the only way to tell 0 from -0 in JS is the fact that 1/-0 is 41 // -Infinity instead of Infinity 42 return n === 0 && 1/n < 0; 43} 44 45function isResultCorrect(_actual, _expected) 46{ 47 if (_expected === 0) 48 return _actual === _expected && (1/_actual) === (1/_expected); 49 if (_actual === _expected) 50 return true; 51 if (typeof(_expected) == "number" && isNaN(_expected)) 52 return typeof(_actual) == "number" && isNaN(_actual); 53 if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([])) 54 return areArraysEqual(_actual, _expected); 55 return false; 56} 57 58function stringify(v) 59{ 60 if (v === 0 && 1/v < 0) 61 return "-0"; 62 else return "" + v; 63} 64 65function shouldBe(_a, _b) 66{ 67 if (typeof _a != "string" || typeof _b != "string") 68 debug("WARN: shouldBe() expects string arguments"); 69 var exception; 70 var _av; 71 try { 72 _av = eval(_a); 73 } catch (e) { 74 exception = e; 75 } 76 var _bv = eval(_b); 77 78 if (exception) 79 testFailed(_a + " should be " + _bv + ". Threw exception " + exception); 80 else if (isResultCorrect(_av, _bv)) 81 testPassed(_a + " is " + _b); 82 else if (typeof(_av) == typeof(_bv)) 83 testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + "."); 84 else 85 testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ")."); 86} 87 88function shouldBeTrue(_a) { shouldBe(_a, "true"); } 89function shouldBeFalse(_a) { shouldBe(_a, "false"); } 90function shouldBeNaN(_a) { shouldBe(_a, "NaN"); } 91function shouldBeNull(_a) { shouldBe(_a, "null"); } 92 93function shouldBeEqualToString(a, b) 94{ 95 var unevaledString = '"' + b.replace(/"/g, "\"") + '"'; 96 shouldBe(a, unevaledString); 97} 98 99function shouldBeUndefined(_a) 100{ 101 var exception; 102 var _av; 103 try { 104 _av = eval(_a); 105 } catch (e) { 106 exception = e; 107 } 108 109 if (exception) 110 testFailed(_a + " should be undefined. Threw exception " + exception); 111 else if (typeof _av == "undefined") 112 testPassed(_a + " is undefined."); 113 else 114 testFailed(_a + " should be undefined. Was " + _av); 115} 116 117 118function shouldThrow(_a, _e) 119{ 120 var exception; 121 var _av; 122 try { 123 _av = eval(_a); 124 } catch (e) { 125 exception = e; 126 } 127 128 var _ev; 129 if (_e) 130 _ev = eval(_e); 131 132 if (exception) { 133 if (typeof _e == "undefined" || exception == _ev) 134 testPassed(_a + " threw exception " + exception + "."); 135 else 136 testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + "."); 137 } else if (typeof _av == "undefined") 138 testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined."); 139 else 140 testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + "."); 141} 142