spectus 2.3.1 → 2.4.0
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
- checksums.yaml.gz.sig +2 -1
- data/README.md +4 -4
- data/VERSION.semver +1 -1
- data/checksum/spectus-2.3.1.gem.sha512 +1 -0
- data/lib/spectus/challenge.rb +17 -10
- data/lib/spectus/expectation_target.rb +25 -25
- data/lib/spectus/level/base.rb +31 -45
- data/lib/spectus/level/high.rb +1 -1
- data/lib/spectus/level/low.rb +1 -1
- data/lib/spectus/level/medium.rb +1 -1
- data/lib/spectus/result/base.rb +8 -17
- data/lib/spectus/result/fail.rb +2 -2
- data/lib/spectus/result/pass.rb +2 -2
- data/lib/spectus/sandbox.rb +15 -8
- data/lib/spectus.rb +3 -3
- data/spectus.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +5 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbcd04aaa8066c8ff3195c36b283169b10530296
|
4
|
+
data.tar.gz: b68284b11d486d8a0cec19bcdecd65adcf7bb674
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74cf34427dc5b39763a3bfb2f32469ff0e78013e54afb5218b3ac3555ff8357cd95fc0d097862ff4108beeaeab4a63746291865399e854732b84750a0bb912d1
|
7
|
+
data.tar.gz: 4ca5afde6ac2c85272caa1256ef4847d305f4aa045ed6369d9acc85bdd1aab192c9ec3bbc8538f9b68e2fa571b0ab2ccdd3831ac83013c1fba79fa8263207c4c
|
checksums.yaml.gz.sig
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
�-�J�},�6����X\7:�:BE)9�:��)I�=dò���e��X�!+��U�~ ������Y��s����X_q���,sC��8�/��9w��ى�;p�Y�����i�%�aY��%=��&��?�K�m�\-"r&��',��,uC�o �Ȇ0[�PB���?�ߟPft?z��)��k<��`q��u�[K�f2������+��i�t��)��a��g�#d�Oe`���:]���
|
2
|
+
)�+� ���� P�
|
data/README.md
CHANGED
@@ -68,7 +68,7 @@ Given the `"ルビー"` object, when it receives `valid_encoding?` method, then
|
|
68
68
|
|
69
69
|
```ruby
|
70
70
|
Spectus.this { 'ルビー'.valid_encoding? }.MUST :BeTrue
|
71
|
-
# => #<Spectus::Result::Pass:
|
71
|
+
# => #<Spectus::Result::Pass:0x007fec19b1d638 @message="Pass: Expected true to be true.", @subject=#<Proc:0x007fec19b1e470@(irb):1>, @challenge=#<Spectus::Challenge:0x007fec19b1e3a8 @method=:call, @args=[]>, @actual=true, @expected=:BeTrue, @got=true, @error=nil, @level=:High, @negate=false, @valid=true>
|
72
72
|
```
|
73
73
|
|
74
74
|
The result of the test shows that the spec passed.
|
@@ -79,7 +79,7 @@ Given the `"foo"` object, when it receives `length` method, then it **MUST NOT**
|
|
79
79
|
|
80
80
|
```ruby
|
81
81
|
Spectus.this { 'foo'.length }.MUST_NOT RaiseException: NoMethodError
|
82
|
-
# => #<Spectus::Result::Pass:
|
82
|
+
# => #<Spectus::Result::Pass:0x007fec193a0fe0 @message="Pass: Expected 3 not to raise exception NoMethodError.", @subject=#<Proc:0x007fec193a1a08@(irb):2>, @challenge=#<Spectus::Challenge:0x007fec193a19b8 @method=:call, @args=[]>, @actual=3, @expected={:RaiseException=>NoMethodError}, @got=true, @error=nil, @level=:High, @negate=true, @valid=true>
|
83
83
|
```
|
84
84
|
|
85
85
|
The result of the test shows that the spec passed.
|
@@ -90,7 +90,7 @@ Given the `BasicObject` object, when it receives `superclass` method, then it **
|
|
90
90
|
|
91
91
|
```ruby
|
92
92
|
Spectus.this { BasicObject.superclass }.SHOULD Equal: NilClass
|
93
|
-
# => #<Spectus::Result::Pass:
|
93
|
+
# => #<Spectus::Result::Pass:0x007fec193b2ec0 @message="Info: Expected nil to equal NilClass.", @subject=#<Proc:0x007fec193b37f8@(irb):3>, @challenge=#<Spectus::Challenge:0x007fec193b37a8 @method=:call, @args=[]>, @actual=nil, @expected={:Equal=>NilClass}, @got=false, @error=nil, @level=:Medium, @negate=false, @valid=false>
|
94
94
|
```
|
95
95
|
|
96
96
|
Instead of the expected `NilClass` class, its sole instance (which is `nil`) was returned.
|
@@ -115,7 +115,7 @@ Given the `"foo"` object, when it receives `blank?` method, then it **MAY** be `
|
|
115
115
|
|
116
116
|
```ruby
|
117
117
|
Spectus.this { 'foo'.blank? }.MAY :BeFalse
|
118
|
-
# => #<Spectus::Result::Pass:
|
118
|
+
# => #<Spectus::Result::Pass:0x007fec19423af8 @message="Info: undefined method `blank?' for \"foo\":String (NoMethodError).", @subject=#<Proc:0x007fec193f0270@(irb):5>, @challenge=#<Spectus::Challenge:0x007fec193f0220 @method=:call, @args=[]>, @actual=nil, @expected=:BeFalse, @got=nil, @error=#<NoMethodError: undefined method `blank?' for "foo":String>, @level=:Low, @negate=false, @valid=false>
|
119
119
|
```
|
120
120
|
|
121
121
|
The optional `blank?` method is not implemented (unlike in [Ruby on Rails](http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F), for instance), so the result of the test shows that the spec passed.
|
data/VERSION.semver
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
@@ -0,0 +1 @@
|
|
1
|
+
c73bf4fc985ec06dd7876d394d32c27028e7475d77262e1f0bd4a57e688af327e4658bdc926662a43895aaf8b9b4d56404cd0720ef90c9b69090f27505863f9d
|
data/lib/spectus/challenge.rb
CHANGED
@@ -6,21 +6,28 @@ module Spectus
|
|
6
6
|
class Challenge
|
7
7
|
# Initialize the challenge class.
|
8
8
|
#
|
9
|
-
# @param [#to_sym]
|
10
|
-
# @param [Array]
|
11
|
-
def initialize(
|
12
|
-
@
|
9
|
+
# @param method [#to_sym] The identifier of a method.
|
10
|
+
# @param args [Array] The arguments of the method.
|
11
|
+
def initialize(method, *args)
|
12
|
+
@method = method.to_sym
|
13
13
|
@args = args
|
14
14
|
end
|
15
15
|
|
16
|
-
#
|
16
|
+
# @param object [#public_send] The subject of the challenge.
|
17
17
|
#
|
18
|
-
# @return [
|
19
|
-
|
18
|
+
# @return [BasicObject] The result of the challenge.
|
19
|
+
def to(object)
|
20
|
+
object.public_send(@method, *@args)
|
21
|
+
end
|
20
22
|
|
21
|
-
#
|
23
|
+
# Properties of the challenge.
|
22
24
|
#
|
23
|
-
# @return [
|
24
|
-
|
25
|
+
# @return [Hash] The properties of the challenge.
|
26
|
+
def to_h
|
27
|
+
{
|
28
|
+
method: @method,
|
29
|
+
args: @args
|
30
|
+
}
|
31
|
+
end
|
25
32
|
end
|
26
33
|
end
|
@@ -11,10 +11,10 @@ module Spectus
|
|
11
11
|
class ExpectationTarget < BasicObject
|
12
12
|
# Create a new expection target
|
13
13
|
#
|
14
|
-
# @param subject [Proc]
|
14
|
+
# @param subject [Proc] The value which is compared with the expected value.
|
15
15
|
def initialize(&subject)
|
16
16
|
@subject = subject
|
17
|
-
@
|
17
|
+
@challenges = [Challenge.new(:call)]
|
18
18
|
end
|
19
19
|
|
20
20
|
# @!attribute [r] subject
|
@@ -22,10 +22,10 @@ module Spectus
|
|
22
22
|
# @return [BasicObject] The front object to be tested.
|
23
23
|
attr_reader :subject
|
24
24
|
|
25
|
-
# @!attribute [r]
|
25
|
+
# @!attribute [r] challenges
|
26
26
|
#
|
27
|
-
# @return [
|
28
|
-
attr_reader :
|
27
|
+
# @return [Array] The challenges to call on the subject.
|
28
|
+
attr_reader :challenges
|
29
29
|
|
30
30
|
# This word, or the terms "REQUIRED" or "SHALL", mean that the
|
31
31
|
# definition is an absolute requirement of the specification.
|
@@ -33,11 +33,11 @@ module Spectus
|
|
33
33
|
# @example _Absolute requirement_ definition
|
34
34
|
# this { 'foo'.upcase }.MUST Eql: 'FOO'
|
35
35
|
#
|
36
|
-
# @param
|
36
|
+
# @param req [Array, Hash, Symbol]
|
37
37
|
#
|
38
|
-
# @return [Result::Fail, Result::Pass]
|
39
|
-
def MUST(
|
40
|
-
RequirementLevel::High.new(
|
38
|
+
# @return [Result::Fail, Result::Pass] Report if the spec pass or fail.
|
39
|
+
def MUST(req)
|
40
|
+
RequirementLevel::High.new(req, false, subject, *challenges).result
|
41
41
|
end
|
42
42
|
|
43
43
|
# This phrase, or the phrase "SHALL NOT", mean that the
|
@@ -46,11 +46,11 @@ module Spectus
|
|
46
46
|
# @example _Absolute prohibition_ definition
|
47
47
|
# this { 'foo'.size }.MUST_NOT Equal: 42
|
48
48
|
#
|
49
|
-
# @param
|
49
|
+
# @param req [Array, Hash, Symbol]
|
50
50
|
#
|
51
|
-
# @return [Result::Fail, Result::Pass]
|
52
|
-
def MUST_NOT(
|
53
|
-
RequirementLevel::High.new(
|
51
|
+
# @return [Result::Fail, Result::Pass] Report if the spec pass or fail.
|
52
|
+
def MUST_NOT(req)
|
53
|
+
RequirementLevel::High.new(req, true, subject, *challenges).result
|
54
54
|
end
|
55
55
|
|
56
56
|
# This word, or the adjective "RECOMMENDED", mean that there
|
@@ -61,11 +61,11 @@ module Spectus
|
|
61
61
|
# @example _Recommended_ definition
|
62
62
|
# this { 'foo'.valid_encoding? }.SHOULD Equal: true
|
63
63
|
#
|
64
|
-
# @param
|
64
|
+
# @param req [Array, Hash, Symbol]
|
65
65
|
#
|
66
|
-
# @return [Result::Fail, Result::Pass]
|
67
|
-
def SHOULD(
|
68
|
-
RequirementLevel::Medium.new(
|
66
|
+
# @return [Result::Fail, Result::Pass] Report if the spec pass or fail.
|
67
|
+
def SHOULD(req)
|
68
|
+
RequirementLevel::Medium.new(req, false, subject, *challenges).result
|
69
69
|
end
|
70
70
|
|
71
71
|
# This phrase, or the phrase "NOT RECOMMENDED" mean that
|
@@ -77,11 +77,11 @@ module Spectus
|
|
77
77
|
# @example _Not recommended_ definition
|
78
78
|
# this { ''.blank? }.SHOULD_NOT RaiseException: NoMethodError
|
79
79
|
#
|
80
|
-
# @param
|
80
|
+
# @param req [Array, Hash, Symbol]
|
81
81
|
#
|
82
|
-
# @return [Result::Fail, Result::Pass]
|
83
|
-
def SHOULD_NOT(
|
84
|
-
RequirementLevel::Medium.new(
|
82
|
+
# @return [Result::Fail, Result::Pass] Report if the spec pass or fail.
|
83
|
+
def SHOULD_NOT(req)
|
84
|
+
RequirementLevel::Medium.new(req, true, subject, *challenges).result
|
85
85
|
end
|
86
86
|
|
87
87
|
# This word, or the adjective "OPTIONAL", mean that an item is
|
@@ -99,11 +99,11 @@ module Spectus
|
|
99
99
|
# @example _Optional_ definition
|
100
100
|
# this { 'foo'.bar }.MAY Match: /^foo$/
|
101
101
|
#
|
102
|
-
# @param
|
102
|
+
# @param req [Array, Hash, Symbol]
|
103
103
|
#
|
104
|
-
# @return [Result::Fail, Result::Pass]
|
105
|
-
def MAY(
|
106
|
-
RequirementLevel::Low.new(
|
104
|
+
# @return [Result::Fail, Result::Pass] Report if the spec pass or fail.
|
105
|
+
def MAY(req)
|
106
|
+
RequirementLevel::Low.new(req, false, subject, *challenges).result
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
data/lib/spectus/level/base.rb
CHANGED
@@ -13,30 +13,29 @@ module Spectus
|
|
13
13
|
class Base
|
14
14
|
# Initialize the requirement level class.
|
15
15
|
#
|
16
|
-
# @param
|
17
|
-
#
|
18
|
-
# @param
|
19
|
-
# @param
|
20
|
-
|
21
|
-
|
22
|
-
@definition = definition
|
16
|
+
# @param req [Hash, Symbol] The definition of the expected value.
|
17
|
+
# @param negate [Boolean] Evaluate to a negative assertion.
|
18
|
+
# @param subject [#object_id] The front object to test.
|
19
|
+
# @param challenges [Array] A list of challenges.
|
20
|
+
def initialize(req, negate, subject, *challenges)
|
21
|
+
@req = req
|
23
22
|
@negate = negate
|
24
23
|
@subject = subject
|
25
|
-
@
|
24
|
+
@challenges = challenges
|
26
25
|
end
|
27
26
|
|
28
27
|
protected
|
29
28
|
|
30
29
|
# @param state [Sandbox] The sandbox that tested the code.
|
31
30
|
#
|
32
|
-
# @return [Result::Pass]
|
31
|
+
# @return [Result::Pass] Pass the spec.
|
33
32
|
def pass!(state)
|
34
33
|
Result::Pass.new(message(state, true), *result_signature(state))
|
35
34
|
end
|
36
35
|
|
37
36
|
# @param state [Sandbox] The sandbox that tested the code.
|
38
37
|
#
|
39
|
-
# @raise [Result::Fail]
|
38
|
+
# @raise [Result::Fail] Fail the spec.
|
40
39
|
def fail!(state)
|
41
40
|
fail Result::Fail.new(message(state, false), *result_signature(state)),
|
42
41
|
message(state, false), caller[2..-1]
|
@@ -44,14 +43,13 @@ module Spectus
|
|
44
43
|
|
45
44
|
# @param state [Sandbox] The sandbox that tested the code.
|
46
45
|
#
|
47
|
-
# @return [Array]
|
46
|
+
# @return [Array] List of parameters.
|
48
47
|
def result_signature(state)
|
49
48
|
[
|
50
49
|
@subject,
|
51
|
-
|
52
|
-
@challenge.args,
|
50
|
+
state.last_challenge,
|
53
51
|
state.actual,
|
54
|
-
@
|
52
|
+
@req,
|
55
53
|
state.got,
|
56
54
|
state.exception,
|
57
55
|
level,
|
@@ -60,44 +58,35 @@ module Spectus
|
|
60
58
|
]
|
61
59
|
end
|
62
60
|
|
63
|
-
# @return [Symbol]
|
61
|
+
# @return [Symbol] The requirement level.
|
64
62
|
def level
|
65
63
|
self.class.name.split('::').last.to_sym
|
66
64
|
end
|
67
65
|
|
68
|
-
# @return [Sandbox]
|
66
|
+
# @return [Sandbox] The sandbox.
|
69
67
|
def sandbox
|
70
|
-
Sandbox.new(@
|
71
|
-
*@challenge.args)
|
68
|
+
Sandbox.new(@req, @negate, @subject, *@challenges)
|
72
69
|
end
|
73
70
|
|
74
71
|
# @param state [Sandbox] The sandbox that tested the code.
|
75
72
|
# @param result [Boolean] The result of the test.
|
76
73
|
#
|
77
|
-
# @return [String]
|
74
|
+
# @return [String] The message that describe the state.
|
78
75
|
def message(state, result)
|
79
76
|
"#{title(state, result)}: #{summary(state)}."
|
80
77
|
end
|
81
78
|
|
82
79
|
# The title of the state.
|
83
80
|
#
|
84
|
-
# @param state
|
81
|
+
# @param state [Sandbox] The sandbox that tested the code.
|
85
82
|
# @param result [Boolean] The result of the test.
|
86
83
|
#
|
87
|
-
# @return [String]
|
84
|
+
# @return [String] The title of the state.
|
88
85
|
def title(state, result)
|
89
86
|
if result
|
90
|
-
|
91
|
-
'Pass'
|
92
|
-
else
|
93
|
-
'Info'
|
94
|
-
end
|
87
|
+
state.got ? 'Pass' : 'Info'
|
95
88
|
else
|
96
|
-
|
97
|
-
'Failure'
|
98
|
-
else
|
99
|
-
'Error'
|
100
|
-
end
|
89
|
+
state.exception.nil? ? 'Failure' : 'Error'
|
101
90
|
end
|
102
91
|
end
|
103
92
|
|
@@ -105,30 +94,27 @@ module Spectus
|
|
105
94
|
#
|
106
95
|
# @param state [Sandbox] The sandbox that tested the code.
|
107
96
|
#
|
108
|
-
# @return [String]
|
97
|
+
# @return [String] The summary of the state.
|
109
98
|
def summary(state)
|
110
99
|
if state.valid? || state.exception.nil?
|
111
100
|
'Expected ' + state.actual.inspect + (@negate ? ' not ' : ' ') +
|
112
|
-
'to ' + if @
|
113
|
-
readable(@
|
114
|
-
|
101
|
+
'to ' + if @req.is_a?(Hash)
|
102
|
+
readable(@req.keys.first) + ' ' +
|
103
|
+
@req.values.first.inspect
|
115
104
|
else
|
116
|
-
readable(@
|
105
|
+
readable(@req)
|
117
106
|
end
|
118
107
|
else
|
119
108
|
state.exception.message
|
120
|
-
end +
|
121
|
-
''
|
122
|
-
else
|
123
|
-
" (#{state.exception.class})"
|
124
|
-
end
|
109
|
+
end + (state.exception.nil? ? '' : " (#{state.exception.class})")
|
125
110
|
end
|
126
111
|
|
127
|
-
# @param
|
112
|
+
# @param st [#to_s] A UpperCamelCase string.
|
128
113
|
#
|
129
|
-
# @return [String]
|
130
|
-
def readable(
|
131
|
-
|
114
|
+
# @return [String] The snake_case string.
|
115
|
+
def readable(st)
|
116
|
+
st.to_s
|
117
|
+
.gsub(/::/, '/')
|
132
118
|
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
133
119
|
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
134
120
|
.tr('-_', ' ')
|
data/lib/spectus/level/high.rb
CHANGED
@@ -9,7 +9,7 @@ module Spectus
|
|
9
9
|
class High < Base
|
10
10
|
# Evaluate the expectation.
|
11
11
|
#
|
12
|
-
# @return [Result::Fail, Result::Pass]
|
12
|
+
# @return [Result::Fail, Result::Pass] Report if the high expectation
|
13
13
|
# pass or fail.
|
14
14
|
def result
|
15
15
|
state = sandbox
|
data/lib/spectus/level/low.rb
CHANGED
@@ -9,7 +9,7 @@ module Spectus
|
|
9
9
|
class Low < Base
|
10
10
|
# Evaluate the expectation.
|
11
11
|
#
|
12
|
-
# @return [Result::Fail, Result::Pass]
|
12
|
+
# @return [Result::Fail, Result::Pass] Report if the low expectation
|
13
13
|
# pass or fail.
|
14
14
|
def result
|
15
15
|
state = sandbox
|
data/lib/spectus/level/medium.rb
CHANGED
@@ -9,7 +9,7 @@ module Spectus
|
|
9
9
|
class Medium < Base
|
10
10
|
# Evaluate the expectation.
|
11
11
|
#
|
12
|
-
# @return [Result::Fail, Result::Pass]
|
12
|
+
# @return [Result::Fail, Result::Pass] Report if the medium expectation
|
13
13
|
# pass or fail.
|
14
14
|
def result
|
15
15
|
state = sandbox
|
data/lib/spectus/result/base.rb
CHANGED
@@ -11,25 +11,22 @@ module Spectus
|
|
11
11
|
#
|
12
12
|
# @param message [String] It is describing the actual/error value.
|
13
13
|
# @param subject [#object_id] The untrusted object to be tested.
|
14
|
-
# @param challenge [
|
15
|
-
# @param context [Array] Parameters of the challenge.
|
14
|
+
# @param challenge [Challenge] The method to call on the subject.
|
16
15
|
# @param actual [#object_id] The value that the subject return through
|
17
16
|
# its challenge.
|
18
|
-
# @param expected [
|
19
|
-
# value.
|
17
|
+
# @param expected [Hash, Symbol] The definition of the expected value.
|
20
18
|
# @param got [#object_id] The result of the boolean comparison
|
21
19
|
# between the actual value and the expected value.
|
22
20
|
# @param error [#exception, nil] Any possible raised exception.
|
23
21
|
# @param level [:High, :Medium, :Low] The level of the expectation.
|
24
22
|
# @param negate [Boolean] Evaluate to a negative assertion.
|
25
23
|
# @param valid [Boolean] Report if the test was true or false.
|
26
|
-
def initialize(message, subject, challenge,
|
27
|
-
|
24
|
+
def initialize(message, subject, challenge, actual, expected, got, error,
|
25
|
+
level, negate, valid)
|
28
26
|
|
29
27
|
@message = message
|
30
28
|
@subject = subject
|
31
29
|
@challenge = challenge
|
32
|
-
@context = context
|
33
30
|
@actual = actual
|
34
31
|
@expected = expected
|
35
32
|
@got = got
|
@@ -49,11 +46,6 @@ module Spectus
|
|
49
46
|
# @return [Symbol] The method to call on the subject.
|
50
47
|
attr_reader :challenge
|
51
48
|
|
52
|
-
# @!attribute [r] context
|
53
|
-
#
|
54
|
-
# @return [Array] Parameters of the challenge.
|
55
|
-
attr_reader :context
|
56
|
-
|
57
49
|
# @!attribute [r] actual
|
58
50
|
#
|
59
51
|
# @return [#object_id] The value that the subject return through its
|
@@ -83,7 +75,7 @@ module Spectus
|
|
83
75
|
|
84
76
|
# The value of the negate instance variable.
|
85
77
|
#
|
86
|
-
# @return [Boolean]
|
78
|
+
# @return [Boolean] Evaluated to a negative assertion or not.
|
87
79
|
def negate?
|
88
80
|
@negate
|
89
81
|
end
|
@@ -91,19 +83,18 @@ module Spectus
|
|
91
83
|
# The value of the boolean comparison between the actual value and the
|
92
84
|
# expected value.
|
93
85
|
#
|
94
|
-
# @return [Boolean]
|
86
|
+
# @return [Boolean] The test was true or false.
|
95
87
|
def valid?
|
96
88
|
@valid
|
97
89
|
end
|
98
90
|
|
99
91
|
# Properties of the result.
|
100
92
|
#
|
101
|
-
# @return [Hash]
|
93
|
+
# @return [Hash] The properties of the result.
|
102
94
|
def to_h
|
103
95
|
{
|
104
96
|
subject: subject,
|
105
|
-
challenge: challenge,
|
106
|
-
context: context,
|
97
|
+
challenge: challenge.to_h,
|
107
98
|
actual: actual,
|
108
99
|
expected: expected,
|
109
100
|
got: got,
|
data/lib/spectus/result/fail.rb
CHANGED
@@ -8,14 +8,14 @@ module Spectus
|
|
8
8
|
|
9
9
|
# The value of the expectation of the spec.
|
10
10
|
#
|
11
|
-
# @return [Boolean]
|
11
|
+
# @return [Boolean] The spec was false.
|
12
12
|
def result?
|
13
13
|
false
|
14
14
|
end
|
15
15
|
|
16
16
|
# Identify the state of the result.
|
17
17
|
#
|
18
|
-
# @return [String]
|
18
|
+
# @return [String] The char that identify the state of the result.
|
19
19
|
def to_char
|
20
20
|
if error.nil?
|
21
21
|
'F'
|
data/lib/spectus/result/pass.rb
CHANGED
@@ -13,14 +13,14 @@ module Spectus
|
|
13
13
|
|
14
14
|
# The value of the expectation of the spec.
|
15
15
|
#
|
16
|
-
# @return [Boolean]
|
16
|
+
# @return [Boolean] The spec was true.
|
17
17
|
def result?
|
18
18
|
true
|
19
19
|
end
|
20
20
|
|
21
21
|
# Identify the state of the result.
|
22
22
|
#
|
23
|
-
# @return [String]
|
23
|
+
# @return [String] The char that identify the state of the result.
|
24
24
|
def to_char
|
25
25
|
if got
|
26
26
|
'.'
|
data/lib/spectus/sandbox.rb
CHANGED
@@ -8,19 +8,26 @@ module Spectus
|
|
8
8
|
class Sandbox
|
9
9
|
# Execute the untested code from the passed block against the definition.
|
10
10
|
#
|
11
|
-
# @param [
|
12
|
-
# @param [Boolean]
|
13
|
-
# @param [#object_id]
|
14
|
-
# @param [
|
15
|
-
|
16
|
-
def initialize(definition, negate, object, meth, *args)
|
11
|
+
# @param definition [Hash, Symbol] Definition.
|
12
|
+
# @param negate [Boolean] Negate the expectation result.
|
13
|
+
# @param object [#object_id] The front object which is challenged.
|
14
|
+
# @param challenges [Array] The list of challenges.
|
15
|
+
def initialize(definition, negate, object, *challenges)
|
17
16
|
@got = negate ^ matcher(definition).matches? do
|
18
|
-
@actual =
|
17
|
+
@actual = challenges.inject(object) do |subject, challenge|
|
18
|
+
@last_challenge = challenge
|
19
|
+
@last_challenge.to(subject)
|
20
|
+
end
|
19
21
|
end
|
20
22
|
rescue => e
|
21
23
|
@exception = e
|
22
24
|
end
|
23
25
|
|
26
|
+
# @!attribute [r] last_challenge
|
27
|
+
#
|
28
|
+
# @return [Challenge] The last evaluated challenge.
|
29
|
+
attr_reader :last_challenge
|
30
|
+
|
24
31
|
# @!attribute [r] actual
|
25
32
|
#
|
26
33
|
# @return [#object_id] The value that the subject return through its
|
@@ -55,7 +62,7 @@ module Spectus
|
|
55
62
|
#
|
56
63
|
# @param definition [Array, Hash, Symbol]
|
57
64
|
#
|
58
|
-
# @return [#matches?]
|
65
|
+
# @return [#matches?] The matcher.
|
59
66
|
def matcher(definition)
|
60
67
|
params = Array(definition).flatten(1)
|
61
68
|
Matchi.fetch(params.first, *params[1..-1])
|
data/lib/spectus.rb
CHANGED
@@ -9,12 +9,12 @@ require_relative File.join 'spectus', 'expectation_target'
|
|
9
9
|
module Spectus
|
10
10
|
# Expectations are built with this method.
|
11
11
|
#
|
12
|
-
# @example
|
12
|
+
# @example _Absolute requirement_ definition
|
13
13
|
# this { 42 }.MUST Equal: 42 # => #<Spectus::Result::Pass...>
|
14
14
|
#
|
15
|
-
# @param input [Proc]
|
15
|
+
# @param input [Proc] The code to test.
|
16
16
|
#
|
17
|
-
# @return [ExpectationTarget]
|
17
|
+
# @return [ExpectationTarget] The expectation target.
|
18
18
|
def self.this(&input)
|
19
19
|
ExpectationTarget.new(&input)
|
20
20
|
end
|
data/spectus.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
15
15
|
spec.require_paths = ['lib']
|
16
16
|
|
17
|
-
spec.add_dependency 'matchi', '~> 0.0'
|
17
|
+
spec.add_dependency 'matchi', '~> 0.0.9'
|
18
18
|
|
19
19
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
20
20
|
spec.add_development_dependency 'rake', '~> 10.4'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Wack
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
dzJvWzQ1+dJU6WQv75E9ddSkaQrK3nhdgQVu+/wgvGSrsMvOGNz+LXaSDxQqZuwX
|
31
31
|
0KNQFuIukfrdk8URwRnHoAnvx4U93iUw
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-
|
33
|
+
date: 2015-09-10 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: matchi
|
@@ -38,14 +38,14 @@ dependencies:
|
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 0.0.9
|
42
42
|
type: :runtime
|
43
43
|
prerelease: false
|
44
44
|
version_requirements: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.0.9
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: bundler
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- checksum/spectus-2.1.3.gem.sha512
|
148
148
|
- checksum/spectus-2.2.0.gem.sha512
|
149
149
|
- checksum/spectus-2.3.0.gem.sha512
|
150
|
+
- checksum/spectus-2.3.1.gem.sha512
|
150
151
|
- lib/spectus.rb
|
151
152
|
- lib/spectus/challenge.rb
|
152
153
|
- lib/spectus/expectation_target.rb
|
metadata.gz.sig
CHANGED
Binary file
|