theorem 1.2.2 → 1.2.5
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/src/theorem/beaker.rb +15 -2
- data/src/theorem/harness.rb +16 -1
- data/src/theorem/hypothesis.rb +2 -0
- data/src/theorem/let.rb +57 -0
- data/src/theorem/notation.rb +1 -1
- data/src/theorem/reporter.rb +2 -1
- data/src/theorem/test.rb +13 -24
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee6da97e143aea34cbdcac8dc8399267376345c958186bb4fcd3db2a282553e8
|
4
|
+
data.tar.gz: 7312e470f9ad0442de46f23b8d755389a6a3c43891c1f98ed9fce1ab4ae31036
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 721afc1fff1e6dee399907cadfb453633ec2b848b2e847968e0ca56f7db490bb69100e3887faa3769653c7fd090ece96e3aa2527f9cb890030905063302b5ae2
|
7
|
+
data.tar.gz: 932e5c189ed8c47d3c4e96da2591bd54d17bd5c3abfb0d480db0093823dbd40d76f84ac329bcaab47b2271e364abb32ce192306fdee197e6160ab86f6d63610d
|
data/src/theorem/beaker.rb
CHANGED
@@ -50,6 +50,19 @@ module Theorem
|
|
50
50
|
@state = []
|
51
51
|
end
|
52
52
|
|
53
|
+
def clone
|
54
|
+
@state.map!(&:clone)
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
58
|
+
def reverse_run!(ctx, **params)
|
59
|
+
ctx.instance_exec @state.reverse, ctx, params do |state, ctx, params|
|
60
|
+
state.each do |b|
|
61
|
+
ctx.instance_exec **params, &b
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
53
66
|
def run!(ctx)
|
54
67
|
ctx.instance_exec @state, ctx do |state, ctx|
|
55
68
|
state.each do |b|
|
@@ -62,8 +75,8 @@ module Theorem
|
|
62
75
|
@state.empty?
|
63
76
|
end
|
64
77
|
|
65
|
-
def
|
66
|
-
@state.
|
78
|
+
def concat(beaker)
|
79
|
+
@state.concat beaker.instance_variable_get('@state')
|
67
80
|
end
|
68
81
|
|
69
82
|
def prepare(&block)
|
data/src/theorem/harness.rb
CHANGED
@@ -27,7 +27,8 @@ module Theorem
|
|
27
27
|
inner.suite_finished_subscribers.each do |subscriber|
|
28
28
|
subscriber.call(results, duration)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
|
+
inner.instance_exec results, &mod.run_exit
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -39,10 +40,18 @@ module Theorem
|
|
39
40
|
@on_load_tests = block
|
40
41
|
end
|
41
42
|
|
43
|
+
def on_exit(&block)
|
44
|
+
@on_exit = block
|
45
|
+
end
|
46
|
+
|
42
47
|
def on_run(&block)
|
43
48
|
@on_run = block
|
44
49
|
end
|
45
50
|
|
51
|
+
def run_exit
|
52
|
+
@on_exit || default_exit
|
53
|
+
end
|
54
|
+
|
46
55
|
def run_loader
|
47
56
|
@on_run || default_runner
|
48
57
|
end
|
@@ -53,6 +62,12 @@ module Theorem
|
|
53
62
|
|
54
63
|
private
|
55
64
|
|
65
|
+
def default_exit
|
66
|
+
lambda do |results|
|
67
|
+
exit results.any?(&:failed?) ? 1 : 0
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
56
71
|
def default_loader
|
57
72
|
lambda do |options|
|
58
73
|
directory = options[:directory] || '.'
|
data/src/theorem/hypothesis.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'completed_test'
|
|
4
4
|
require_relative 'beaker'
|
5
5
|
require_relative 'registry'
|
6
6
|
require_relative 'test'
|
7
|
+
require_relative 'let'
|
7
8
|
|
8
9
|
module Theorem
|
9
10
|
module Control
|
@@ -25,6 +26,7 @@ module Theorem
|
|
25
26
|
block.call(@notary)
|
26
27
|
end
|
27
28
|
|
29
|
+
klass.extend Let
|
28
30
|
klass.extend ClassMethods
|
29
31
|
klass.instance_eval do
|
30
32
|
@before_all ||= Beaker.new
|
data/src/theorem/let.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Theorem
|
4
|
+
module Control
|
5
|
+
# compatibility with let in rspec
|
6
|
+
module Let
|
7
|
+
def let(name, &block)
|
8
|
+
setup_let(name, &block)
|
9
|
+
instance_exec @let_registry do |registry|
|
10
|
+
@before_each.prepare do
|
11
|
+
define_singleton_method name do
|
12
|
+
raise "can't find #{name}" unless registry[:let][name]
|
13
|
+
|
14
|
+
registry[:let][name][:value] ||= instance_exec ®istry[:let][name][:block]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
@after_each.prepare do
|
19
|
+
registry[:let][name][:value] = nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
alias_method :each_with, :let
|
24
|
+
|
25
|
+
def let_it_be(name, &block)
|
26
|
+
setup_let(name, :let_it_be, &block)
|
27
|
+
instance_exec @let_registry do |registry|
|
28
|
+
@before_all.prepare do
|
29
|
+
define_singleton_method name do
|
30
|
+
raise "can't find #{name}" unless registry[:let_it_be][name]
|
31
|
+
|
32
|
+
registry[:let_it_be][name][:value] ||= instance_exec ®istry[:let_it_be][name][:block]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@after_all.prepare do
|
36
|
+
registry[:let_it_be][name][:value] = nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
alias_method :all_with, :let_it_be
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def setup_let(name, type=:let, &block)
|
45
|
+
@let_registry ||= {}
|
46
|
+
@let_registry[type] ||= {}
|
47
|
+
@let_registry[type][name] = { block: block, value: nil }
|
48
|
+
|
49
|
+
define_singleton_method name do
|
50
|
+
raise "can't find #{name}" unless @let_registry[type][name]
|
51
|
+
|
52
|
+
@let_registry[type][name][:value] ||= @let_registry[type][name][:block].call
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/src/theorem/notation.rb
CHANGED
data/src/theorem/reporter.rb
CHANGED
@@ -7,7 +7,8 @@ module Theorem
|
|
7
7
|
def self.extended(mod)
|
8
8
|
mod.extend(mod)
|
9
9
|
mod.define_singleton_method :included do |root|
|
10
|
-
mod.subscriptions
|
10
|
+
subscriptions = mod.subscriptions || []
|
11
|
+
subscriptions.each do |subscription, handler|
|
11
12
|
mod.instance_exec root, subscription, handler do |root, sub, handle|
|
12
13
|
root.send(sub, &handle)
|
13
14
|
end
|
data/src/theorem/test.rb
CHANGED
@@ -33,19 +33,20 @@ module Theorem
|
|
33
33
|
# module
|
34
34
|
module ClassMethods
|
35
35
|
def inherited(klass)
|
36
|
+
klass.extend ClassMethods
|
36
37
|
klass.include(control)
|
37
38
|
klass.instance_exec self do |me|
|
38
39
|
@parent_before_all ||= []
|
39
|
-
@
|
40
|
+
@before_all.concat me.before_all_beaker.clone
|
40
41
|
|
41
42
|
@parent_before_each ||= []
|
42
|
-
@
|
43
|
+
@before_each.concat me.before_each_beaker.clone
|
43
44
|
|
44
45
|
@parent_after_each ||= []
|
45
|
-
@
|
46
|
+
@after_each.concat me.after_each_beaker.clone
|
46
47
|
|
47
48
|
@parent_after_all ||= []
|
48
|
-
@
|
49
|
+
@after_all.concat me.after_all_beaker.clone
|
49
50
|
end
|
50
51
|
super
|
51
52
|
end
|
@@ -63,11 +64,11 @@ module Theorem
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def after_each(&block)
|
66
|
-
@after_each.
|
67
|
+
@after_each.prepare(&block)
|
67
68
|
end
|
68
69
|
|
69
70
|
def after_all(&block)
|
70
|
-
@after_all.
|
71
|
+
@after_all.prepare(&block)
|
71
72
|
end
|
72
73
|
|
73
74
|
def experiments(klass, **opts, &block)
|
@@ -104,6 +105,8 @@ module Theorem
|
|
104
105
|
end
|
105
106
|
|
106
107
|
def run!
|
108
|
+
return [] if @tests.empty?
|
109
|
+
|
107
110
|
test_case = new
|
108
111
|
|
109
112
|
# run before all beakers to create state in test case
|
@@ -129,7 +132,7 @@ module Theorem
|
|
129
132
|
|
130
133
|
before_test_case = test_case.clone
|
131
134
|
error ||= run_test(test, before_test_case)
|
132
|
-
error ||= run_after_each_beakers(before_test_case)
|
135
|
+
error ||= run_after_each_beakers(before_test_case, error: error)
|
133
136
|
|
134
137
|
notary = test_case.notary.merge(test.notary)
|
135
138
|
|
@@ -183,11 +186,7 @@ module Theorem
|
|
183
186
|
end
|
184
187
|
|
185
188
|
def run_after_all_beakers(results, test_case)
|
186
|
-
@after_all.
|
187
|
-
|
188
|
-
@parent_after_all&.each do |beaker|
|
189
|
-
beaker.run!(test_case)
|
190
|
-
end
|
189
|
+
@after_all.reverse_run!(test_case)
|
191
190
|
|
192
191
|
[]
|
193
192
|
rescue Exception => error
|
@@ -201,12 +200,8 @@ module Theorem
|
|
201
200
|
results
|
202
201
|
end
|
203
202
|
|
204
|
-
def run_after_each_beakers(test_case)
|
205
|
-
@after_each.
|
206
|
-
|
207
|
-
@parent_after_each&.each do |beaker|
|
208
|
-
beaker.run!(test_case)
|
209
|
-
end
|
203
|
+
def run_after_each_beakers(test_case, **params)
|
204
|
+
@after_each.reverse_run!(test_case, **params)
|
210
205
|
nil
|
211
206
|
rescue Exception => error
|
212
207
|
Theorem.handle_exception(error)
|
@@ -215,9 +210,6 @@ module Theorem
|
|
215
210
|
end
|
216
211
|
|
217
212
|
def run_before_each_beakers(test_case)
|
218
|
-
@parent_before_each&.each do |beaker|
|
219
|
-
beaker.run!(test_case)
|
220
|
-
end
|
221
213
|
@before_each.run!(test_case)
|
222
214
|
nil
|
223
215
|
rescue Exception => error
|
@@ -227,9 +219,6 @@ module Theorem
|
|
227
219
|
end
|
228
220
|
|
229
221
|
def run_before_all_beakers(test_case)
|
230
|
-
@parent_before_all&.each do |beaker|
|
231
|
-
beaker.run!(test_case)
|
232
|
-
end
|
233
222
|
@before_all.run!(test_case)
|
234
223
|
[]
|
235
224
|
rescue Exception => error
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: theorem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Gregory
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: extended_dir
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: parallel
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: simple and extensible test library toolkit
|
112
126
|
email: sean.christopher.gregory@gmail.com
|
113
127
|
executables:
|
@@ -124,6 +138,7 @@ files:
|
|
124
138
|
- src/theorem/completed_test.rb
|
125
139
|
- src/theorem/harness.rb
|
126
140
|
- src/theorem/hypothesis.rb
|
141
|
+
- src/theorem/let.rb
|
127
142
|
- src/theorem/notation.rb
|
128
143
|
- src/theorem/registry.rb
|
129
144
|
- src/theorem/reporter.rb
|