visionmedia-jspec 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,12 @@
1
+
2
+ describe 'DOM Sandbox'
3
+
4
+ before_each
5
+ .dom = this.defaultSandbox() // Normall sandbox() jQuery helpers override this
6
+ end
7
+
8
+ it 'should allow creation of sandboxes'
9
+ .dom.should_be_a HTMLDivElement
10
+ end
11
+
12
+ end
@@ -0,0 +1,323 @@
1
+
2
+ describe 'Matchers'
3
+
4
+ describe 'eql'
5
+ it 'should work with strings'
6
+ 'test'.should.eql 'test'
7
+ 'test'.should.not.eql 'foo'
8
+ end
9
+
10
+ it 'should work with numbers'
11
+ 11.should.eql 11
12
+ 10.should.not.eql 11
13
+ end
14
+
15
+ it 'should loosely compare numbers as strings'
16
+ '11'.should.eql 11
17
+ '10'.should.not.eql 11
18
+ end
19
+
20
+ it 'should hash compare arrays'
21
+ [1, 2].should.eql [1, 2]
22
+ [1, 2].should.not.eql [1, 3]
23
+ [1, 2, [3], { foo : 'bar' }].should.eql [1, 2, [3], { foo : 'bar' }]
24
+ end
25
+
26
+ it 'should hash compare objects'
27
+ { foo : 'bar' }.should.eql { foo : 'bar' }
28
+ end
29
+ end
30
+
31
+ describe 'equal'
32
+ it 'should perform strict comparisons'
33
+ 'test'.should.equal 'test'
34
+ '1'.should.not.equal 1
35
+ end
36
+ end
37
+
38
+ describe 'match'
39
+ it 'should match regular expressions'
40
+ 'foobar'.should.match(/foo/)
41
+ 'foobar'.should.not.match(/barfoo/)
42
+ end
43
+ end
44
+
45
+ describe 'be_empty'
46
+ it 'should consider any object responding to a length of 0 to be empty'
47
+ ''.should.be_empty
48
+ ' '.should.not.be_empty
49
+ [].should.be_empty
50
+ { length : 0 }.should.be_empty
51
+ end
52
+ end
53
+
54
+ describe 'be_null'
55
+ it 'should check if a value is null'
56
+ null.should.be_null
57
+ 0.should.not.be_null
58
+ end
59
+ end
60
+
61
+ describe 'have_length'
62
+ it 'should compare the length of an object'
63
+ 'foo'.should.have_length 3
64
+ [1, 2].should.have_length 2
65
+ end
66
+ end
67
+
68
+ describe 'have_length_within'
69
+ it 'should check if an object has a length within the specified range'
70
+ 'foo'.should.have_length_within 2..4
71
+ 'f'.should.not.have_length_within 2..4
72
+ end
73
+ end
74
+
75
+ describe 'have_prop'
76
+ it 'should check if a property exists'
77
+ 'foo'.should.have_prop 'length'
78
+ end
79
+
80
+ it 'should check that a property has a specific value'
81
+ 'foo'.should.have_prop 'length', 3
82
+ { length : '3' }.should.have_prop 'length', 3
83
+ end
84
+
85
+ it 'should check object hashes'
86
+ { foo : 1..3 }.should.have_prop 'foo', 1..3
87
+ end
88
+
89
+ it 'should fail when the property does not exist'
90
+ 'foo'.should.not.have_prop 'foo'
91
+ 'foo'.should.not.have_prop 'foo', 'bar'
92
+ end
93
+
94
+ it 'should fail when it is a function'
95
+ 'foo'.should.not.have_prop 'toString'
96
+ end
97
+ end
98
+
99
+ describe 'have_property'
100
+ it 'should check if a property exists'
101
+ 'foo'.should.have_property 'length'
102
+ end
103
+
104
+ it 'should check that a property has a specific value'
105
+ 'foo'.should.have_property 'length', 3
106
+ { length : '3' }.should.not.have_property 'length', 3
107
+ end
108
+
109
+ it 'should fail when the property does not exist'
110
+ 'foo'.should.not.have_property 'foo'
111
+ 'foo'.should.not.have_property 'foo', 'bar'
112
+ end
113
+
114
+ it 'should fail when it is a function'
115
+ 'foo'.should.not.have_property 'toString'
116
+ end
117
+ end
118
+
119
+ describe 'respond_to'
120
+ it 'should check if an object contains a method'
121
+ 'test'.should.respond_to('toString')
122
+ 'test'.should.not.respond_to('rawr')
123
+ end
124
+ end
125
+
126
+ describe 'include'
127
+ it 'should check if an object includes a property'
128
+ { hey : 'there' }.should.include 'hey'
129
+ { hey : 'there' }.should.not.include 'foo'
130
+ end
131
+
132
+ it 'should check if a regular expression includes a string'
133
+ /(foo)?bar/.should.include '(foo)'
134
+ end
135
+
136
+ it 'should check if a function body includes a string'
137
+ -{ return [foo, bar] }.should.include 'foo', 'bar'
138
+ end
139
+
140
+ it 'should check if an array contains element(s)'
141
+ [1,2,3].should.include 1
142
+ [1,2,3].should.include 1, 2, 3
143
+ [1].should.not.include 0
144
+ ['foo', 'bar'].should.include 'foo', 'bar'
145
+ ['foo', 'bar'].should.include 'bar', 'foo'
146
+ ['foo', 'bar'].should.not.include 'foo', 'rawr'
147
+ ['foo', 'bar'].should.not.include 'rawr', 'foo'
148
+ end
149
+
150
+ it 'should check hashes of array elements'
151
+ [1, [2]].should.include [2]
152
+ [1, [2]].should.include [2], 1
153
+ [1, { two : 'three' }].should.include { two : 'three' }
154
+ end
155
+ end
156
+
157
+ describe 'be_a'
158
+ it 'should compare the constructor of an object'
159
+ 'test'.should.be_a String
160
+ [].should.be_an Array
161
+ end
162
+ end
163
+
164
+ describe 'throw_error'
165
+ it 'should check if an error is thrown'
166
+ -{ throw 'error' }.should_throw_error
167
+ -{ return 'test' }.should_not_throw_error
168
+ end
169
+
170
+ it 'should check if an error with a specific message is thrown'
171
+ -{ throw 'some foo bar' }.should.throw_error('some foo bar')
172
+ -{ throw 'some foo bar' }.should.throw_error(/foo bar/)
173
+ -{ throw 'some foo bar' }.should.not.throw_error(/rawr/)
174
+ -{ throw 'some foo bar' }.should.not.throw_error('rawr')
175
+ end
176
+ end
177
+
178
+ describe 'be_type'
179
+ it 'should compare the type of an object via typeof'
180
+ 'hey'.should.be_type 'string'
181
+ {}.should.be_type 'object'
182
+ end
183
+ end
184
+
185
+ describe 'be_within'
186
+ it 'should check if a number is within a range'
187
+ 5.should.be_within 1..10
188
+ 15.should.not.be_within 10..5
189
+ end
190
+ end
191
+
192
+ describe 'have'
193
+ it 'should check the length of a property'
194
+ person = { pets : ['izzy', 'niko'] }
195
+ person.should.have 2, 'pets'
196
+ person.should.not.have 3, 'pets'
197
+ end
198
+ end
199
+
200
+ describe 'have_at_least'
201
+ it 'should check if a object has at least n of a property'
202
+ person = { pets : ['izzy', 'niko'] }
203
+ person.should.have_at_least 1, 'pets'
204
+ person.should.have_at_least 2, 'pets'
205
+ person.should.not.have_at_least 3, 'pets'
206
+ end
207
+ end
208
+
209
+ describe 'have_at_most'
210
+ it 'should check if an object has at most n of a property'
211
+ person = { pets : ['izzy', 'niko'] }
212
+ person.should.have_at_most 2, 'pets'
213
+ person.should.have_at_most 3, 'pets'
214
+ person.should.not.have_at_most 1, 'pets'
215
+ end
216
+ end
217
+
218
+ describe 'be_within'
219
+ it 'should check that an object has within n..n of a property'
220
+ person = { pets : ['izzy', 'niko'] }
221
+ person.should.have_within 1..2, 'pets'
222
+ person.should.have_within 2..5, 'pets'
223
+ person.should.not.have_within 5..10, 'pets'
224
+ end
225
+ end
226
+
227
+ end
228
+
229
+ describe 'Negative specs'
230
+
231
+ it 'should fail'
232
+ 'test'.should.not_eql 'test'
233
+ end
234
+
235
+ it 'should fail with one faulty assertion'
236
+ 'test'.should.equal 'test'
237
+ 'test'.should.equal 'foo'
238
+ end
239
+
240
+ it 'should fail and print array with square braces'
241
+ [1,2].should.equal [1,3]
242
+ end
243
+
244
+ it 'should fail and print nested array'
245
+ [1, ['foo']].should.equal [1, ['bar', ['whatever', 1.0, { foo : 'bar', bar : { 1 : 2 } }]]]
246
+ end
247
+
248
+ it 'should fail and print html elements'
249
+ elem = document.createElement('a')
250
+ elem.setAttribute('href', 'http://vision-media.ca')
251
+ elem.should.not.eql elem
252
+ end
253
+
254
+ it 'should fail with selector for jQuery objects'
255
+ elem = { jquery : '1.3.1', selector : '.foobar' }
256
+ elem.should.eql 'foo'
257
+ end
258
+
259
+ it 'should fail with negative message'
260
+ '1'.should.not.be_true
261
+ end
262
+
263
+ it 'should fail with positive message'
264
+ false.should.be_true
265
+ end
266
+
267
+ it 'should fail with function body'
268
+ -{ rawr }.should.not.throw_error
269
+ end
270
+
271
+ it 'should fail with message of first failure'
272
+ true.should.be_true
273
+ 'bar'.should.match(/foo/gm)
274
+ 'bar'.should.include 'foo'
275
+ end
276
+
277
+ it 'should fail with list'
278
+ ['foo', 'bar'].should.include 'foo', 'car'
279
+ end
280
+
281
+ end
282
+
283
+ describe 'Utility'
284
+ describe 'query'
285
+ it 'should return a pairs value'
286
+ JSpec.query('suite', '?suite=Positive%20specs').should.equal 'Positive specs'
287
+ end
288
+
289
+ it 'should return null when key is not present'
290
+ JSpec.query('foo', '?suite=Positive%20specs').should.be_null
291
+ end
292
+ end
293
+
294
+ describe 'strip'
295
+ it 'should strip whitespace by default'
296
+ JSpec.strip(" foo \n\n").should.equal 'foo'
297
+ end
298
+
299
+ it 'should strip the characters passed'
300
+ JSpec.strip('[foo]', '\\[\\]').should.equal 'foo'
301
+ end
302
+ end
303
+ end
304
+
305
+ describe 'Contexts'
306
+ before
307
+ JSpec.context = { iLike : 'cookies' }
308
+ end
309
+
310
+ after
311
+ JSpec.context = null
312
+ end
313
+
314
+ it 'should be replacable'
315
+ .iLike.should.equal 'cookies'
316
+ end
317
+ end
318
+
319
+ describe 'Misc'
320
+ it 'requires implementation'
321
+ end
322
+ end
323
+
@@ -0,0 +1,127 @@
1
+
2
+ describe 'Grammar'
3
+
4
+ it 'should allow "it" spec literal'
5
+ true.should.be_true
6
+ end
7
+
8
+ n = 10
9
+ it 'should allow literal javascript outside of blocks'
10
+ n.should.eql 10
11
+ end
12
+
13
+ it 'should allow parens to be optional when no args are passed'
14
+ true.should.be_true
15
+ true.should.be_true()
16
+ end
17
+
18
+ it 'should allow parens to be optional with args'
19
+ 'foobar'.should.include 'foo'
20
+ 'rawr'.should.not_include 'foo'
21
+ end
22
+
23
+ it 'should allow literals without defining variables variables'
24
+ {}.should.be_an Object
25
+ end
26
+
27
+ it 'should allow alternative closure literal'
28
+ -{ throw 'test' }.should.throw_error
29
+ end
30
+
31
+ it 'should allow . this. literal'
32
+ this.foo = 'bar'
33
+ .foo.should.eql 'bar'
34
+ end
35
+
36
+ it 'should allow inclusive range literal n..n'
37
+ 1..5.should.eql [1,2,3,4,5]
38
+ 3..4.should.eql [3,4]
39
+ 1..1.should.eql [1]
40
+ 3..1.should.eql [3,2,1]
41
+ end
42
+
43
+ it 'should allow snakecase style assertions'
44
+ 'foo'.should_equal('foo')
45
+ 'foo'.should_equal 'foo'
46
+ 'bar'.should_not_equal('foo')
47
+ 'bar'.should_not_equal 'foo'
48
+ end
49
+
50
+ it 'should allow dot style assertions'
51
+ 'foo'.should.equal('foo')
52
+ 'foo'.should.equal 'foo'
53
+ 'bar'.should.not.equal('foo')
54
+ 'bar'.should.not.equal 'foo'
55
+ end
56
+
57
+ describe 'with nested describe'
58
+ it 'should work'
59
+ true.should.be_true
60
+ end
61
+
62
+ it 'should still allow literal javascript outside of blocks'
63
+ n.should.eql 10
64
+ end
65
+
66
+ describe 'nested again'
67
+ it 'should still work'
68
+ true.should.be_true
69
+ end
70
+ end
71
+ end
72
+
73
+ describe 'before / after blocks'
74
+ var n, o
75
+
76
+ before
77
+ n = 1
78
+ end
79
+
80
+ after
81
+ n = 0
82
+ end
83
+
84
+ it 'should work'
85
+ n.should.eql 1
86
+ n++
87
+ end
88
+
89
+ it 'should persist'
90
+ n.should.eql 2
91
+ end
92
+
93
+ describe 'with nested describe'
94
+ it 'should be accessable'
95
+ n.should.eql 0
96
+ end
97
+ end
98
+ end
99
+
100
+ describe 'before_each / after_each blocks'
101
+ before_each
102
+ n = 1
103
+ end
104
+
105
+ after_each
106
+ o = 2
107
+ end
108
+
109
+ it 'should work'
110
+ n.should.eql 1
111
+ n = 2
112
+ end
113
+
114
+ it 'should not persist'
115
+ n.should.eql 1
116
+ o.should.eql 2
117
+ end
118
+
119
+ describe 'with nested describe'
120
+ it 'should be accessable'
121
+ n.should.eql 1
122
+ o.should.eql 2
123
+ end
124
+ end
125
+ end
126
+
127
+ end