forked from assaf/zombie
/
eventloop-spec.coffee
92 lines (86 loc) · 3.6 KB
/
eventloop-spec.coffee
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
require("./helpers")
{ vows: vows, assert: assert, zombie: zombie, brains: brains } = require("vows")
brains.get "/timeout", (req, res)-> res.send """
<html>
<head><title>One</title></head>
<body></body>
</html>
"""
brains.get "/interval", (req, res)-> res.send """
<html>
<head><title></title></head>
<body></body>
</html>
"""
vows.describe("EventLoop").addBatch(
"setTimeout":
"no wait":
zombie.wants "http://localhost:3003/timeout"
topic: (browser)->
browser.clock = 0
browser.window.setTimeout (-> @document.title += " Two"), 1000
@callback null, browser
"should not fire any timeout events": (browser)-> assert.equal browser.document.title, "One"
"should not change clock": (browser) -> assert.equal browser.clock, 0
"wait for all":
zombie.wants "http://localhost:3003/timeout"
topic: (browser)->
browser.clock = 0
browser.window.setTimeout (-> @document.title += " Two"), 3000
browser.window.setTimeout (-> @document.title += " Three"), 5000
browser.wait @callback
"should fire all timeout events": (browser)-> assert.equal browser.document.title, "One Two Three"
"should move clock forward": (browser) -> assert.equal browser.clock, 5000
"cancel timeout":
zombie.wants "http://localhost:3003/timeout"
topic: (browser)->
browser.clock = 0
first = browser.window.setTimeout (-> @document.title += " Two"), 3000
second = browser.window.setTimeout (-> @document.title += " Three"), 5000
terminate = ->
browser.window.clearTimeout second
false
browser.wait terminate, @callback
"should fire only uncancelled timeout events": (browser)->
assert.equal browser.document.title, "One Two"
assert.equal browser.clock, 3000
"setInterval":
"no wait":
zombie.wants "http://localhost:3003/interval"
topic: (browser)->
browser.clock = 0
browser.window.setInterval (-> @document.title += "."), 1000
@callback null, browser
"should not fire any timeout events": (browser)-> assert.equal browser.document.title, ""
"should not change clock": (browser) -> assert.equal browser.clock, 0
"wait once":
zombie.wants "http://localhost:3003/interval"
topic: (browser)->
browser.clock = 0
browser.window.setInterval (-> @document.title += "."), 1000
browser.wait @callback
"should fire interval event once": (browser)->
assert.equal browser.document.title, "."
assert.equal browser.clock, 1000
"wait three times":
zombie.wants "http://localhost:3003/interval"
topic: (browser)->
browser.clock = 0
browser.window.setInterval (-> @document.title += "."), 1000
browser.wait 5, =>
browser.wait =>
browser.wait @callback
"should fire five interval event": (browser)-> assert.equal browser.document.title, "..."
"should move clock forward": (browser) -> assert.equal browser.clock, 3000
"cancel interval":
zombie.wants "http://localhost:3003/interval"
topic: (browser)->
browser.clock = 0
interval = browser.window.setInterval (-> @document.title += "."), 1000
browser.wait =>
browser.window.clearInterval interval
browser.wait @callback
"should fire only uncancelled interval events": (browser)->
assert.equal browser.document.title, "."
assert.equal browser.clock, 1000
).export(module)