spectus 2.7.1 → 2.8.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.tar.gz.sig +1 -2
- data/.rubocop.yml +1 -12
- data/.rubocop_todo.yml +29 -0
- data/VERSION.semver +1 -1
- data/checksum/spectus-2.7.1.gem.sha512 +1 -0
- data/lib/spectus.rb +2 -2
- data/lib/spectus/expectation_target.rb +6 -3
- data/lib/spectus/level/base.rb +41 -67
- data/lib/spectus/report.rb +110 -0
- data/lib/spectus/result/base.rb +2 -2
- data/lib/spectus/sandbox.rb +1 -1
- data/spectus.gemspec +1 -1
- metadata +8 -5
- metadata.gz.sig +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9c5f017cdf442b8b5b030ba4a89faec996d46d0
|
4
|
+
data.tar.gz: e92e7bce6997f75a1932d8593cf21e0150e95d08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ccc7b4ab0aea3ee90b6a9cb28fe62e7d4458118df8cb34ccdbf3fdd530cf1fce8f0c1aab2a9884df30f99a1586708bc071ce5056fb8277d4d94b6e7f7c3ee0e
|
7
|
+
data.tar.gz: 62c3f9dd0ab650be6226c5564f4df238876683175b9cd20694467674dc6533afcae2f07aef42f4908390a2a56244349dabbf719a9c243af7798b896881df2b94
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
�
|
2
|
-
/x��7��F����=){QЇ��%����{�����=�~�=^��ȹ�2��
|
1
|
+
H���{Û8�A�X��E 5J�T4�p�x1�Bx?+Z�Qs�aZ�0+��G8�:�\�|@��W��'�7����dD�AR;� j�x%�@D�#vU�XX;Cy�:��Lu͚�]��Eۏ��$�T<����O�Qm(1Jl_��?7Ѫ���Y�ēLJD�~�1 M7S���ѭ4�KX��g�ͨl }��J��g���TP�� C�O<�ٷ��j�5d���Ls{��t�6T����Qw���%$W+F��r�����X_�
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2015-10-10 17:44:08 +0200 using RuboCop version 0.34.2.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 1
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 18
|
12
|
+
|
13
|
+
# Offense count: 4
|
14
|
+
# Configuration parameters: CountComments.
|
15
|
+
Metrics/MethodLength:
|
16
|
+
Max: 12
|
17
|
+
|
18
|
+
# Offense count: 1
|
19
|
+
# Configuration parameters: CountKeywordArgs.
|
20
|
+
Metrics/ParameterLists:
|
21
|
+
Max: 10
|
22
|
+
|
23
|
+
# Offense count: 2
|
24
|
+
# Cop supports --auto-correct.
|
25
|
+
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
|
26
|
+
Style/TrivialAccessors:
|
27
|
+
Exclude:
|
28
|
+
- 'lib/spectus/level/base.rb'
|
29
|
+
- 'lib/spectus/report.rb'
|
data/VERSION.semver
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.8.0
|
@@ -0,0 +1 @@
|
|
1
|
+
7d429237e89c48a3f04e6299578fb5663b977b4191bbe99c6d0db155a06b85bd8a1985e06b18794f36e9320f05743d145ae16bf8e34beef341e7a0c56491fc93
|
data/lib/spectus.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require_relative File.join 'spectus', 'expectation_target'
|
2
|
-
|
3
1
|
# Namespace for the Spectus library.
|
4
2
|
#
|
5
3
|
# @api public
|
@@ -19,3 +17,5 @@ module Spectus
|
|
19
17
|
ExpectationTarget.new(&input)
|
20
18
|
end
|
21
19
|
end
|
20
|
+
|
21
|
+
require_relative File.join 'spectus', 'expectation_target'
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require_relative File.join 'level', 'high'
|
2
|
-
require_relative File.join 'level', 'medium'
|
3
|
-
require_relative File.join 'level', 'low'
|
4
1
|
require 'defi'
|
5
2
|
|
6
3
|
module Spectus
|
@@ -27,6 +24,8 @@ module Spectus
|
|
27
24
|
# @return [Array] The challenges to call on the subject.
|
28
25
|
attr_reader :challenges
|
29
26
|
|
27
|
+
# rubocop:disable Style/MethodName
|
28
|
+
|
30
29
|
# This word, or the terms "REQUIRED" or "SHALL", mean that the
|
31
30
|
# definition is an absolute requirement of the specification.
|
32
31
|
#
|
@@ -107,3 +106,7 @@ module Spectus
|
|
107
106
|
end
|
108
107
|
end
|
109
108
|
end
|
109
|
+
|
110
|
+
require_relative File.join 'level', 'high'
|
111
|
+
require_relative File.join 'level', 'medium'
|
112
|
+
require_relative File.join 'level', 'low'
|
data/lib/spectus/level/base.rb
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
require_relative File.join '..', 'sandbox'
|
2
|
-
require_relative File.join '..', 'result', 'fail'
|
3
|
-
require_relative File.join '..', 'result', 'pass'
|
4
|
-
|
5
1
|
module Spectus
|
6
2
|
# Namespace for the requirement levels.
|
7
3
|
#
|
@@ -24,21 +20,46 @@ module Spectus
|
|
24
20
|
@challenges = challenges
|
25
21
|
end
|
26
22
|
|
23
|
+
# @!attribute [r] req
|
24
|
+
#
|
25
|
+
# @return [Hash, Symbol] The definition of the expected value.
|
26
|
+
attr_reader :req
|
27
|
+
|
28
|
+
# The value of the negate instance variable.
|
29
|
+
#
|
30
|
+
# @return [Boolean] Evaluated to a negative assertion or not.
|
31
|
+
def negate?
|
32
|
+
@negate
|
33
|
+
end
|
34
|
+
|
35
|
+
# @!attribute [r] subject
|
36
|
+
#
|
37
|
+
# @return [#object_id] The front object to test.
|
38
|
+
attr_reader :subject
|
39
|
+
|
40
|
+
# @!attribute [r] challenges
|
41
|
+
#
|
42
|
+
# @return [Array] A list of challenges.
|
43
|
+
attr_reader :challenges
|
44
|
+
|
27
45
|
protected
|
28
46
|
|
29
47
|
# @param state [Sandbox] The sandbox that tested the code.
|
30
48
|
#
|
31
49
|
# @return [Result::Pass] Pass the spec.
|
32
50
|
def pass!(state)
|
33
|
-
|
51
|
+
msg = Report.new(req, negate?, state, true)
|
52
|
+
|
53
|
+
Result::Pass.new(msg, *result_signature(state))
|
34
54
|
end
|
35
55
|
|
36
56
|
# @param state [Sandbox] The sandbox that tested the code.
|
37
57
|
#
|
38
58
|
# @raise [Result::Fail] Fail the spec.
|
39
59
|
def fail!(state)
|
40
|
-
|
41
|
-
|
60
|
+
msg = Report.new(req, negate?, state, false)
|
61
|
+
|
62
|
+
fail Result::Fail.new(msg, *result_signature(state)), msg, caller[2..-1]
|
42
63
|
end
|
43
64
|
|
44
65
|
# @param state [Sandbox] The sandbox that tested the code.
|
@@ -46,14 +67,14 @@ module Spectus
|
|
46
67
|
# @return [Array] List of parameters.
|
47
68
|
def result_signature(state)
|
48
69
|
[
|
49
|
-
|
70
|
+
subject,
|
50
71
|
state.last_challenge,
|
51
72
|
state.actual,
|
52
|
-
|
73
|
+
req,
|
53
74
|
state.got,
|
54
75
|
state.exception,
|
55
76
|
level,
|
56
|
-
|
77
|
+
negate?,
|
57
78
|
state.valid?
|
58
79
|
]
|
59
80
|
end
|
@@ -65,69 +86,17 @@ module Spectus
|
|
65
86
|
|
66
87
|
# @return [Sandbox] The sandbox.
|
67
88
|
def sandbox
|
68
|
-
|
69
|
-
fork_and_return { Sandbox.new(@req, @negate, @subject, *@challenges) }
|
70
|
-
else
|
71
|
-
Sandbox.new(@req, @negate, @subject, *@challenges)
|
72
|
-
end
|
89
|
+
Process.respond_to?(:fork) ? fork_and_return { execute } : execute
|
73
90
|
end
|
74
91
|
|
75
|
-
# @
|
76
|
-
|
77
|
-
|
78
|
-
# @return [String] The message that describe the state.
|
79
|
-
def message(state, result)
|
80
|
-
"#{title(state, result)}: #{summary(state)}."
|
81
|
-
end
|
82
|
-
|
83
|
-
# The title of the state.
|
84
|
-
#
|
85
|
-
# @param state [Sandbox] The sandbox that tested the code.
|
86
|
-
# @param result [Boolean] The result of the test.
|
87
|
-
#
|
88
|
-
# @return [String] The title of the state.
|
89
|
-
def title(state, result)
|
90
|
-
if result
|
91
|
-
state.got ? 'Pass' : 'Info'
|
92
|
-
else
|
93
|
-
state.exception.nil? ? 'Failure' : 'Error'
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# The summary of the state.
|
98
|
-
#
|
99
|
-
# @param state [Sandbox] The sandbox that tested the code.
|
100
|
-
#
|
101
|
-
# @return [String] The summary of the state.
|
102
|
-
def summary(state)
|
103
|
-
if state.valid? || state.exception.nil?
|
104
|
-
'Expected ' + state.actual.inspect + (@negate ? ' not ' : ' ') +
|
105
|
-
'to ' + if @req.is_a?(Hash)
|
106
|
-
readable(@req.keys.first) + ' ' +
|
107
|
-
@req.values.first.inspect
|
108
|
-
else
|
109
|
-
readable(@req)
|
110
|
-
end
|
111
|
-
else
|
112
|
-
state.exception.message
|
113
|
-
end + (state.exception.nil? ? '' : " (#{state.exception.class})")
|
114
|
-
end
|
115
|
-
|
116
|
-
# @param st [#to_s] A UpperCamelCase string.
|
117
|
-
#
|
118
|
-
# @return [String] The snake_case string.
|
119
|
-
def readable(st)
|
120
|
-
st.to_s
|
121
|
-
.gsub(/::/, '/')
|
122
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
123
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
124
|
-
.tr('-_', ' ')
|
125
|
-
.downcase
|
92
|
+
# @return [Sandbox] The sandbox.
|
93
|
+
def execute
|
94
|
+
Sandbox.new(req, negate?, subject, *challenges)
|
126
95
|
end
|
127
96
|
|
128
97
|
# Run the code in a separate process.
|
129
98
|
#
|
130
|
-
# @
|
99
|
+
# @yieldreturn [Sandbox] Execute the untested code in the sandbox.
|
131
100
|
def fork_and_return
|
132
101
|
read, write = IO.pipe
|
133
102
|
|
@@ -146,3 +115,8 @@ module Spectus
|
|
146
115
|
end
|
147
116
|
end
|
148
117
|
end
|
118
|
+
|
119
|
+
require_relative File.join '..', 'report'
|
120
|
+
require_relative File.join '..', 'result', 'fail'
|
121
|
+
require_relative File.join '..', 'result', 'pass'
|
122
|
+
require_relative File.join '..', 'sandbox'
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module Spectus
|
2
|
+
# The class that is responsible for reporting the result of the test.
|
3
|
+
#
|
4
|
+
# @api private
|
5
|
+
#
|
6
|
+
class Report
|
7
|
+
# Initialize the report class.
|
8
|
+
#
|
9
|
+
# @param req [Hash, Symbol] The definition of the expected value.
|
10
|
+
# @param negate [Boolean] Evaluate to a negative assertion.
|
11
|
+
# @param state [Sandbox] The sandbox that tested the code.
|
12
|
+
# @param result [Boolean] The result of the test.
|
13
|
+
def initialize(req, negate, state, result)
|
14
|
+
@req = req
|
15
|
+
@negate = negate
|
16
|
+
@state = state
|
17
|
+
@result = result
|
18
|
+
end
|
19
|
+
|
20
|
+
# @!attribute [r] req
|
21
|
+
#
|
22
|
+
# @return [Hash, Symbol] The definition of the expected value.
|
23
|
+
attr_reader :req
|
24
|
+
|
25
|
+
# The value of the negate instance variable.
|
26
|
+
#
|
27
|
+
# @return [Boolean] Evaluated to a negative assertion or not.
|
28
|
+
def negate?
|
29
|
+
@negate
|
30
|
+
end
|
31
|
+
|
32
|
+
# @!attribute [r] state
|
33
|
+
#
|
34
|
+
# @return [Sandbox] The sandbox that tested the code.
|
35
|
+
attr_reader :state
|
36
|
+
|
37
|
+
# @!attribute [r] result
|
38
|
+
#
|
39
|
+
# @return [Boolean] The result of the test.
|
40
|
+
attr_reader :result
|
41
|
+
|
42
|
+
# The message.
|
43
|
+
#
|
44
|
+
# @return [String] The message that describe the state.
|
45
|
+
def to_s
|
46
|
+
"#{title}: #{summary}#{maybe_exception}."
|
47
|
+
end
|
48
|
+
|
49
|
+
# The title of the state.
|
50
|
+
#
|
51
|
+
# @return [String] The title of the state.
|
52
|
+
def title
|
53
|
+
if result
|
54
|
+
state.got ? 'Pass' : 'Info'
|
55
|
+
else
|
56
|
+
state.exception.nil? ? 'Failure' : 'Error'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# The summary of the state.
|
61
|
+
#
|
62
|
+
# @return [String] The summary of the state.
|
63
|
+
def summary
|
64
|
+
return state.exception.message unless state.valid? || state.exception.nil?
|
65
|
+
|
66
|
+
'Expected ' + state.actual.inspect + maybe_negate + ' to ' + definition
|
67
|
+
end
|
68
|
+
|
69
|
+
# The negation, if any.
|
70
|
+
#
|
71
|
+
# @return [String] The negation, or an empty string.
|
72
|
+
def maybe_negate
|
73
|
+
negate? ? ' not' : ''
|
74
|
+
end
|
75
|
+
|
76
|
+
# The type of exception, if any.
|
77
|
+
#
|
78
|
+
# @return [String] The type of exception, or an empty string.
|
79
|
+
def maybe_exception
|
80
|
+
state.exception.nil? ? '' : " (#{state.exception.class})"
|
81
|
+
end
|
82
|
+
|
83
|
+
# The readable definition.
|
84
|
+
#
|
85
|
+
# @return [String] The readable definition string.
|
86
|
+
def definition
|
87
|
+
if req.is_a?(Hash)
|
88
|
+
snake_case(req.keys.first) + ' ' + req.values.first.inspect
|
89
|
+
else
|
90
|
+
snake_case(req)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
# @api private
|
97
|
+
#
|
98
|
+
# @param st [#to_s] An UpperCamelCase string.
|
99
|
+
#
|
100
|
+
# @return [String] The snake_case string.
|
101
|
+
def snake_case(st)
|
102
|
+
st.to_s
|
103
|
+
.gsub(/::/, '/')
|
104
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
105
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
106
|
+
.tr('-_', ' ')
|
107
|
+
.downcase
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/spectus/result/base.rb
CHANGED
@@ -9,7 +9,7 @@ module Spectus
|
|
9
9
|
module Base
|
10
10
|
# Initialize the result class.
|
11
11
|
#
|
12
|
-
# @param message [
|
12
|
+
# @param message [#to_s] It is describing the actual/error value.
|
13
13
|
# @param subject [#object_id] The untrusted object to be tested.
|
14
14
|
# @param challenge [Defi::Challenge] The challenge for the subject.
|
15
15
|
# @param actual [#object_id] The value that the subject return through
|
@@ -24,7 +24,7 @@ module Spectus
|
|
24
24
|
def initialize(message, subject, challenge, actual, expected, got, error,
|
25
25
|
level, negate, valid)
|
26
26
|
|
27
|
-
@message = message
|
27
|
+
@message = message.to_s
|
28
28
|
@subject = subject
|
29
29
|
@challenge = challenge
|
30
30
|
@actual = actual
|
data/lib/spectus/sandbox.rb
CHANGED
data/spectus.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'rake', '~> 10.4'
|
22
22
|
spec.add_development_dependency 'yard', '~> 0.8'
|
23
23
|
spec.add_development_dependency 'simplecov', '~> 0.10'
|
24
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
24
|
+
spec.add_development_dependency 'rubocop', '~> 0.34'
|
25
25
|
|
26
26
|
spec.cert_chain = ['certs/gem-fixrb-public_cert.pem']
|
27
27
|
private_key = File.expand_path('~/.ssh/gem-fixrb-private_key.pem')
|
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.8.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-10 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: defi
|
@@ -122,14 +122,14 @@ dependencies:
|
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
125
|
+
version: '0.34'
|
126
126
|
type: :development
|
127
127
|
prerelease: false
|
128
128
|
version_requirements: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '0.
|
132
|
+
version: '0.34'
|
133
133
|
description: Expectation library with RFC 2119's requirement levels.
|
134
134
|
email:
|
135
135
|
- contact@cyril.email
|
@@ -139,6 +139,7 @@ extra_rdoc_files: []
|
|
139
139
|
files:
|
140
140
|
- ".gitignore"
|
141
141
|
- ".rubocop.yml"
|
142
|
+
- ".rubocop_todo.yml"
|
142
143
|
- ".travis.yml"
|
143
144
|
- ".yardopts"
|
144
145
|
- CODE_OF_CONDUCT.md
|
@@ -166,12 +167,14 @@ files:
|
|
166
167
|
- checksum/spectus-2.5.0.gem.sha512
|
167
168
|
- checksum/spectus-2.6.0.gem.sha512
|
168
169
|
- checksum/spectus-2.7.0.gem.sha512
|
170
|
+
- checksum/spectus-2.7.1.gem.sha512
|
169
171
|
- lib/spectus.rb
|
170
172
|
- lib/spectus/expectation_target.rb
|
171
173
|
- lib/spectus/level/base.rb
|
172
174
|
- lib/spectus/level/high.rb
|
173
175
|
- lib/spectus/level/low.rb
|
174
176
|
- lib/spectus/level/medium.rb
|
177
|
+
- lib/spectus/report.rb
|
175
178
|
- lib/spectus/result/base.rb
|
176
179
|
- lib/spectus/result/fail.rb
|
177
180
|
- lib/spectus/result/pass.rb
|
@@ -198,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
201
|
version: '0'
|
199
202
|
requirements: []
|
200
203
|
rubyforge_project:
|
201
|
-
rubygems_version: 2.4.5
|
204
|
+
rubygems_version: 2.4.5.1
|
202
205
|
signing_key:
|
203
206
|
specification_version: 4
|
204
207
|
summary: Expectation library with RFC 2119 keywords.
|
metadata.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
��'A!H���?r
|
2
|
+
�����>�n�O���.e�����ė銗 �.�:��X �
|
3
|
+
����TuZ)O�ۊ�����ʍ���s����w��N:ɤ�뜗��`D�l���/�b���>P�{{�ctn������,ю�\�����"3��W�kD��~��!%�N�e��h�ӫ�tMb�l��~�6�.㌔>�<Q��*,���:��C\�wzw��>^��5���W���b�qj��h�}iv�S"�q��4@
|