forked from ladjs/superagent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
120 lines (95 loc) · 2.14 KB
/
test.js
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
o = $;
o(run);
var tests = []
, currentTest;
function run() {
var start = new Date;
function next(i) {
var test = tests[i]
, testStart = new Date;
currentTest = test;
if (!test) return complete(start);
try {
if (test.fn.length) {
test.fn(function(){
next(++i);
});
} else {
test.fn();
next(++i);
}
passed(test, new Date - testStart);
} catch (err) {
failed(test, err);
throw(err);
}
}
next(0);
}
window.onerror = function(msg){
failed(currentTest, msg);
};
function complete(start) {
var duration = new Date - start
, n = tests.length;
$('#test-results')
.append('<p>' + n + ' tests completed in ' + duration + 'ms</p>');
}
function test(label, fn) {
tests.push({
label: label
, fn: fn
});
}
function passed(test, duration) {
$('#tests').append('<li class="pass">✓ ' + test.label + ' - <em>' + duration + '</em></li>');
}
function failed(test, err) {
$('#tests').append('<li class="fail">✖ ' + test.label + ' - ' + err + '</li>');
}
function assert(ok, msg) {
if (!ok) throw new Error(msg || 'assertion failed');
}
var isArray = Array.isArray ?
Array.isArray :
function (v) {
return Object.prototype.toString.call(v) == '[object Array]';
};
function eql(a, b) {
// same object
if (a === b) return true;
// different types
try {
// Note: this breaks in IE
if (toString.call(a) != toString.call(b)) return false;
} catch (e) {
}
// array
if (isArray(a)) {
// different length
if (a.length != b.length) return false;
// different values
for (var i = 0, len = a.length; i < len; ++i) {
if (!eql(a[i], b[i])) return false;
}
return true;
}
// object
if (Object == a.constructor) {
var alen = 0
, blen = 0;
for (var key in a) ++alen;
for (var key in b) ++blen;
// different lengths
if (alen != blen) return false;
// different values
for (var key in a) {
if (!eql(a[key], b[key])) return false;
}
return true;
}
return false;
}
assert.eql = function(a, b, msg){
assert(eql(a, b), msg);
};