1967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch// svg/dynamic-updates tests set enablePixelTesting=true, as we want to dump text + pixel results 2cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockif (window.layoutTestController) 3967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch layoutTestController.dumpAsText(window.enablePixelTesting); 4cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 5cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction description(msg) 6cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 7cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // For MSIE 6 compatibility 8cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var span = document.createElement("span"); 9cfb0617749a64f2e177386b030d46007b8c4b179Steve Block span.innerHTML = '<p>' + msg + '</p><p>On success, you will see a series of "<span class="pass">PASS</span>" messages, followed by "<span class="pass">TEST COMPLETE</span>".</p>'; 10cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var description = document.getElementById("description"); 11cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (description.firstChild) 12cfb0617749a64f2e177386b030d46007b8c4b179Steve Block description.replaceChild(span, description.firstChild); 13cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 14cfb0617749a64f2e177386b030d46007b8c4b179Steve Block description.appendChild(span); 15cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 16cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 17cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction debug(msg) 18cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 19cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var span = document.createElement("span"); 20cfb0617749a64f2e177386b030d46007b8c4b179Steve Block document.getElementById("console").appendChild(span); // insert it first so XHTML knows the namespace 21cfb0617749a64f2e177386b030d46007b8c4b179Steve Block span.innerHTML = msg + '<br />'; 22cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 23cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 24cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction escapeHTML(text) 25cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 26dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return text.replace(/&/g, "&").replace(/</g, "<").replace(/\0/g, "\\0"); 27cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 28cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 29cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction testPassed(msg) 30cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 31cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug('<span><span class="pass">PASS</span> ' + escapeHTML(msg) + '</span>'); 32cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 33cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 34cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction testFailed(msg) 35cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 36cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug('<span><span class="fail">FAIL</span> ' + escapeHTML(msg) + '</span>'); 37cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 38cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 39cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction areArraysEqual(_a, _b) 40cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block try { 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_a.length !== _b.length) 43cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return false; 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < _a.length; i++) 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_a[i] !== _b[i]) 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } catch (ex) { 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 50cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return true; 51cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 52cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 53cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction isMinusZero(n) 54cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 55cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // the only way to tell 0 from -0 in JS is the fact that 1/-0 is 56cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // -Infinity instead of Infinity 57cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return n === 0 && 1/n < 0; 58cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 59cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 60cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction isResultCorrect(_actual, _expected) 61cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 62cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (_expected === 0) 63cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return _actual === _expected && (1/_actual) === (1/_expected); 64cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (_actual === _expected) 65cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return true; 66cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (typeof(_expected) == "number" && isNaN(_expected)) 67cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return typeof(_actual) == "number" && isNaN(_actual); 68cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([])) 69cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return areArraysEqual(_actual, _expected); 70cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return false; 71cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 72cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 73cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction stringify(v) 74cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 75cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (v === 0 && 1/v < 0) 76cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return "-0"; 77cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else return "" + v; 78cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 79cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 80cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction evalAndLog(_a) 81cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 82cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (typeof _a != "string") 83cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug("WARN: tryAndLog() expects a string argument"); 84cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 85cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // Log first in case things go horribly wrong or this causes a sync event. 86cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug(_a); 87cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 88cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 89cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 90cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 91cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 92cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " threw exception " + e); 93cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return _av; 95cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 96cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 97cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBe(_a, _b) 98cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 99cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (typeof _a != "string" || typeof _b != "string") 100cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug("WARN: shouldBe() expects string arguments"); 101cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var exception; 102cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 103cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 104cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 105cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 106cfb0617749a64f2e177386b030d46007b8c4b179Steve Block exception = e; 107cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 108cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _bv = eval(_b); 109cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 110cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (exception) 111cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be " + _bv + ". Threw exception " + exception); 112cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else if (isResultCorrect(_av, _bv)) 113cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testPassed(_a + " is " + _b); 114cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else if (typeof(_av) == typeof(_bv)) 115cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + "."); 116cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 117cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ")."); 118cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 119cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 120cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeTrue(_a) { shouldBe(_a, "true"); } 121cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeFalse(_a) { shouldBe(_a, "false"); } 122cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeNaN(_a) { shouldBe(_a, "NaN"); } 123cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeNull(_a) { shouldBe(_a, "null"); } 124cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 125cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeEqualToString(a, b) 126cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 127a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var unevaledString = '"' + b.replace(/\\/g, "\\\\").replace(/"/g, "\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r") + '"'; 128cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBe(a, unevaledString); 129cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 130cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 131cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldEvaluateTo(actual, expected) { 132cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // A general-purpose comparator. 'actual' should be a string to be 133cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // evaluated, as for shouldBe(). 'expected' may be any type and will be 134cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // used without being eval'ed. 135cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (expected == null) { 136cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // Do this before the object test, since null is of type 'object'. 137cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeNull(actual); 138cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "undefined") { 139cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeUndefined(actual); 140cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "function") { 141cfb0617749a64f2e177386b030d46007b8c4b179Steve Block // All this fuss is to avoid the string-arg warning from shouldBe(). 142cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 143cfb0617749a64f2e177386b030d46007b8c4b179Steve Block actualValue = eval(actual); 144cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 145cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed("Evaluating " + actual + ": Threw exception " + e); 146cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return; 147cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 148cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBe("'" + actualValue.toString().replace(/\n/g, "") + "'", 149cfb0617749a64f2e177386b030d46007b8c4b179Steve Block "'" + expected.toString().replace(/\n/g, "") + "'"); 150cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "object") { 151cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeTrue(actual + " == '" + expected + "'"); 152cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "string") { 153cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBe(actual, expected); 154cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "boolean") { 155cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBe("typeof " + actual, "'boolean'"); 156cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (expected) 157cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeTrue(actual); 158cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 159cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeFalse(actual); 160cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof expected == "number") { 161cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBe(actual, stringify(expected)); 162cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else { 163cfb0617749a64f2e177386b030d46007b8c4b179Steve Block debug(expected + " is unknown type " + typeof expected); 164cfb0617749a64f2e177386b030d46007b8c4b179Steve Block shouldBeTrue(actual, "'" +expected.toString() + "'"); 165cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 166cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 167cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 168cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeNonZero(_a) 169cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 170cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var exception; 171cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 172cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 173cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 174cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 175cfb0617749a64f2e177386b030d46007b8c4b179Steve Block exception = e; 176cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 177cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 178cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (exception) 179cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be non-zero. Threw exception " + exception); 180cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else if (_av != 0) 181cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testPassed(_a + " is non-zero."); 182cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 183cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be non-zero. Was " + _av); 184cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 185cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 186cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeNonNull(_a) 187cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 188cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var exception; 189cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 190cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 191cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 192cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 193cfb0617749a64f2e177386b030d46007b8c4b179Steve Block exception = e; 194cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 195cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 196cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (exception) 197cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be non-null. Threw exception " + exception); 198cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else if (_av != null) 199cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testPassed(_a + " is non-null."); 200cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 201cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be non-null. Was " + _av); 202cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 203cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 204cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldBeUndefined(_a) 205cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 206cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var exception; 207cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 208cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 209cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 210cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 211cfb0617749a64f2e177386b030d46007b8c4b179Steve Block exception = e; 212cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 213cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 214cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (exception) 215cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be undefined. Threw exception " + exception); 216cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else if (typeof _av == "undefined") 217cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testPassed(_a + " is undefined."); 218cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 219cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should be undefined. Was " + _av); 220cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 221cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 222e14391e94c850b8bd03680c23b38978db68687a8John Reckfunction shouldBeDefined(_a) 223e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 224e14391e94c850b8bd03680c23b38978db68687a8John Reck var exception; 225e14391e94c850b8bd03680c23b38978db68687a8John Reck var _av; 226e14391e94c850b8bd03680c23b38978db68687a8John Reck try { 227e14391e94c850b8bd03680c23b38978db68687a8John Reck _av = eval(_a); 228e14391e94c850b8bd03680c23b38978db68687a8John Reck } catch (e) { 229e14391e94c850b8bd03680c23b38978db68687a8John Reck exception = e; 230e14391e94c850b8bd03680c23b38978db68687a8John Reck } 231e14391e94c850b8bd03680c23b38978db68687a8John Reck 232e14391e94c850b8bd03680c23b38978db68687a8John Reck if (exception) 233e14391e94c850b8bd03680c23b38978db68687a8John Reck testFailed(_a + " should be defined. Threw exception " + exception); 234e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (_av !== undefined) 235e14391e94c850b8bd03680c23b38978db68687a8John Reck testPassed(_a + " is defined."); 236e14391e94c850b8bd03680c23b38978db68687a8John Reck else 237e14391e94c850b8bd03680c23b38978db68687a8John Reck testFailed(_a + " should be defined. Was " + _av); 238e14391e94c850b8bd03680c23b38978db68687a8John Reck} 239e14391e94c850b8bd03680c23b38978db68687a8John Reck 240967717af5423377c967781471ee106e2bb4e11c8Ben Murdochfunction shouldBeGreaterThanOrEqual(_a, _b) { 241967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (typeof _a != "string" || typeof _b != "string") 242967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch debug("WARN: shouldBeGreaterThanOrEqual expects string arguments"); 243967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 244967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch var exception; 245967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch var _av; 246967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch try { 247967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch _av = eval(_a); 248967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch } catch (e) { 249967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch exception = e; 250967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch } 251967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch var _bv = eval(_b); 252967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 253967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (exception) 254967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch testFailed(_a + " should be >= " + _b + ". Threw exception " + exception); 255967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch else if (typeof _av == "undefined" || _av < _bv) 256967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch testFailed(_a + " should be >= " + _b + ". Was " + _av + " (of type " + typeof _av + ")."); 257967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch else 258967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch testPassed(_a + " is >= " + _b); 259967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 260cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 261cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction shouldThrow(_a, _e) 262cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{ 263cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var exception; 264cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _av; 265cfb0617749a64f2e177386b030d46007b8c4b179Steve Block try { 266cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _av = eval(_a); 267cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } catch (e) { 268cfb0617749a64f2e177386b030d46007b8c4b179Steve Block exception = e; 269cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 270cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 271cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var _ev; 272cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (_e) 273cfb0617749a64f2e177386b030d46007b8c4b179Steve Block _ev = eval(_e); 274cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 275cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (exception) { 276cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (typeof _e == "undefined" || exception == _ev) 277cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testPassed(_a + " threw exception " + exception + "."); 278cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 279cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + "."); 280cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } else if (typeof _av == "undefined") 281cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined."); 282cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else 283cfb0617749a64f2e177386b030d46007b8c4b179Steve Block testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + "."); 284cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 285cfb0617749a64f2e177386b030d46007b8c4b179Steve Block 286cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction gc() { 287cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (typeof GCController !== "undefined") 288cfb0617749a64f2e177386b030d46007b8c4b179Steve Block GCController.collect(); 289cfb0617749a64f2e177386b030d46007b8c4b179Steve Block else { 290cfb0617749a64f2e177386b030d46007b8c4b179Steve Block function gcRec(n) { 291cfb0617749a64f2e177386b030d46007b8c4b179Steve Block if (n < 1) 292cfb0617749a64f2e177386b030d46007b8c4b179Steve Block return {}; 293cfb0617749a64f2e177386b030d46007b8c4b179Steve Block var temp = {i: "ab" + i + (i / 100000)}; 294cfb0617749a64f2e177386b030d46007b8c4b179Steve Block temp += "foo"; 295cfb0617749a64f2e177386b030d46007b8c4b179Steve Block gcRec(n-1); 296cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 297cfb0617749a64f2e177386b030d46007b8c4b179Steve Block for (var i = 0; i < 1000; i++) 298cfb0617749a64f2e177386b030d46007b8c4b179Steve Block gcRec(10) 299cfb0617749a64f2e177386b030d46007b8c4b179Steve Block } 300cfb0617749a64f2e177386b030d46007b8c4b179Steve Block} 3015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 3025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// It's possible for an async test to call finishJSTest() before js-test-post.js 3035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// has been parsed. 3045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenfunction finishJSTest() 3055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 3065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen wasFinishJSTestCalled = true; 3075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (!window.wasPostTestScriptParsed) 3085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return; 3095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen shouldBeTrue("successfullyParsed"); 3105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen debug('<br /><span class="pass">TEST COMPLETE</span>'); 3115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (window.jsTestIsAsync && window.layoutTestController) 3125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen layoutTestController.notifyDone(); 3135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 314