UNPKG

4.16 kBtext/coffeescriptView Raw
1suite 'Arrays', ->
2
3 suite 'Basic Literals', ->
4
5 test 'simple arrays', ->
6 eq 0, [].length
7 eq 0, [ ].length
8 eq 1, [0].length
9 eq 1, [ 0 ].length
10 eq 2, [0,0].length
11 eq 2, [0, 0].length
12 eq 2, [0 ,0].length
13 eq 2, [ 0 , 0 ].length
14 eq 3, [0,0,0].length
15 eq 3, [0, 0, 0].length
16 eq 3, [ 0 , 0 , 0 ].length
17 eq k, v for v, k in [0, 1, 2, 3]
18 eq k, v for v, k in [0, 1, 2, 3,]
19 return
20
21 test 'arrays spread over many lines', ->
22 eq 0, [
23 ].length
24 eq 1, [
25 0
26 ].length
27 eq 1, [
28 0,
29 ].length
30 eq 2, [
31 0
32 0
33 ].length
34 eq 2, [
35 0,
36 0
37 ].length
38 eq 2, [
39 0,
40 0,
41 ].length
42 eq k, v for v, k in [
43 0
44 1
45 2
46 3
47 ]
48 return
49
50 test 'nested arrays', ->
51 eq 1, [[]].length
52 eq 0, [[]][0].length
53 eq 1, [[0]].length
54 eq 1, [[0]][0].length
55 eq 2, [[0],[1]].length
56 eq 0, [[0],[1]][0][0]
57 eq 1, [[0],[1]][1][0]
58 eq 3, [
59 []
60 [[], []]
61 [ [[], []], [] ]
62 ].length
63
64 test 'mixed newline/comma separators', ->
65 eq k, v for v, k in [
66 0
67 1, 2, 3,
68 4, 5, 6
69 7, 8, 9,
70 ]
71 return
72
73 test 'listed functions', ->
74 a = [
75 (x) -> x * x
76 ->
77 (x) -> x
78 ]
79 ok a.length is 3
80 b = [(x) -> x * x, ->, (x) -> x, ->]
81 ok b.length is 4
82
83 #test 'dedented comma style', ->
84 # eq 3, [
85 # 0
86 # ,
87 # 0
88 # ,
89 # 0
90 # ].length
91
92 #test 'jashkenas/coffee-script#1274: `[] = a()` compiles to `false` instead of `a()`', ->
93 # a = false
94 # fn = -> a = true
95 # [] = fn()
96 # ok a
97
98 #test 'mixed shorthand objects in array lists', ->
99 #
100 # arr = [
101 # a:1
102 # 'b'
103 # c:1
104 # ]
105 # ok arr.length is 3
106 # ok arr[2].c is 1
107 #
108 # arr = [b: 1, a: 2, 100]
109 # eq arr[1], 100
110 #
111 # arr = [a:0, b:1, (1 + 1)]
112 # eq arr[1], 2
113 #
114 # arr = [a:1, 'a', b:1, 'b']
115 # eq arr.length, 4
116 # eq arr[2].b, 1
117 # eq arr[3], 'b'
118
119
120 suite 'Splats', ->
121
122 test 'basic splats', ->
123 a = [1, 2, 3]
124 arrayEq [1, 2, 3], [a...]
125 arrayEq [0, 1, 2, 3], [0, a...]
126 arrayEq [1, 2, 3, 4], [a..., 4]
127 arrayEq [1, 2, 3, 1, 2, 3], [a..., a...]
128 arrayEq [1, 2, 3, [1, 2, 3]], [a..., [a]...]
129 arrayEq [[0], 1, 2, 3], [[0], a...]
130 arrayEq [0, 1, 2, 3], [[0]..., a...]
131 b = [1, [2], 3]
132 arrayEq [1, [2], 3], [b...]
133 arrayEq [[0], 1, [2], 3], [[0], b...]
134
135 test 'splats and member access', ->
136 arr = [0, 1, 2]
137 a = 'a'
138 obj = {a: arr, prototype: {a: arr}}
139 arrayEq arr, [obj.a...]
140 arrayEq arr, [obj::a...]
141 arrayEq arr, [obj[a]...]
142 arrayEq arr, [obj::[a]...]
143 arrayEq arr, [obj?.a...]
144 arrayEq arr, [obj?::a...]
145 arrayEq arr, [obj?[a]...]
146 arrayEq arr, [obj?::[a]...]
147
148 test 'splats and function invocation', ->
149 arr = [1, 2, 3]
150 fn = -> arr
151 obj = {fn: fn}
152 arrayEq arr, [(do fn)...]
153 arrayEq arr, [fn()...]
154 arrayEq arr, [(fn 0)...]
155 arrayEq arr, [fn(0)...]
156 arrayEq arr, [(do obj.fn)...]
157 arrayEq arr, [obj.fn()...]
158 arrayEq arr, [(obj.fn 0)...]
159 arrayEq arr, [obj.fn(0)...]
160
161 test 'splats and array-like objects', ->
162 obj = {0: 1, 1: 2, 2: 3, length: 3}
163 fn = ->
164 arrayEq ([].slice.call arguments), [arguments...]
165 arguments
166 arrayEq [1, 2, 3], [obj...]
167 arrayEq [0, 1, 2, 3, 4], [0, obj..., 4]
168 arrayEq [1, 2, 3], [(fn 1, 2, 3)...]
169 arrayEq [0, 1, 2, 3, 4], [0, (fn 1, 2, 3)..., 4]
170
171 test 'array splat expansions with assignments', ->
172 nums = [1, 2, 3]
173 list = [a = 0, nums..., b = 4]
174 eq 0, a
175 eq 4, b
176 arrayEq [0,1,2,3,4], list
177
178 test 'array splats with nested arrays', ->
179 nonce = {}
180 a = [nonce]
181 list = [1, 2, a...]
182 eq list[0], 1
183 eq list[2], nonce
184
185 a = [[nonce]]
186 list = [1, 2, a...]
187 arrayEq list, [1, 2, [nonce]]