spectus 2.8.0 → 2.9.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 +0 -0
- data/.rubocop_todo.yml +2 -6
- data/README.md +25 -0
- data/VERSION.semver +1 -1
- data/checksum/spectus-2.8.0.gem.sha512 +1 -0
- data/lib/spectus/expectation_target.rb +44 -3
- data/lib/spectus/report.rb +2 -2
- data/lib/spectus/{level → requirement_level}/base.rb +4 -2
- data/lib/spectus/{level → requirement_level}/high.rb +2 -2
- data/lib/spectus/{level → requirement_level}/low.rb +2 -2
- data/lib/spectus/{level → requirement_level}/medium.rb +2 -2
- data.tar.gz.sig +0 -0
- metadata +7 -6
- 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: 3f1486affdd6feecdb555121c32c11c69a448e96
|
4
|
+
data.tar.gz: 4bd260c2f0295db5d5ffd7ecde20144be6509308
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba367974543e1325be7846b697aa7f14766e1135ecf95f6d7b3af0fd1bed4cd7b805274b85f26b5d5f97b5af29e30c6d5c829cd6635817dcecc8a4bbbf2e5589
|
7
|
+
data.tar.gz: 33ed94ab7562d3ecfb0ca19c1efcac1b153bcfee782078fe1b166692bd5770a1803b3fe44823a01b59cfb1060ab1329735b37f0dfa1be16bf48c81e5f4a8f7b1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.rubocop_todo.yml
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2015-10-
|
3
|
+
# on 2015-10-13 23:48:38 +0200 using RuboCop version 0.34.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
Metrics/AbcSize:
|
11
|
-
Max: 18
|
12
|
-
|
13
9
|
# Offense count: 4
|
14
10
|
# Configuration parameters: CountComments.
|
15
11
|
Metrics/MethodLength:
|
@@ -25,5 +21,5 @@ Metrics/ParameterLists:
|
|
25
21
|
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
|
26
22
|
Style/TrivialAccessors:
|
27
23
|
Exclude:
|
28
|
-
- 'lib/spectus/level/base.rb'
|
29
24
|
- 'lib/spectus/report.rb'
|
25
|
+
- 'lib/spectus/requirement_level/base.rb'
|
data/README.md
CHANGED
@@ -51,6 +51,31 @@ An expectation is an assertion that is either `true` or `false`.
|
|
51
51
|
| Implemented & Exception | `false` | `false` | `false` |
|
52
52
|
| Not implemented | `false` | `false` | `true` |
|
53
53
|
|
54
|
+
## Isolation
|
55
|
+
|
56
|
+
There are two cases:
|
57
|
+
|
58
|
+
* when the requirement level of an expectation ends with `!`, the test is performed in isolation;
|
59
|
+
* when the requirement level of an expectation does not end with `!`, the test is performed without isolation.
|
60
|
+
|
61
|
+
Example of test in isolation:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
greeting = 'Hello, world!'
|
65
|
+
Spectus.this { greeting.gsub!('world', 'Alice') }.MUST! Eql: 'Hello, Alice!'
|
66
|
+
# => #<Spectus::Result::Pass:0x007fd6312e5310 @message="Pass: Expected \"Hello, Alice!\" to eql \"Hello, Alice!\".", @subject=#<Proc:0x007fd6312e6238@(irb):2>, @challenge=#<Defi::Challenge:0x007fd6312e59c8 @method=:call, @args=[]>, @actual="Hello, Alice!", @expected={:Eql=>"Hello, Alice!"}, @got=true, @error=nil, @level=:High, @negate=false, @valid=true>
|
67
|
+
greeting # => "Hello, world!"
|
68
|
+
```
|
69
|
+
|
70
|
+
Example of test without isolation:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
greeting = 'Hello, world!'
|
74
|
+
Spectus.this { greeting.gsub!('world', 'Alice') }.MUST Eql: 'Hello, Alice!'
|
75
|
+
# => #<Spectus::Result::Pass:0x007fabbab88f68 @message="Pass: Expected \"Hello, Alice!\" to eql \"Hello, Alice!\".", @subject=#<Proc:0x007fabbab895a8@(irb):2>, @challenge=#<Defi::Challenge:0x007fabbab89530 @method=:call, @args=[]>, @actual="Hello, Alice!", @expected={:Eql=>"Hello, Alice!"}, @got=true, @error=nil, @level=:High, @negate=false, @valid=true>
|
76
|
+
greeting # => "Hello, Alice!"
|
77
|
+
```
|
78
|
+
|
54
79
|
## Results
|
55
80
|
|
56
81
|
There are two cases:
|
data/VERSION.semver
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.9.0
|
@@ -0,0 +1 @@
|
|
1
|
+
2f4cc7cc8d6b32effa58c91d04e2bd2baea946c55782af86b9ac51669af56368ae68bb9dfe12ea702efa88b6b67003944e59ad876899dc950f0f590c9f26bb8f
|
@@ -39,6 +39,14 @@ module Spectus
|
|
39
39
|
RequirementLevel::High.new(req, false, subject, *challenges).result
|
40
40
|
end
|
41
41
|
|
42
|
+
# @example _Absolute requirement_ definition with isolation
|
43
|
+
# this { 'foo'.upcase }.MUST! Eql: 'FOO'
|
44
|
+
#
|
45
|
+
# @see MUST
|
46
|
+
def MUST!(req)
|
47
|
+
RequirementLevel::High.new(req, false, subject, *challenges).result(true)
|
48
|
+
end
|
49
|
+
|
42
50
|
# This phrase, or the phrase "SHALL NOT", mean that the
|
43
51
|
# definition is an absolute prohibition of the specification.
|
44
52
|
#
|
@@ -52,6 +60,14 @@ module Spectus
|
|
52
60
|
RequirementLevel::High.new(req, true, subject, *challenges).result
|
53
61
|
end
|
54
62
|
|
63
|
+
# @example _Absolute prohibition_ definition with isolation
|
64
|
+
# this { 'foo'.size }.MUST_NOT! Equal: 42
|
65
|
+
#
|
66
|
+
# @see MUST_NOT
|
67
|
+
def MUST_NOT!(req)
|
68
|
+
RequirementLevel::High.new(req, true, subject, *challenges).result(true)
|
69
|
+
end
|
70
|
+
|
55
71
|
# This word, or the adjective "RECOMMENDED", mean that there
|
56
72
|
# may exist valid reasons in particular circumstances to ignore a
|
57
73
|
# particular item, but the full implications must be understood and
|
@@ -67,6 +83,15 @@ module Spectus
|
|
67
83
|
RequirementLevel::Medium.new(req, false, subject, *challenges).result
|
68
84
|
end
|
69
85
|
|
86
|
+
# @example _Recommended_ definition with isolation
|
87
|
+
# this { 'foo'.valid_encoding? }.SHOULD! Equal: true
|
88
|
+
#
|
89
|
+
# @see SHOULD
|
90
|
+
def SHOULD!(req)
|
91
|
+
RequirementLevel::Medium.new(req, false, subject, *challenges)
|
92
|
+
.result(true)
|
93
|
+
end
|
94
|
+
|
70
95
|
# This phrase, or the phrase "NOT RECOMMENDED" mean that
|
71
96
|
# there may exist valid reasons in particular circumstances when the
|
72
97
|
# particular behavior is acceptable or even useful, but the full
|
@@ -83,6 +108,14 @@ module Spectus
|
|
83
108
|
RequirementLevel::Medium.new(req, true, subject, *challenges).result
|
84
109
|
end
|
85
110
|
|
111
|
+
# @example _Not recommended_ definition with isolation
|
112
|
+
# this { ''.blank? }.SHOULD_NOT! RaiseException: NoMethodError
|
113
|
+
#
|
114
|
+
# @see SHOULD_NOT
|
115
|
+
def SHOULD_NOT!(req)
|
116
|
+
RequirementLevel::Medium.new(req, true, subject, *challenges).result(true)
|
117
|
+
end
|
118
|
+
|
86
119
|
# This word, or the adjective "OPTIONAL", mean that an item is
|
87
120
|
# truly optional. One vendor may choose to include the item because a
|
88
121
|
# particular marketplace requires it or because the vendor feels that
|
@@ -104,9 +137,17 @@ module Spectus
|
|
104
137
|
def MAY(req)
|
105
138
|
RequirementLevel::Low.new(req, false, subject, *challenges).result
|
106
139
|
end
|
140
|
+
|
141
|
+
# @example _Optional_ definition with isolation
|
142
|
+
# this { 'foo'.bar }.MAY! Match: /^foo$/
|
143
|
+
#
|
144
|
+
# @see MAY
|
145
|
+
def MAY!(req)
|
146
|
+
RequirementLevel::Low.new(req, false, subject, *challenges).result(true)
|
147
|
+
end
|
107
148
|
end
|
108
149
|
end
|
109
150
|
|
110
|
-
require_relative File.join '
|
111
|
-
require_relative File.join '
|
112
|
-
require_relative File.join '
|
151
|
+
require_relative File.join 'requirement_level', 'high'
|
152
|
+
require_relative File.join 'requirement_level', 'medium'
|
153
|
+
require_relative File.join 'requirement_level', 'low'
|
data/lib/spectus/report.rb
CHANGED
@@ -63,7 +63,7 @@ module Spectus
|
|
63
63
|
def summary
|
64
64
|
return state.exception.message unless state.valid? || state.exception.nil?
|
65
65
|
|
66
|
-
|
66
|
+
"Expected #{state.actual.inspect}#{maybe_negate} to #{definition}"
|
67
67
|
end
|
68
68
|
|
69
69
|
# The negation, if any.
|
@@ -85,7 +85,7 @@ module Spectus
|
|
85
85
|
# @return [String] The readable definition string.
|
86
86
|
def definition
|
87
87
|
if req.is_a?(Hash)
|
88
|
-
snake_case(req.keys.first)
|
88
|
+
"#{snake_case(req.keys.first)} #{req.values.first.inspect}"
|
89
89
|
else
|
90
90
|
snake_case(req)
|
91
91
|
end
|
@@ -84,9 +84,11 @@ module Spectus
|
|
84
84
|
self.class.name.split('::').last.to_sym
|
85
85
|
end
|
86
86
|
|
87
|
+
# @param isolation [Boolean] Test in isolation.
|
88
|
+
#
|
87
89
|
# @return [Sandbox] The sandbox.
|
88
|
-
def sandbox
|
89
|
-
|
90
|
+
def sandbox(isolation)
|
91
|
+
isolation ? fork_and_return { execute } : execute
|
90
92
|
end
|
91
93
|
|
92
94
|
# @return [Sandbox] The sandbox.
|
@@ -11,8 +11,8 @@ module Spectus
|
|
11
11
|
#
|
12
12
|
# @return [Result::Fail, Result::Pass] Report if the low expectation
|
13
13
|
# pass or fail.
|
14
|
-
def result
|
15
|
-
state = sandbox
|
14
|
+
def result(isolation = false)
|
15
|
+
state = sandbox(isolation)
|
16
16
|
|
17
17
|
if state.valid? || state.exception.class.equal?(::NoMethodError)
|
18
18
|
pass!(state)
|
@@ -11,8 +11,8 @@ module Spectus
|
|
11
11
|
#
|
12
12
|
# @return [Result::Fail, Result::Pass] Report if the medium expectation
|
13
13
|
# pass or fail.
|
14
|
-
def result
|
15
|
-
state = sandbox
|
14
|
+
def result(isolation = false)
|
15
|
+
state = sandbox(isolation)
|
16
16
|
|
17
17
|
if state.valid? || state.exception.nil?
|
18
18
|
pass!(state)
|
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.9.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-10-
|
33
|
+
date: 2015-10-13 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: defi
|
@@ -168,13 +168,14 @@ files:
|
|
168
168
|
- checksum/spectus-2.6.0.gem.sha512
|
169
169
|
- checksum/spectus-2.7.0.gem.sha512
|
170
170
|
- checksum/spectus-2.7.1.gem.sha512
|
171
|
+
- checksum/spectus-2.8.0.gem.sha512
|
171
172
|
- lib/spectus.rb
|
172
173
|
- lib/spectus/expectation_target.rb
|
173
|
-
- lib/spectus/level/base.rb
|
174
|
-
- lib/spectus/level/high.rb
|
175
|
-
- lib/spectus/level/low.rb
|
176
|
-
- lib/spectus/level/medium.rb
|
177
174
|
- lib/spectus/report.rb
|
175
|
+
- lib/spectus/requirement_level/base.rb
|
176
|
+
- lib/spectus/requirement_level/high.rb
|
177
|
+
- lib/spectus/requirement_level/low.rb
|
178
|
+
- lib/spectus/requirement_level/medium.rb
|
178
179
|
- lib/spectus/result/base.rb
|
179
180
|
- lib/spectus/result/fail.rb
|
180
181
|
- lib/spectus/result/pass.rb
|
metadata.gz.sig
CHANGED
Binary file
|