theorem 1.2.2 → 1.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|