UNPKG

1.54 kBtext/coffeescriptView Raw
1suite 'Scope', ->
2
3 test 'basics', ->
4 a = true
5 ok a
6 fn = -> b = 0
7 throws -> b
8 eq 'undefined', typeof b
9
10 test 'reassignments in a closure', ->
11 a = false
12 ok not a
13 do -> a = true
14 ok a
15
16 b = false
17 fn = -> b = true
18 ok not b
19 ok fn()
20 ok b
21
22 test 'vars are function-scoped, not block-scoped', ->
23 fn = -> true
24 if fn()
25 a = 1
26 else
27 a = 0
28 ok a
29
30 test 'function params are added to scope', ->
31 fn = (p) -> ok p
32 fn true
33
34 test 're-assignments of function params', ->
35 nonce = {}
36 fn = (p) ->
37 eq nonce, p
38 p = 0
39 ok not p
40 fn nonce
41
42 test 're-assignments of function params in a loop', ->
43 nonce = {}
44 fn = (p) ->
45 eq nonce, p
46 a = 1
47 while a--
48 p = 0
49 ok not p
50 fn nonce
51
52 test 're-assignments of function params in a loop used as a value', ->
53 nonce = {}
54 fn = (p) ->
55 eq nonce, p
56 a = 1
57 b = while a--
58 p = 0
59 ok not p
60 fn nonce
61
62 # DISABLED DUE TO BUG: see issue #46
63 #test 'declarations in a loop used as a value', ->
64 # a = 1
65 # a = while a--
66 # b = 1
67 # ok b
68
69 test 'loop iterators available within the loop', ->
70 for v, k in [1]
71 ok v
72 ok not k
73 return
74
75 test 'loop iterators available outside the loop (ew)', ->
76 fn = ->
77 for v, k in [1]
78 fn()
79 ok v
80 ok not k
81
82 test '`do` acts as `let`', ->
83 outerNonce = nonce = {}
84 do (nonce) ->
85 eq outerNonce, nonce
86 nonce = {}
87 eq outerNonce, nonce