-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestframe.js
48 lines (44 loc) · 1.24 KB
/
testframe.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
jQuery.noConflict()
window.assert = chai.assert
window.addEventListener('message', function(e) {
if (e.data.challenge) {
var result = runTest(e.data.text, e.data.challenge)
window.postMessage({result:result},'*')
}
}, false)
window.postMessage({loaded:true},'*')
function runTest(text, challenge) {
var debugErrors = false /* only if webkit inspector open, maybe */
window.$ = function(sel) {
var testDiv = document.createElement('div')
testDiv.innerHTML = text
return jQuery(sel, testDiv)
}
window.code = text
if (challenge.head) {
eval(challenge.head.join('\n'))
}
try {
eval(text)
} catch(e) {
console.error('syntax error?',e)
return {name:e.name,
message:e.name + ': ' + e.message,
stack:e.stack}
}
if (challenge.tail) {
eval(challenge.tail.join('\n'))
}
for (var i=0; i<challenge.tests.length; i++) {
if ( debugErrors ) {
eval(challenge.tests[i])
}
try {
eval(challenge.tests[i])
console.log('a test passes!')
} catch(e) {
console.error('test failed',challenge.title,e)
return e
}
}
}