2007-10-22 Eric Seidel <eric@webkit.org>
[WebKit-https.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 isResultCorrect(_actual, _expected)
49 {
50     if (_actual === _expected)
51         return true;
52     if (typeof(_expected) == "number" && isNaN(_expected))
53         return typeof(_actual) == "number" && isNaN(_actual);
54     if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([]))
55         return areArraysEqual(_actual, _expected);
56     return false;
57 }
58
59 function shouldBe(_a, _b)
60 {
61   if (typeof _a != "string" || typeof _b != "string")
62     debug("WARN: shouldBe() expects string arguments");
63   var exception;
64   var _av;
65   try {
66      _av = eval(_a);
67   } catch (e) {
68      exception = e;
69   }
70   var _bv = eval(_b);
71
72   if (exception)
73     testFailed(_a + " should be " + _bv + ". Threw exception " + exception);
74   else if (isResultCorrect(_av, _bv))
75     testPassed(_a + " is " + _b);
76   else if (typeof(_av) == typeof(_bv))
77     testFailed(_a + " should be " + _bv + ". Was " + _av + ".");
78   else
79     testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
80 }
81
82 function shouldBeTrue(_a) { shouldBe(_a, "true"); }
83 function shouldBeFalse(_a) { shouldBe(_a, "false"); }
84 function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
85 function shouldBeNull(_a) { shouldBe(_a, "null"); }
86
87 function shouldBeEqualToString(a, b)
88 {
89   var unevaledString = '"' + b.replace(/"/g, "\"") + '"';
90   shouldBe(a, unevaledString);
91 }
92
93 function shouldBeUndefined(_a)
94 {
95   var exception;
96   var _av;
97   try {
98      _av = eval(_a);
99   } catch (e) {
100      exception = e;
101   }
102
103   if (exception)
104     testFailed(_a + " should be undefined. Threw exception " + exception);
105   else if (typeof _av == "undefined")
106     testPassed(_a + " is undefined.");
107   else
108     testFailed(_a + " should be undefined. Was " + _av);
109 }
110
111
112 function shouldThrow(_a, _e)
113 {
114   var exception;
115   var _av;
116   try {
117      _av = eval(_a);
118   } catch (e) {
119      exception = e;
120   }
121
122   var _ev;
123   if (_e)
124       _ev =  eval(_e);
125
126   if (exception) {
127     if (typeof _e == "undefined" || exception == _ev)
128       testPassed(_a + " threw exception " + exception + ".");
129     else
130       testFailed(_a + " should throw exception " + _ev + ". Threw exception " + exception + ".");
131   } else if (typeof _av == "undefined")
132     testFailed(_a + " should throw exception " + _e + ". Was undefined.");
133   else
134     testFailed(_a + " should throw exception " + _e + ". Was " + _av + ".");
135 }