1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
function debug(message)
{
document.getElementById('status').innerHTML += '<br/>' + message;
}
function done()
{
if (document.location.hash != '#fail') {
debug('PASS');
document.location.hash = '#pass';
}
}
function fail(message)
{
debug('FAILED: ' + message);
document.location.hash = '#fail';
}
function getLog()
{
return "" + document.getElementById('status').innerHTML;
}
function unexpectedSuccessCallback()
{
fail('unexpectedSuccessCallback');
}
function unexpectedErrorCallback()
{
fail('unexpectedErrorCallback');
}
function deleteAllObjectStores(db)
{
objectStores = db.objectStores;
for (var i = 0; i < objectStores.length; ++i)
db.removeObjectStore(objectStores[i]);
}
// The following functions are based on
// WebKit/LayoutTests/fast/js/resources/js-test-pre.js
// so that the tests will look similar to the existing layout tests.
function stringify(v)
{
if (v === 0 && 1/v < 0)
return "-0";
else return "" + v;
}
function isResultCorrect(_actual, _expected)
{
if (_expected === 0)
return _actual === _expected && (1/_actual) === (1/_expected);
if (_actual === _expected)
return true;
if (typeof(_expected) == "number" && isNaN(_expected))
return typeof(_actual) == "number" && isNaN(_actual);
if (Object.prototype.toString.call(_expected) ==
Object.prototype.toString.call([]))
return areArraysEqual(_actual, _expected);
return false;
}
function shouldBe(_a, _b)
{
if (typeof _a != "string" || typeof _b != "string")
debug("WARN: shouldBe() expects string arguments");
var exception;
var _av;
try {
_av = eval(_a);
} catch (e) {
exception = e;
}
var _bv = eval(_b);
if (exception)
fail(_a + " should be " + _bv + ". Threw exception " + exception);
else if (isResultCorrect(_av, _bv))
debug(_a + " is " + _b);
else if (typeof(_av) == typeof(_bv))
fail(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
else
fail(_a + " should be " + _bv + " (of type " + typeof _bv + "). " +
"Was " + _av + " (of type " + typeof _av + ").");
}
function shouldBeTrue(_a) { shouldBe(_a, "true"); }
function shouldBeFalse(_a) { shouldBe(_a, "false"); }
function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
function shouldBeNull(_a) { shouldBe(_a, "null"); }
function shouldBeEqualToString(a, b)
{
var unevaledString = '"' + b.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"';
shouldBe(a, unevaledString);
}
|