gusto 1.0.0.beta11 → 1.0.0.beta12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/Spec/DSL.coffee +19 -5
- data/lib/Spec/DelayedExpectation.coffee +6 -1
- data/lib/Spec/Matchers.coffee +31 -21
- data/lib/Spec/MethodStub/PossibleCall.coffee +5 -0
- data/lib/Spec/MethodStub.coffee +7 -0
- data/lib/Spec/ObjectDSL.coffee +4 -8
- data/lib/Spec/Util.coffee +19 -27
- data/lib/Spec.coffee +0 -1
- data/lib/gusto/version.rb +1 -1
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f4d920e872884a37580166a39e194890f412ea4
|
4
|
+
data.tar.gz: 63557788ec1dbf8881303ba618a33c343c64ad26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a4f789b06d7cd4b905c923e32ae4ea2c84bd7e0b97e0700f1a14ad20055928cafeb7f47048d7fd24ff066d503bce21fef85939a26df3b1bc2b54ce96d7d8eef
|
7
|
+
data.tar.gz: 207fe7eff5dd1b2d3fdda6fed3adecde97118971032d90b7fd6f3b573d298fa501d345c83782ed518814e9b0c432d1a9899b7338f37122721b3928ca9a8477a3
|
data/lib/Spec/DSL.coffee
CHANGED
@@ -9,14 +9,28 @@ window.Spec.DSL = DSL =
|
|
9
9
|
before: (action) ->
|
10
10
|
@__spec_definingSuite.filter null, action
|
11
11
|
|
12
|
-
#
|
12
|
+
# Sets up an expected result for this test
|
13
13
|
expect: (object) ->
|
14
|
+
# Specifies that the object should receive a positive response from a
|
15
|
+
# matcher function
|
14
16
|
to: (matcher) ->
|
15
|
-
|
16
|
-
throw new Spec.ExpectationError("expected #{
|
17
|
+
match = matcher(object)
|
18
|
+
throw new Spec.ExpectationError("expected #{match.description}") unless match.result
|
19
|
+
|
20
|
+
# Specifies that the object should receive a negative response
|
17
21
|
notTo: (matcher) ->
|
18
|
-
|
19
|
-
throw new Spec.ExpectationError("expected not #{
|
22
|
+
match = matcher(object)
|
23
|
+
throw new Spec.ExpectationError("expected not #{match.description}") if match.result
|
24
|
+
|
25
|
+
# Sets up a stub on the given method, with a delayed expectation that this
|
26
|
+
# stub method be called
|
27
|
+
toReceive: (method) ->
|
28
|
+
Spec.MethodStub.stub(object, method).expect()
|
29
|
+
|
30
|
+
# Sets up a stub on the given method, with a delayed expectation that this
|
31
|
+
# stub method is never called
|
32
|
+
notToReceive: (method) ->
|
33
|
+
Spec.MethodStub.stub(object, method).expect().never()
|
20
34
|
|
21
35
|
# Syntactic sugar to create a before method that prepares a variable
|
22
36
|
#
|
@@ -14,7 +14,7 @@ class window.Spec.DelayedExpectation
|
|
14
14
|
|
15
15
|
@assert: ->
|
16
16
|
asserting = @expectations
|
17
|
-
@
|
17
|
+
@reset()
|
18
18
|
for expectation in asserting
|
19
19
|
expectation.assert()
|
20
20
|
|
@@ -25,6 +25,11 @@ class window.Spec.DelayedExpectation
|
|
25
25
|
@met = 0
|
26
26
|
@desired = 1
|
27
27
|
|
28
|
+
# Specifies that this expectation should not be met
|
29
|
+
never: ->
|
30
|
+
@desired = 0
|
31
|
+
this
|
32
|
+
|
28
33
|
# Specifies that this expectation must be met twice to count
|
29
34
|
# as a success.
|
30
35
|
twice: ->
|
data/lib/Spec/Matchers.coffee
CHANGED
@@ -4,23 +4,25 @@ window.Spec.Matchers =
|
|
4
4
|
# Tests if matched value === expected value
|
5
5
|
be: (expected) ->
|
6
6
|
(value) ->
|
7
|
-
|
7
|
+
result: value is expected
|
8
|
+
description: "be #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}"
|
8
9
|
|
9
10
|
# Tests that value type matches specified class
|
10
11
|
beA: (klass) ->
|
11
12
|
switch klass
|
12
|
-
when Boolean then _haveType 'boolean'
|
13
|
-
when Function then _haveType 'function'
|
14
|
-
when Number then _haveType 'number'
|
15
|
-
when String then _haveType 'string'
|
16
|
-
when Object then _haveType 'object'
|
13
|
+
when Boolean then _haveType 'boolean', klass
|
14
|
+
when Function then _haveType 'function', klass
|
15
|
+
when Number then _haveType 'number', klass
|
16
|
+
when String then _haveType 'string', klass
|
17
|
+
when Object then _haveType 'object', klass
|
17
18
|
else _beAnInstanceOf klass
|
18
19
|
|
19
20
|
# Tests if matched value == expected value
|
20
21
|
equal: (expected) ->
|
21
22
|
(value) ->
|
22
|
-
|
23
|
-
|
23
|
+
result: String(value) == String(expected)
|
24
|
+
description: "equal “#{String expected}”, actual “#{String value}” – #{$.trim diffString(String(value), String(expected))}"
|
25
|
+
|
24
26
|
# All-purpose inclusion matcher
|
25
27
|
include: (expected) ->
|
26
28
|
if expected instanceof Array
|
@@ -28,7 +30,8 @@ window.Spec.Matchers =
|
|
28
30
|
match = true
|
29
31
|
for test in expected
|
30
32
|
match = false unless (value.indexOf && value.indexOf(test) >= 0) || value[test]?
|
31
|
-
|
33
|
+
result: match
|
34
|
+
description: "include #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}"
|
32
35
|
else if typeof expected == 'object'
|
33
36
|
(value) ->
|
34
37
|
missing = {}
|
@@ -38,10 +41,11 @@ window.Spec.Matchers =
|
|
38
41
|
unless value[test] isnt undefined && String(value[test]) == String(expected[test])
|
39
42
|
match = false
|
40
43
|
missing[test] = expected[test]
|
41
|
-
|
44
|
+
result: match
|
45
|
+
description: "include #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}, missing #{Spec.Util.inspect missing}"
|
42
46
|
else
|
43
47
|
include([expected])
|
44
|
-
|
48
|
+
|
45
49
|
# Tests if a function causes an error to be thrown when called
|
46
50
|
throwError: (message) ->
|
47
51
|
(fn) ->
|
@@ -50,20 +54,26 @@ window.Spec.Matchers =
|
|
50
54
|
fn()
|
51
55
|
catch e
|
52
56
|
thrown = e.message
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
if thrown
|
58
|
+
result: thrown == message
|
59
|
+
description: "throw an error with message “#{String thrown}”, actual message “#{String message}” – #{$.trim diffString(String(thrown), String(message))}"
|
60
|
+
else
|
61
|
+
result: false
|
62
|
+
description: "throw an error with message “#{message}”, no error thrown"
|
58
63
|
|
59
|
-
# Tests a value type using typeof
|
60
|
-
_haveType: (type) ->
|
61
|
-
(value)
|
62
|
-
|
64
|
+
# Tests a value type using typeof, falling back to instanceof if type is an object
|
65
|
+
_haveType: (type, klass) ->
|
66
|
+
(value) =>
|
67
|
+
if typeof value is 'object'
|
68
|
+
@_beAnInstanceOf(klass)(value)
|
69
|
+
else
|
70
|
+
result: typeof value is type
|
71
|
+
description: "to have type “#{type}”, actual “#{typeof value}”"
|
63
72
|
|
64
73
|
# Tests if matched value is an instance of class
|
65
74
|
_beAnInstanceOf: (klass) ->
|
66
75
|
(value) ->
|
67
|
-
|
76
|
+
result: value instanceof klass
|
77
|
+
description: "#{value} to be an instance of “#{klass.name || klass}”, actually “#{Spec.Util.inspectClass value}"
|
68
78
|
|
69
79
|
window.Spec.Matchers.beAn = window.Spec.Matchers.beA
|
@@ -31,6 +31,11 @@ class window.Spec.MethodStub.PossibleCall
|
|
31
31
|
@expectation ||= Spec.DelayedExpectation.add('get called')
|
32
32
|
this
|
33
33
|
|
34
|
+
# Delegates to expectation
|
35
|
+
never: ->
|
36
|
+
@expectation.never()
|
37
|
+
this
|
38
|
+
|
34
39
|
# Delegates to expectation
|
35
40
|
twice: ->
|
36
41
|
@expectation.twice()
|
data/lib/Spec/MethodStub.coffee
CHANGED
@@ -13,6 +13,13 @@ class window.Spec.MethodStub
|
|
13
13
|
while stub = @stubs.pop()
|
14
14
|
stub.remove()
|
15
15
|
|
16
|
+
@stub: (object, method) ->
|
17
|
+
stub = if object[method] && object[method]._stub
|
18
|
+
object[method]._stub
|
19
|
+
else
|
20
|
+
new Spec.MethodStub(object, method)
|
21
|
+
stub.possibleCall()
|
22
|
+
|
16
23
|
constructor: (@object, @method) ->
|
17
24
|
@possibleCalls = []
|
18
25
|
@_replaceMethodOnObject()
|
data/lib/Spec/ObjectDSL.coffee
CHANGED
@@ -3,11 +3,7 @@ window.Spec ||= {}
|
|
3
3
|
window.Spec.ObjectDSL =
|
4
4
|
# Stubs a method on object
|
5
5
|
stub: (method) ->
|
6
|
-
stub
|
7
|
-
@[method]._stub
|
8
|
-
else
|
9
|
-
new Spec.MethodStub(this, method)
|
10
|
-
stub.possibleCall()
|
6
|
+
Spec.MethodStub.stub(this, method)
|
11
7
|
|
12
8
|
# Tests for a positive match
|
13
9
|
should: (matcher) ->
|
@@ -19,8 +15,8 @@ window.Spec.ObjectDSL =
|
|
19
15
|
|
20
16
|
# Creates a stub method with an expectation
|
21
17
|
shouldReceive: (method) ->
|
22
|
-
|
18
|
+
expect(this).toReceive method
|
23
19
|
|
24
20
|
# Creates a stub method, with an expectation of no calls
|
25
|
-
shouldNotReceive: (
|
26
|
-
|
21
|
+
shouldNotReceive: (method) ->
|
22
|
+
expect(this).notToReceive method
|
data/lib/Spec/Util.coffee
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
window.Spec ||= {}
|
2
2
|
|
3
3
|
window.Spec.Util =
|
4
|
+
# Extends one object with all properties from one or more other objects.
|
5
|
+
# This differs from extend methods in frameworks like jQuery and Underscore
|
6
|
+
# in that it will not overwrite properties that already exist
|
4
7
|
extend: (object, extensions...) ->
|
5
8
|
for extension in extensions
|
6
9
|
for key, value of extension
|
7
|
-
object[key]
|
8
|
-
|
9
|
-
unextend: (object, extensions...) ->
|
10
|
-
for extension in extensions
|
11
|
-
for key, value of extension
|
12
|
-
delete object[key]
|
10
|
+
object[key] ||= value
|
11
|
+
object
|
13
12
|
|
14
13
|
reference: (value) ->
|
15
14
|
if typeof value is 'function'
|
@@ -47,17 +46,7 @@ window.Spec.Util =
|
|
47
46
|
|
48
47
|
# Returns an HTML representation of any kind of object
|
49
48
|
inspect: (object) ->
|
50
|
-
if object
|
51
|
-
s = '['
|
52
|
-
first = true
|
53
|
-
for item in object
|
54
|
-
if first
|
55
|
-
first = false
|
56
|
-
else
|
57
|
-
first += ', '
|
58
|
-
s += "“#{@escape(String(item))}”"
|
59
|
-
s + ']'
|
60
|
-
else if object is null
|
49
|
+
if object is null
|
61
50
|
'null'
|
62
51
|
else if object is undefined
|
63
52
|
'undefined'
|
@@ -65,21 +54,24 @@ window.Spec.Util =
|
|
65
54
|
'true'
|
66
55
|
else if object is false
|
67
56
|
'false'
|
57
|
+
else if object instanceof Array
|
58
|
+
items = for item in object
|
59
|
+
Spec.Util.inspect item
|
60
|
+
"[#{items.join ', '}]"
|
68
61
|
else if typeof object == 'object'
|
69
|
-
|
70
|
-
|
71
|
-
for key of object
|
62
|
+
properties = []
|
63
|
+
for key, value of object
|
72
64
|
# Access hasOwnProperty through Object.prototype to work around bug
|
73
65
|
# in IE6/7/8 when calling hasOwnProperty on a DOM element
|
74
66
|
if Object.prototype.hasOwnProperty.call(object, key)
|
75
|
-
|
76
|
-
|
77
|
-
else
|
78
|
-
s += ", "
|
79
|
-
s += @escape(key) + ': “' + @escape(String(object[key])) + '”'
|
80
|
-
s + "}"
|
67
|
+
properties.push Spec.Util.escape(key) + ': ' + Spec.Util.inspect(value)
|
68
|
+
"{#{properties.join ', '}}"
|
81
69
|
else
|
82
|
-
"“#{
|
70
|
+
"“#{Spec.Util.escape(object)}”"
|
71
|
+
|
72
|
+
# Gets the class name of an object using JavaScript magic
|
73
|
+
inspectClass: (object) ->
|
74
|
+
Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]
|
83
75
|
|
84
76
|
# Escapes text for HTML
|
85
77
|
escape: (string) ->
|
data/lib/Spec.coffee
CHANGED
data/lib/gusto/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gusto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Cohen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coffee-script
|
@@ -130,36 +130,36 @@ executables:
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
-
- assets/test_results.sass
|
134
133
|
- assets/colors.sass
|
135
|
-
- assets/spec.css.sass
|
136
134
|
- assets/result_summary.sass
|
135
|
+
- assets/spec.css.sass
|
136
|
+
- assets/test_results.sass
|
137
137
|
- bin/gusto
|
138
|
-
- lib/Spec.coffee
|
139
|
-
- lib/gusto.rb
|
140
138
|
- lib/HtmlReport.coffee
|
141
|
-
- lib/
|
142
|
-
- lib/
|
143
|
-
- lib/
|
144
|
-
- lib/gusto/server.rb
|
145
|
-
- lib/gusto/cli_renderer.rb
|
146
|
-
- lib/gusto/runner.rb
|
139
|
+
- lib/Spec.coffee
|
140
|
+
- lib/Spec/DSL.coffee
|
141
|
+
- lib/Spec/DelayedExpectation.coffee
|
147
142
|
- lib/Spec/Matchers.coffee
|
148
|
-
- lib/Spec/Mock.coffee
|
149
|
-
- lib/Spec/MethodStub/PossibleCall.coffee
|
150
143
|
- lib/Spec/MethodStub.coffee
|
144
|
+
- lib/Spec/MethodStub/PossibleCall.coffee
|
145
|
+
- lib/Spec/Mock.coffee
|
151
146
|
- lib/Spec/ObjectDSL.coffee
|
152
|
-
- lib/Spec/DSL.coffee
|
153
147
|
- lib/Spec/Report.coffee
|
154
|
-
- lib/Spec/Test.coffee
|
155
148
|
- lib/Spec/RootSuite.coffee
|
156
|
-
- lib/Spec/Util.coffee
|
157
149
|
- lib/Spec/Suite.coffee
|
158
|
-
- lib/Spec/
|
150
|
+
- lib/Spec/Test.coffee
|
151
|
+
- lib/Spec/Util.coffee
|
152
|
+
- lib/gusto.rb
|
153
|
+
- lib/gusto/cli_renderer.rb
|
154
|
+
- lib/gusto/configuration.rb
|
155
|
+
- lib/gusto/runner.rb
|
156
|
+
- lib/gusto/server.rb
|
157
|
+
- lib/gusto/sprockets.rb
|
158
|
+
- lib/gusto/version.rb
|
159
159
|
- phantom/headless_runner.js
|
160
|
-
- public/jsdiff.js
|
161
160
|
- public/ie.js
|
162
161
|
- public/jquery-1.10.2.js
|
162
|
+
- public/jsdiff.js
|
163
163
|
- public/stacktrace.js
|
164
164
|
- views/index.slim
|
165
165
|
homepage: https://github.com/tobico/gusto
|
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
182
|
version: 1.3.1
|
183
183
|
requirements: []
|
184
184
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.0
|
185
|
+
rubygems_version: 2.2.0
|
186
186
|
signing_key:
|
187
187
|
specification_version: 4
|
188
188
|
summary: Coffeescript testing framework
|