2008-10-08 Maciej Stachowiak <mjs@apple.com>
[WebKit.git] / LayoutTests / fast / js / resources / js-test-pre.js
1 if (window.layoutTestController)
2     layoutTestController.dumpAsText();
3
4 function description(msg)
5 {
6     // For MSIE 6 compatibility
7     var span = document.createElement("span");
8     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>';
9     var description = document.getElementById("description");
10     if (description.firstChild)
11         description.replaceChild(span, description.firstChild);
12     else
13         description.appendChild(span);
14 }
15
16 function debug(msg)
17 {
18     var span = document.createElement("span");
19     document.getElementById("console").appendChild(span); // insert it first so XHTML knows the namespace
20     span.innerHTML = msg + '<br />';
21 }
22
23 function escapeHTML(text)
24 {
25     return text.replace(/&/g, "&amp;").replace(/</g, "&lt;");
26 }
27
28 function testPassed(msg)
29 {
30     debug('<span><span class="pass">PASS</span> ' + escapeHTML(msg) + '</span>');
31 }
32
33 function testFailed(msg)
34 {
35     debug('<span><span class="fail">FAIL</span> ' + escapeHTML(msg) + '</span>');
36 }
37
38 function areArraysEqual(_a, _b)
39 {
40     if (_a.length !== _b.length)
41         return false;
42     for (var i = 0; i < _a.length; i++)
43         if (_a[i] !== _b[i])
44             return false;
45     return true;
46 }
47
48 function isMinusZero(n)
49 {
50     // the only way to tell 0 from -0 in JS is the fact that 1/-0 is
51     // -Infinity instead of Infinity
52     return n === 0 && 1/n < 0;
53 }
54
55 function isResultCorrect(_actual, _expected)
56 {
57     if (_expected === 0)
58         return _actual === _expected && (1/_actual) === (1/_expected);
59     if (_actual === _expected)
60         return true;
61     if (typeof(_expected) == "number" && isNaN(_expected))
62         return typeof(_actual) == "number" && isNaN(_actual);
63     if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([]))
64         return areArraysEqual(_actual, _expected);
65     return false;
66 }
67
68 function stringify(v)
69 {
70     if (v === 0 && 1/v < 0)
71         return "-0";
72     else return "" + v;
73 }
74
75 function shouldBe(_a, _b)
76 {
77   if (typeof _a != "string" || typeof _b != "string")
78     debug("WARN: shouldBe() expects string arguments");
79   var exception;
80   var _av;
81   try {
82      _av = eval(_a);
83   } catch (e) {
84      exception = e;
85   }
86   var _bv = eval(_b);
87
88   if (exception)
89     testFailed(_a + " should be " + _bv + ". Threw exception " + exception);
90   else if (isResultCorrect(_av, _bv))
91     testPassed(_a + " is " + _b);
92   else if (typeof(_av) == typeof(_bv))
93     testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
94   else
95     testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
96 }
97
98 function shouldBeTrue(_a) { shouldBe(_a, "true"); }
99 function shouldBeFalse(_a) { shouldBe(_a, "false"); }
100 function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
101 function shouldBeNull(_a) { shouldBe(_a, "null"); }
102
103 function shouldBeEqualToString(a, b)
104 {
105   var unevaledString = '"' + b.replace(/"/g, "\"") + '"';
106   shouldBe(a, unevaledString);
107 }
108
109 function shouldBeUndefined(_a)
110 {
111   var exception;
112   var _av;
113   try {
114      _av = eval(_a);
115   } catch (e) {
116      exception = e;
117   }
118
119   if (exception)
120     testFailed(_a + " should be undefined. Threw exception " + exception);
121   else if (typeof _av == "undefined")
122     testPassed(_a + " is undefined.");
123   else
124     testFailed(_a + " should be undefined. Was " + _av);
125 }
126
127
128 function shouldThrow(_a, _e)
129 {
130   var exception;
131   var _av;
132   try {
133      _av = eval(_a);
134   } catch (e) {
135      exception = e;
136   }
137
138   var _ev;
139   if (_e)
140       _ev =  eval(_e);
141
142   if (exception) {
143     if (typeof _e == "undefined" || exception == _ev)
144       testPassed(_a + " threw exception " + exception + ".");
145     else
146       testFailed(_a + " should throw exception " + _ev + ". Threw exception " + exception + ".");
147   } else if (typeof _av == "undefined")
148     testFailed(_a + " should throw exception " + _e + ". Was undefined.");
149   else
150     testFailed(_a + " should throw exception " + _e + ". Was " + _av + ".");
151 }