spectre-core 2.1.0 → 2.1.2
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/exe/spectre +1 -1
- data/lib/spectre/assertion.rb +7 -7
- data/lib/spectre/expectation.rb +7 -7
- data/lib/spectre/helpers.rb +2 -2
- data/lib/spectre/version.rb +1 -1
- data/lib/spectre.rb +44 -38
- metadata +37 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2343f54b9e9837df93c730210d5652256643d8514b0456670292b492dc7f770e
|
|
4
|
+
data.tar.gz: 6d934a08ecee932b5346a3d9e98fcd96bc27384f5b9f17cd01b9c08b430c0ff2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 137d6c2c7012d535ba7a93072b67f0cd471ca6b9c5b83225ccb9eb06a433645f078a9928a21c61598059e299c476fe2cbad9f6a4112fd5a0d2d86ed7c2f392e2
|
|
7
|
+
data.tar.gz: ab497f00a4ef0a3ca453f304a6a7e2ac30e0ecdd4910bc27c14c533079638866a2e609e6f618641cdd0ffa337e9575a340a658b1079f2fb18b38cf9cf6adadf4
|
data/exe/spectre
CHANGED
|
@@ -121,7 +121,7 @@ options = OptionParser.new do |opts|
|
|
|
121
121
|
'Override config option. Use `spectre show` to get list of available options') do |option|
|
|
122
122
|
index = option.index('=')
|
|
123
123
|
key = option[0...index]
|
|
124
|
-
val = option[index + 1..]
|
|
124
|
+
val = option[(index + 1)..]
|
|
125
125
|
|
|
126
126
|
val = val.split(',') if Spectre::CONFIG[key].is_a? Array
|
|
127
127
|
val = ['true', '1'].include? val if [true, false].include?(Spectre::CONFIG[key])
|
data/lib/spectre/assertion.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Spectre
|
|
|
11
11
|
@val = val
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def evaluate predicate, actual, negate
|
|
14
|
+
def evaluate? predicate, actual, negate
|
|
15
15
|
!(!negate ^ predicate.call(@val, actual))
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -31,8 +31,8 @@ module Spectre
|
|
|
31
31
|
@second = ValueWrapper.wrap(second)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
def evaluate predicate, actual, negate
|
|
35
|
-
@first.evaluate(predicate, actual, negate) or @second.evaluate(predicate, actual, negate)
|
|
34
|
+
def evaluate? predicate, actual, negate
|
|
35
|
+
@first.evaluate?(predicate, actual, negate) or @second.evaluate?(predicate, actual, negate)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# :nodoc:
|
|
@@ -48,8 +48,8 @@ module Spectre
|
|
|
48
48
|
@second = ValueWrapper.wrap(second)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def evaluate predicate, actual, negate
|
|
52
|
-
@first.evaluate(predicate, actual, negate) and @second.evaluate(predicate, actual, negate)
|
|
51
|
+
def evaluate? predicate, actual, negate
|
|
52
|
+
@first.evaluate?(predicate, actual, negate) and @second.evaluate?(predicate, actual, negate)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# :nodoc:
|
|
@@ -88,7 +88,7 @@ module Spectre
|
|
|
88
88
|
@var_name = file_content
|
|
89
89
|
.lines[location.lineno - 1]
|
|
90
90
|
.strip
|
|
91
|
-
.match(/[\s
|
|
91
|
+
.match(/[\s(]([^\s]+|\[.*\]|{.*})\.(to|not_to)[\s(]/)
|
|
92
92
|
.captures
|
|
93
93
|
.first
|
|
94
94
|
.strip
|
|
@@ -98,7 +98,7 @@ module Spectre
|
|
|
98
98
|
@repr += " to #{method}"
|
|
99
99
|
@repr += expected.nil? ? ' empty' : " #{@expected}"
|
|
100
100
|
|
|
101
|
-
success = @expected.evaluate(@predicate, @actual, @negate)
|
|
101
|
+
success = @expected.evaluate?(@predicate, @actual, @negate)
|
|
102
102
|
|
|
103
103
|
return if success
|
|
104
104
|
|
data/lib/spectre/expectation.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Spectre
|
|
|
10
10
|
def should_be value
|
|
11
11
|
predicate = proc { |expected, actual| expected.to_s == actual.to_s }
|
|
12
12
|
value = Spectre::Assertion::ValueWrapper.wrap(value)
|
|
13
|
-
success = value.evaluate(predicate, self, false)
|
|
13
|
+
success = value.evaluate?(predicate, self, false)
|
|
14
14
|
|
|
15
15
|
return if success
|
|
16
16
|
|
|
@@ -20,7 +20,7 @@ module Spectre
|
|
|
20
20
|
def should_be_empty
|
|
21
21
|
predicate = proc { |_, actual| actual.nil? or (actual.respond_to?(:empty?) and actual.empty?) }
|
|
22
22
|
value = Spectre::Assertion::ValueWrapper.wrap(nil)
|
|
23
|
-
success = value.evaluate(predicate, self, false)
|
|
23
|
+
success = value.evaluate?(predicate, self, false)
|
|
24
24
|
|
|
25
25
|
return if success
|
|
26
26
|
|
|
@@ -30,7 +30,7 @@ module Spectre
|
|
|
30
30
|
def should_not_be(value)
|
|
31
31
|
predicate = proc { |expected, actual| expected.to_s == actual.to_s }
|
|
32
32
|
value = Spectre::Assertion::ValueWrapper.wrap(value)
|
|
33
|
-
success = value.evaluate(predicate, self, true)
|
|
33
|
+
success = value.evaluate?(predicate, self, true)
|
|
34
34
|
|
|
35
35
|
return if success
|
|
36
36
|
|
|
@@ -40,7 +40,7 @@ module Spectre
|
|
|
40
40
|
def should_not_exist
|
|
41
41
|
predicate = proc { |expected, _| expected.respond_to? :nil? and expected.nil? }
|
|
42
42
|
value = Spectre::Assertion::ValueWrapper.wrap(value)
|
|
43
|
-
success = value.evaluate(predicate, self, true)
|
|
43
|
+
success = value.evaluate?(predicate, self, true)
|
|
44
44
|
|
|
45
45
|
return if success
|
|
46
46
|
|
|
@@ -50,7 +50,7 @@ module Spectre
|
|
|
50
50
|
def should_not_be_empty
|
|
51
51
|
predicate = proc { |_, actual| actual.nil? or (actual.respond_to?(:empty?) and actual.empty?) }
|
|
52
52
|
value = Spectre::Assertion::ValueWrapper.wrap(nil)
|
|
53
|
-
success = value.evaluate(predicate, self, true)
|
|
53
|
+
success = value.evaluate?(predicate, self, true)
|
|
54
54
|
|
|
55
55
|
return if success
|
|
56
56
|
|
|
@@ -64,7 +64,7 @@ module Spectre
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
value = Spectre::Assertion::ValueWrapper.wrap(value)
|
|
67
|
-
success = value.evaluate(predicate, self, false)
|
|
67
|
+
success = value.evaluate?(predicate, self, false)
|
|
68
68
|
|
|
69
69
|
return if success
|
|
70
70
|
|
|
@@ -78,7 +78,7 @@ module Spectre
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
value = Spectre::Assertion::ValueWrapper.wrap(value)
|
|
81
|
-
success = value.evaluate(predicate, self, true)
|
|
81
|
+
success = value.evaluate?(predicate, self, true)
|
|
82
82
|
|
|
83
83
|
return if success
|
|
84
84
|
|
data/lib/spectre/helpers.rb
CHANGED
|
@@ -43,7 +43,7 @@ class ::String
|
|
|
43
43
|
##
|
|
44
44
|
# Trims the string to the given length and adds +...+ at the end
|
|
45
45
|
def trim size = 50
|
|
46
|
-
return "#{self[0..size - 4]}..." if (length + 3) > size
|
|
46
|
+
return "#{self[0..(size - 4)]}..." if (length + 3) > size
|
|
47
47
|
|
|
48
48
|
self
|
|
49
49
|
end
|
|
@@ -122,7 +122,7 @@ end
|
|
|
122
122
|
module Spectre
|
|
123
123
|
module Helpers
|
|
124
124
|
class << self
|
|
125
|
-
def uuid length =
|
|
125
|
+
def uuid length = nil
|
|
126
126
|
return SecureRandom.hex(length / 2) if length
|
|
127
127
|
|
|
128
128
|
SecureRandom.uuid
|
data/lib/spectre/version.rb
CHANGED
data/lib/spectre.rb
CHANGED
|
@@ -20,7 +20,7 @@ def get_call_location call_stack
|
|
|
20
20
|
.find { |x| x.label.include? 'Spectre::Engine#load_files' or x.base_label == '<top (required)>' }
|
|
21
21
|
|
|
22
22
|
[
|
|
23
|
-
loc.path.sub(
|
|
23
|
+
loc.path.sub(Spectre.pwd, '.'),
|
|
24
24
|
loc.lineno
|
|
25
25
|
]
|
|
26
26
|
end
|
|
@@ -78,6 +78,13 @@ end
|
|
|
78
78
|
# The main module containing all logic for the framework
|
|
79
79
|
#
|
|
80
80
|
module Spectre
|
|
81
|
+
# Cache Dir.pwd to avoid repeated system calls
|
|
82
|
+
@pwd = Dir.pwd
|
|
83
|
+
|
|
84
|
+
def self.pwd
|
|
85
|
+
@pwd
|
|
86
|
+
end
|
|
87
|
+
|
|
81
88
|
##
|
|
82
89
|
# Exception to throw in order to abort a spec run
|
|
83
90
|
#
|
|
@@ -320,7 +327,7 @@ module Spectre
|
|
|
320
327
|
mixins.each_value do |mixin|
|
|
321
328
|
output = "#{mixin.desc.yellow}\n"
|
|
322
329
|
output += " params.....: #{mixin.params.join ', '}\n" if mixin.params.any?
|
|
323
|
-
output += " location...: #{mixin.file.sub(
|
|
330
|
+
output += " location...: #{mixin.file.sub(Spectre.pwd, '.')}:#{mixin.line}"
|
|
324
331
|
paragraphs << output
|
|
325
332
|
end
|
|
326
333
|
|
|
@@ -496,19 +503,19 @@ module Spectre
|
|
|
496
503
|
.select { |x| x.failures.any? }
|
|
497
504
|
|
|
498
505
|
failed.each_with_index do |eval, eval_idx|
|
|
499
|
-
output += if failed.
|
|
506
|
+
output += if failed.one?
|
|
500
507
|
" #{eval.desc}, but"
|
|
501
508
|
else
|
|
502
509
|
" #{index}.#{eval_idx + 1}) #{eval.desc}, but"
|
|
503
510
|
end
|
|
504
511
|
|
|
505
|
-
if eval.failures.
|
|
512
|
+
if eval.failures.one?
|
|
506
513
|
output += " #{eval.failures.first.message}\n"
|
|
507
514
|
else
|
|
508
515
|
output += " #{eval.failures.count} failures occured\n"
|
|
509
516
|
|
|
510
517
|
eval.failures.each_with_index do |fail, fail_idx|
|
|
511
|
-
output += if failed.
|
|
518
|
+
output += if failed.one?
|
|
512
519
|
" #{index}.#{fail_idx + 1}) #{fail.message}\n"
|
|
513
520
|
else
|
|
514
521
|
" #{index}.#{eval_idx + 1}.#{fail_idx + 1}) #{fail.message}\n"
|
|
@@ -802,7 +809,6 @@ module Spectre
|
|
|
802
809
|
DEFAULT_ASYNC_NAME = 'default'
|
|
803
810
|
|
|
804
811
|
@@current = nil
|
|
805
|
-
@@location_cache = {}
|
|
806
812
|
@@skip_count = 0
|
|
807
813
|
|
|
808
814
|
##
|
|
@@ -981,20 +987,22 @@ module Spectre
|
|
|
981
987
|
define_method(method) do |evaluation, &block|
|
|
982
988
|
desc = "#{method} #{evaluation}"
|
|
983
989
|
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
990
|
+
evaluation = if block
|
|
991
|
+
EvaluationContext.new(@engine, desc, &block)
|
|
992
|
+
else
|
|
993
|
+
EvaluationContext.new(@engine, desc) do
|
|
994
|
+
unless evaluation.failure.nil?
|
|
995
|
+
@failures << Failure.new(
|
|
996
|
+
evaluation.failure,
|
|
997
|
+
evaluation.call_location
|
|
998
|
+
)
|
|
999
|
+
end
|
|
1000
|
+
end
|
|
1001
|
+
end
|
|
1002
|
+
|
|
1003
|
+
@evaluations << evaluation
|
|
996
1004
|
|
|
997
|
-
raise AbortException if method == :assert and
|
|
1005
|
+
raise AbortException if method == :assert and evaluation.failures.any?
|
|
998
1006
|
end
|
|
999
1007
|
end
|
|
1000
1008
|
|
|
@@ -1069,10 +1077,7 @@ module Spectre
|
|
|
1069
1077
|
def await name = DEFAULT_ASYNC_NAME
|
|
1070
1078
|
return unless @threads.key? name
|
|
1071
1079
|
|
|
1072
|
-
threads = @threads
|
|
1073
|
-
|
|
1074
|
-
@threads.delete(name)
|
|
1075
|
-
|
|
1080
|
+
threads = @threads.delete(name)
|
|
1076
1081
|
threads.map(&:join)
|
|
1077
1082
|
end
|
|
1078
1083
|
|
|
@@ -1257,7 +1262,7 @@ module Spectre
|
|
|
1257
1262
|
file = caller
|
|
1258
1263
|
.first
|
|
1259
1264
|
.gsub(/:in .*/, '')
|
|
1260
|
-
.gsub(
|
|
1265
|
+
.gsub(Spectre.pwd, '.')
|
|
1261
1266
|
|
|
1262
1267
|
context = DefinitionContext.new(desc, file, self)
|
|
1263
1268
|
@children << context
|
|
@@ -1307,7 +1312,7 @@ module Spectre
|
|
|
1307
1312
|
file = caller
|
|
1308
1313
|
.first
|
|
1309
1314
|
.gsub(/:in .*/, '')
|
|
1310
|
-
.gsub(
|
|
1315
|
+
.gsub(Spectre.pwd, '.')
|
|
1311
1316
|
|
|
1312
1317
|
with ||= [nil]
|
|
1313
1318
|
|
|
@@ -1552,9 +1557,11 @@ module Spectre
|
|
|
1552
1557
|
resource_files = Dir.glob File.join(resource_path, '**/*')
|
|
1553
1558
|
|
|
1554
1559
|
resource_files.each do |file|
|
|
1555
|
-
file
|
|
1556
|
-
|
|
1557
|
-
|
|
1560
|
+
relative_file = file
|
|
1561
|
+
.delete_prefix(resource_path)
|
|
1562
|
+
.delete_prefix('/')
|
|
1563
|
+
|
|
1564
|
+
@resources[relative_file] = File.expand_path(file)
|
|
1558
1565
|
end
|
|
1559
1566
|
end
|
|
1560
1567
|
|
|
@@ -1574,6 +1581,9 @@ module Spectre
|
|
|
1574
1581
|
require module_name
|
|
1575
1582
|
end
|
|
1576
1583
|
end
|
|
1584
|
+
ensure
|
|
1585
|
+
# return to the previous working directory
|
|
1586
|
+
Dir.chdir(Spectre.pwd)
|
|
1577
1587
|
end
|
|
1578
1588
|
|
|
1579
1589
|
# :nodoc:
|
|
@@ -1663,15 +1673,10 @@ module Spectre
|
|
|
1663
1673
|
file = caller
|
|
1664
1674
|
.first
|
|
1665
1675
|
.gsub(/:in .*/, '')
|
|
1666
|
-
.gsub(
|
|
1667
|
-
|
|
1668
|
-
main_context = @contexts.find { |x| x.desc == name }
|
|
1669
|
-
|
|
1670
|
-
if main_context.nil?
|
|
1671
|
-
main_context = DefinitionContext.new(name, file)
|
|
1672
|
-
@contexts << main_context
|
|
1673
|
-
end
|
|
1676
|
+
.gsub(Spectre.pwd, '.')
|
|
1674
1677
|
|
|
1678
|
+
main_context = DefinitionContext.new(name, file)
|
|
1679
|
+
@contexts << main_context
|
|
1675
1680
|
main_context.instance_eval(&)
|
|
1676
1681
|
end
|
|
1677
1682
|
|
|
@@ -1690,8 +1695,9 @@ module Spectre
|
|
|
1690
1695
|
|
|
1691
1696
|
patterns.each do |pattern|
|
|
1692
1697
|
Dir.glob(pattern).each do |file|
|
|
1693
|
-
|
|
1694
|
-
|
|
1698
|
+
abs_path = File.absolute_path(file)
|
|
1699
|
+
content = File.read abs_path
|
|
1700
|
+
instance_eval(content, abs_path, 1)
|
|
1695
1701
|
end
|
|
1696
1702
|
end
|
|
1697
1703
|
|
metadata
CHANGED
|
@@ -1,84 +1,98 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spectre-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Christian Neubauer
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: debug
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
18
|
+
version: '0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
25
|
+
version: '0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: ectoplasm
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
|
-
- - "
|
|
30
|
+
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "
|
|
37
|
+
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: fiddle
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
40
54
|
- !ruby/object:Gem::Dependency
|
|
41
55
|
name: logger
|
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
|
43
57
|
requirements:
|
|
44
|
-
- - "
|
|
58
|
+
- - ">="
|
|
45
59
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '
|
|
60
|
+
version: '0'
|
|
47
61
|
type: :runtime
|
|
48
62
|
prerelease: false
|
|
49
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
64
|
requirements:
|
|
51
|
-
- - "
|
|
65
|
+
- - ">="
|
|
52
66
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
67
|
+
version: '0'
|
|
54
68
|
- !ruby/object:Gem::Dependency
|
|
55
69
|
name: ostruct
|
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
|
57
71
|
requirements:
|
|
58
|
-
- - "
|
|
72
|
+
- - ">="
|
|
59
73
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0
|
|
74
|
+
version: '0'
|
|
61
75
|
type: :runtime
|
|
62
76
|
prerelease: false
|
|
63
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
78
|
requirements:
|
|
65
|
-
- - "
|
|
79
|
+
- - ">="
|
|
66
80
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0
|
|
81
|
+
version: '0'
|
|
68
82
|
- !ruby/object:Gem::Dependency
|
|
69
83
|
name: stringio
|
|
70
84
|
requirement: !ruby/object:Gem::Requirement
|
|
71
85
|
requirements:
|
|
72
|
-
- - "
|
|
86
|
+
- - ">="
|
|
73
87
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '
|
|
88
|
+
version: '0'
|
|
75
89
|
type: :runtime
|
|
76
90
|
prerelease: false
|
|
77
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
92
|
requirements:
|
|
79
|
-
- - "
|
|
93
|
+
- - ">="
|
|
80
94
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '
|
|
95
|
+
version: '0'
|
|
82
96
|
description: A DSL and command line tool to describe and run automated tests
|
|
83
97
|
email:
|
|
84
98
|
- christian.neubauer@ionos.com
|
|
@@ -113,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
127
|
- !ruby/object:Gem::Version
|
|
114
128
|
version: '0'
|
|
115
129
|
requirements: []
|
|
116
|
-
rubygems_version: 3.6.
|
|
130
|
+
rubygems_version: 3.6.9
|
|
117
131
|
specification_version: 4
|
|
118
132
|
summary: Describe and run automated tests
|
|
119
133
|
test_files: []
|