spectre-core 2.1.1 → 2.1.3
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/spectre/assertion.rb +1 -1
- data/lib/spectre/helpers.rb +1 -1
- data/lib/spectre/version.rb +1 -1
- data/lib/spectre.rb +70 -62
- metadata +35 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3e75cee429c0765480965f1e1177c85f5ecf769651332e7167b1be5db8601cda
|
|
4
|
+
data.tar.gz: 6ad3c26cf386b69b57db775bec8fb8e1ae011a8d6abfb21a1aa250fec6198104
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09f0c500ce8ed1416a418b75af0716a6f7bd1083abf3b2d402c0adf381c0ce60bf51e8cb8e06f6f26bb5d19c1c3e8d8034361bcc320821f82835d39b427189f5'
|
|
7
|
+
data.tar.gz: 23d0113096cb9b69f78f40b1ae5ad7c6aa9201593fa9ac3e885f95ad14f53a5343673cbd932aca8603904638b3ef10afea6f81a5e55d47167b604836dc5e310a
|
data/lib/spectre/assertion.rb
CHANGED
data/lib/spectre/helpers.rb
CHANGED
data/lib/spectre/version.rb
CHANGED
data/lib/spectre.rb
CHANGED
|
@@ -258,13 +258,14 @@ module Spectre
|
|
|
258
258
|
counter = 0
|
|
259
259
|
|
|
260
260
|
specs
|
|
261
|
-
.group_by { |x| x.parent.root }
|
|
261
|
+
.group_by { |x| x.parent.root.name }
|
|
262
262
|
.each_value do |spec_group|
|
|
263
|
-
spec_group
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
263
|
+
spec_group
|
|
264
|
+
.sort
|
|
265
|
+
.each do |spec|
|
|
266
|
+
spec_id = "[#{spec.name}]".send(@colors[counter % @colors.length])
|
|
267
|
+
@out.puts "#{spec_id} #{spec.full_desc} #{spec.tags.map { |x| "##{x}" }.join(' ').cyan}"
|
|
268
|
+
end
|
|
268
269
|
|
|
269
270
|
counter += 1
|
|
270
271
|
end
|
|
@@ -273,15 +274,15 @@ module Spectre
|
|
|
273
274
|
##
|
|
274
275
|
# Outputs all the specs for all contexts
|
|
275
276
|
#
|
|
276
|
-
def describe contexts, level = 0
|
|
277
|
-
contexts.each do |context|
|
|
277
|
+
def describe contexts, level = 0, parent: nil
|
|
278
|
+
contexts.select { |x| x.parent == parent }.each do |context|
|
|
278
279
|
@out.puts("#{' ' * level}#{context.desc.send(level.positive? ? :magenta : :blue)}")
|
|
279
280
|
|
|
280
281
|
context.specs.each do |spec|
|
|
281
282
|
@out.puts("#{' ' * (level + 1)}#{spec.desc}")
|
|
282
283
|
end
|
|
283
284
|
|
|
284
|
-
describe(
|
|
285
|
+
describe(contexts, level + 1, parent: context)
|
|
285
286
|
end
|
|
286
287
|
end
|
|
287
288
|
|
|
@@ -802,7 +803,6 @@ module Spectre
|
|
|
802
803
|
DEFAULT_ASYNC_NAME = 'default'
|
|
803
804
|
|
|
804
805
|
@@current = nil
|
|
805
|
-
@@location_cache = {}
|
|
806
806
|
@@skip_count = 0
|
|
807
807
|
|
|
808
808
|
##
|
|
@@ -1071,10 +1071,7 @@ module Spectre
|
|
|
1071
1071
|
def await name = DEFAULT_ASYNC_NAME
|
|
1072
1072
|
return unless @threads.key? name
|
|
1073
1073
|
|
|
1074
|
-
threads = @threads
|
|
1075
|
-
|
|
1076
|
-
@threads.delete(name)
|
|
1077
|
-
|
|
1074
|
+
threads = @threads.delete(name)
|
|
1078
1075
|
threads.map(&:join)
|
|
1079
1076
|
end
|
|
1080
1077
|
|
|
@@ -1185,6 +1182,19 @@ module Spectre
|
|
|
1185
1182
|
@full_desc = "#{@parent.full_desc} #{@desc}"
|
|
1186
1183
|
end
|
|
1187
1184
|
|
|
1185
|
+
def <=>(other)
|
|
1186
|
+
# Split on dash: text part and numeric part
|
|
1187
|
+
self_parts = @name.split('-')
|
|
1188
|
+
other_parts = other.name.split('-')
|
|
1189
|
+
|
|
1190
|
+
text_compare = self_parts[0] <=> other_parts[0]
|
|
1191
|
+
|
|
1192
|
+
# If the text parts are already different, we can return here
|
|
1193
|
+
return text_compare unless text_compare.zero?
|
|
1194
|
+
|
|
1195
|
+
self_parts[1].to_i <=> other_parts[1].to_i
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1188
1198
|
##
|
|
1189
1199
|
# Creates a new +RunContext+ and executes the spec,
|
|
1190
1200
|
# +before+ and +after+ blocks
|
|
@@ -1217,13 +1227,13 @@ module Spectre
|
|
|
1217
1227
|
class DefinitionContext
|
|
1218
1228
|
include Delegate
|
|
1219
1229
|
|
|
1220
|
-
attr_reader :id, :name, :desc, :parent, :full_desc, :
|
|
1230
|
+
attr_reader :id, :name, :desc, :parent, :full_desc, :specs, :file
|
|
1221
1231
|
|
|
1222
|
-
def initialize desc, file, parent = nil
|
|
1232
|
+
def initialize desc, file, engine, parent = nil
|
|
1233
|
+
@engine = engine
|
|
1223
1234
|
@parent = parent
|
|
1224
1235
|
@desc = desc
|
|
1225
1236
|
@file = file
|
|
1226
|
-
@children = []
|
|
1227
1237
|
@specs = []
|
|
1228
1238
|
|
|
1229
1239
|
@setups = []
|
|
@@ -1236,6 +1246,8 @@ module Spectre
|
|
|
1236
1246
|
@name = @parent.name + '-' + @name unless @parent.nil?
|
|
1237
1247
|
|
|
1238
1248
|
@full_desc = @parent.nil? ? @desc : "#{@parent.full_desc} #{@desc}"
|
|
1249
|
+
|
|
1250
|
+
@engine.contexts << self
|
|
1239
1251
|
end
|
|
1240
1252
|
|
|
1241
1253
|
##
|
|
@@ -1245,13 +1257,6 @@ module Spectre
|
|
|
1245
1257
|
@parent ? @parent.root : self
|
|
1246
1258
|
end
|
|
1247
1259
|
|
|
1248
|
-
##
|
|
1249
|
-
# A flattened list of all specs including those of child contexts.
|
|
1250
|
-
#
|
|
1251
|
-
def all_specs
|
|
1252
|
-
@specs + @children.map(&:all_specs).flatten
|
|
1253
|
-
end
|
|
1254
|
-
|
|
1255
1260
|
##
|
|
1256
1261
|
# Creates a new sub context with the given block.
|
|
1257
1262
|
#
|
|
@@ -1261,8 +1266,7 @@ module Spectre
|
|
|
1261
1266
|
.gsub(/:in .*/, '')
|
|
1262
1267
|
.gsub(Dir.pwd, '.')
|
|
1263
1268
|
|
|
1264
|
-
context = DefinitionContext.new(desc, file, self)
|
|
1265
|
-
@children << context
|
|
1269
|
+
context = DefinitionContext.new(desc, file, @engine, self)
|
|
1266
1270
|
context.instance_eval(&)
|
|
1267
1271
|
end
|
|
1268
1272
|
|
|
@@ -1313,8 +1317,14 @@ module Spectre
|
|
|
1313
1317
|
|
|
1314
1318
|
with ||= [nil]
|
|
1315
1319
|
|
|
1316
|
-
|
|
1317
|
-
|
|
1320
|
+
initial_index = @engine
|
|
1321
|
+
.contexts
|
|
1322
|
+
.select { |x| x.root.name == root.name }
|
|
1323
|
+
.flat_map(&:specs)
|
|
1324
|
+
.count + 1
|
|
1325
|
+
|
|
1326
|
+
with.each_with_index do |data, index|
|
|
1327
|
+
spec_index = initial_index + index
|
|
1318
1328
|
name = "#{root.name}-#{spec_index}"
|
|
1319
1329
|
|
|
1320
1330
|
spec = Specification.new(self, name, desc, tags, data, file, block)
|
|
@@ -1324,23 +1334,23 @@ module Spectre
|
|
|
1324
1334
|
end
|
|
1325
1335
|
|
|
1326
1336
|
# :nodoc:
|
|
1327
|
-
def run
|
|
1337
|
+
def run specs
|
|
1328
1338
|
runs = []
|
|
1329
1339
|
|
|
1330
|
-
return runs unless all_specs.any? { |x| specs.include? x }
|
|
1331
|
-
|
|
1332
1340
|
selected = @specs.select { |x| specs.include? x }
|
|
1333
1341
|
|
|
1334
|
-
|
|
1342
|
+
return runs if selected.empty?
|
|
1343
|
+
|
|
1344
|
+
@engine.formatter.scope(@desc, self) do
|
|
1335
1345
|
if selected.any?
|
|
1336
1346
|
setup_bag = nil
|
|
1337
1347
|
|
|
1338
1348
|
if @setups.any?
|
|
1339
|
-
setup_run = RunContext.new(engine, self, :setup) do |run_context|
|
|
1349
|
+
setup_run = RunContext.new(@engine, self, :setup) do |run_context|
|
|
1340
1350
|
@setups.each do |block|
|
|
1341
|
-
engine.formatter.scope('setup', :setup) do
|
|
1342
|
-
engine.logger.correlate do
|
|
1343
|
-
engine.logger.debug("setup \"#{@desc}\"")
|
|
1351
|
+
@engine.formatter.scope('setup', :setup) do
|
|
1352
|
+
@engine.logger.correlate do
|
|
1353
|
+
@engine.logger.debug("setup \"#{@desc}\"")
|
|
1344
1354
|
run_context.execute(nil, &block)
|
|
1345
1355
|
end
|
|
1346
1356
|
end
|
|
@@ -1355,18 +1365,18 @@ module Spectre
|
|
|
1355
1365
|
# Only run specs if setup was successful
|
|
1356
1366
|
if runs.all? { |x| x.status == :success }
|
|
1357
1367
|
runs += selected.map do |spec|
|
|
1358
|
-
engine.logger.correlate do
|
|
1359
|
-
spec.run(engine, @befores, @afters, setup_bag)
|
|
1368
|
+
@engine.logger.correlate do
|
|
1369
|
+
spec.run(@engine, @befores, @afters, setup_bag)
|
|
1360
1370
|
end
|
|
1361
1371
|
end
|
|
1362
1372
|
end
|
|
1363
1373
|
|
|
1364
1374
|
if @teardowns.any?
|
|
1365
|
-
runs << RunContext.new(engine, self, :teardown, setup_bag) do |run_context|
|
|
1375
|
+
runs << RunContext.new(@engine, self, :teardown, setup_bag) do |run_context|
|
|
1366
1376
|
@teardowns.each do |block|
|
|
1367
|
-
engine.formatter.scope('teardown', :teardown) do
|
|
1368
|
-
engine.logger.correlate do
|
|
1369
|
-
engine.logger.debug("teardown \"#{@desc}\"")
|
|
1377
|
+
@engine.formatter.scope('teardown', :teardown) do
|
|
1378
|
+
@engine.logger.correlate do
|
|
1379
|
+
@engine.logger.debug("teardown \"#{@desc}\"")
|
|
1370
1380
|
run_context.execute(nil, &block)
|
|
1371
1381
|
end
|
|
1372
1382
|
end
|
|
@@ -1375,9 +1385,12 @@ module Spectre
|
|
|
1375
1385
|
end
|
|
1376
1386
|
end
|
|
1377
1387
|
|
|
1378
|
-
@
|
|
1379
|
-
|
|
1380
|
-
|
|
1388
|
+
@engine
|
|
1389
|
+
.contexts
|
|
1390
|
+
.select { |x| x.parent == self }
|
|
1391
|
+
.each do |context|
|
|
1392
|
+
@engine.logger.correlate do
|
|
1393
|
+
runs += context.run(specs)
|
|
1381
1394
|
end
|
|
1382
1395
|
end
|
|
1383
1396
|
end
|
|
@@ -1554,9 +1567,11 @@ module Spectre
|
|
|
1554
1567
|
resource_files = Dir.glob File.join(resource_path, '**/*')
|
|
1555
1568
|
|
|
1556
1569
|
resource_files.each do |file|
|
|
1557
|
-
file
|
|
1558
|
-
|
|
1559
|
-
|
|
1570
|
+
relative_file = file
|
|
1571
|
+
.delete_prefix(resource_path)
|
|
1572
|
+
.delete_prefix('/')
|
|
1573
|
+
|
|
1574
|
+
@resources[relative_file] = File.expand_path(file)
|
|
1560
1575
|
end
|
|
1561
1576
|
end
|
|
1562
1577
|
|
|
@@ -1601,8 +1616,7 @@ module Spectre
|
|
|
1601
1616
|
tag_filter = config['tags'] || []
|
|
1602
1617
|
|
|
1603
1618
|
@contexts
|
|
1604
|
-
.
|
|
1605
|
-
.flatten
|
|
1619
|
+
.flat_map(&:specs)
|
|
1606
1620
|
.select do |spec|
|
|
1607
1621
|
(spec_filter.empty? and tag_filter.empty?) or
|
|
1608
1622
|
spec_filter.any? { |x| spec.name.match?("^#{x.gsub('*', '.*')}$") } or
|
|
@@ -1624,10 +1638,9 @@ module Spectre
|
|
|
1624
1638
|
|
|
1625
1639
|
list
|
|
1626
1640
|
.group_by { |x| x.parent.root }
|
|
1627
|
-
.
|
|
1628
|
-
context.run(
|
|
1641
|
+
.flat_map do |context, specs|
|
|
1642
|
+
context.run(specs)
|
|
1629
1643
|
end
|
|
1630
|
-
.flatten
|
|
1631
1644
|
rescue Interrupt
|
|
1632
1645
|
# Do nothing here
|
|
1633
1646
|
end
|
|
@@ -1661,20 +1674,15 @@ module Spectre
|
|
|
1661
1674
|
##
|
|
1662
1675
|
# Describe a test subject
|
|
1663
1676
|
#
|
|
1664
|
-
def describe(
|
|
1677
|
+
def describe(desc, &)
|
|
1665
1678
|
file = caller
|
|
1666
1679
|
.first
|
|
1667
1680
|
.gsub(/:in .*/, '')
|
|
1668
1681
|
.gsub(Dir.pwd, '.')
|
|
1669
1682
|
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
main_context = DefinitionContext.new(name, file)
|
|
1674
|
-
@contexts << main_context
|
|
1675
|
-
end
|
|
1676
|
-
|
|
1677
|
-
main_context.instance_eval(&)
|
|
1683
|
+
DefinitionContext
|
|
1684
|
+
.new(desc, file, self)
|
|
1685
|
+
.instance_eval(&)
|
|
1678
1686
|
end
|
|
1679
1687
|
|
|
1680
1688
|
##
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Christian Neubauer
|
|
@@ -13,72 +13,86 @@ dependencies:
|
|
|
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
|