theorem 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 561cfd58d73936664ce10aad722bab0fc21d97a28b421a5cc0e154bbf8f14bfa
4
- data.tar.gz: 9e392733f121689bb139d908730ad2e7008f263e713d5193ede30d31f2309612
3
+ metadata.gz: 433696da9dd29c04e52b86d753dbbc73aba33fdb3e2a14a1c7e03dc4f7f1c2c9
4
+ data.tar.gz: 42f41fc806176cecbcce43441ace89126e751bed7ab23b103b91477451b243c5
5
5
  SHA512:
6
- metadata.gz: 7980418d3772ed5c314893f44cec5cd3cc166d3cf4e193580a0f1c65484e7020119c32db80ebba07e2a53e880e9f3ad5d83e45d6910dd3b3a08561642071abba
7
- data.tar.gz: 25e8132963cab65e4d5822e15c1aa3dc5a8f28f225330a06f9a08bcff8d64a273bcdc86ed42035429e0bd1ac8e79676e0677061d898ba7ad460c781c6e16d7a4
6
+ metadata.gz: 336ef51f1a4b3bfe1b34da109e8ab193a10aff873a3e4151c4d3a754be479bec455aae731886f8a35c769effc1f89b439ef66055b6a62b096b5fa53ec966c3a4
7
+ data.tar.gz: e5454f1c81f833480f2b5eccbe9f516f9a4826c7ae743f47c1e4112123b0c558220b2dde81eb918929622aca286ba67b8679f3a3cc1a71dee14313a80e8f1b9c
@@ -6,9 +6,14 @@ module Theorem
6
6
  class CompletedTest
7
7
  attr_reader :test, :error
8
8
 
9
- def initialize(test, error = nil)
9
+ def initialize(test, error = nil, notary:)
10
10
  @test = test
11
11
  @error = error
12
+ @notary = notary
13
+ end
14
+
15
+ def notary
16
+ @notary
12
17
  end
13
18
 
14
19
  def full_name
@@ -15,6 +15,16 @@ module Theorem
15
15
  mod
16
16
  end
17
17
 
18
+ klass.attr_reader :notary
19
+
20
+ klass.define_method :initialize do
21
+ @notary = Notation.new
22
+ end
23
+
24
+ klass.define_method :notate do |&block|
25
+ block.call(@notary)
26
+ end
27
+
18
28
  klass.extend ClassMethods
19
29
  klass.instance_eval do
20
30
  @before_all ||= Beaker.new
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Theorem
4
+ module Control
5
+ class Notation
6
+ def initialize(state = {})
7
+ @state = state
8
+ end
9
+
10
+ def write(key, value)
11
+ @state[key] = value
12
+ end
13
+
14
+ def read(key)
15
+ @state[key]
16
+ end
17
+
18
+ def dump
19
+ @state
20
+ end
21
+
22
+ def merge(notary)
23
+ Notation.new(@state.merge(notary.dump))
24
+ end
25
+
26
+ def edit(key, &block)
27
+ data = read(key)
28
+ block.call(data)
29
+ write(key, data)
30
+ end
31
+ end
32
+ end
33
+ end
data/src/theorem/test.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require_relative './beaker'
3
+ require_relative 'notation'
3
4
 
4
5
  module Theorem
5
6
  module Control
@@ -11,14 +12,19 @@ module Theorem
11
12
  @block = block
12
13
  @arguments = arguments
13
14
  @metadata = metadata
15
+ @notary = Notation.new
14
16
  end
15
17
 
16
- attr_reader :block, :name, :arguments, :namespace, :metadata
18
+ attr_reader :block, :name, :arguments, :namespace, :metadata, :notary
17
19
 
18
20
  def full_name
19
21
  "#{namespace} #{name}"
20
22
  end
21
23
 
24
+ def notate(&block)
25
+ block.call(notary)
26
+ end
27
+
22
28
  def run!(ctx)
23
29
  ctx.instance_exec self, **arguments, &block
24
30
  end
@@ -100,27 +106,43 @@ module Theorem
100
106
  def run!
101
107
  test_case = new
102
108
 
109
+ # run before all beakers to create state in test case
103
110
  before_failures = run_before_all_beakers(test_case)
111
+
104
112
  if before_failures.any?
105
113
  return before_failures
106
114
  end
107
115
 
116
+ # duplicate the before_all arrangement for the after all hook
117
+ duplicate_test_case = test_case.clone
118
+
108
119
  results = []
109
120
  @tests.each do |test|
110
121
  error ||= run_before_each_beakers(test_case)
111
- error ||= run_test(test, test_case)
112
- error ||= run_after_each_beakers(test_case)
122
+ before_test_case = test_case.clone
123
+
124
+ error ||= run_test(test, before_test_case)
113
125
 
114
- completed_test = CompletedTest.new(test, error)
126
+ error ||= run_after_each_beakers(before_test_case)
127
+
128
+ notary = test_case.notary.merge(test.notary)
129
+
130
+ completed_test = CompletedTest.new(test, error, notary: notary.dump)
115
131
  publish_test_completion(completed_test)
116
132
  results << completed_test
117
133
  end
118
134
 
119
- after_failures = run_after_all_beakers(test_case)
135
+ after_failures = run_after_all_beakers(duplicate_test_case)
136
+
120
137
  if after_failures.any?
121
138
  return after_failures
122
139
  end
123
140
 
141
+ results.each do |completed_test|
142
+ # merge any after_all notations
143
+ completed_test.notary.merge!(duplicate_test_case.notary.dump)
144
+ end
145
+
124
146
  results
125
147
  end
126
148
 
@@ -153,7 +175,7 @@ module Theorem
153
175
  Theorem.handle_exception(error)
154
176
 
155
177
  @tests.map do |test|
156
- CompletedTest.new(test, error)
178
+ CompletedTest.new(test, error, notary: test_case.notary)
157
179
  end
158
180
  end
159
181
 
@@ -192,7 +214,7 @@ module Theorem
192
214
  Theorem.handle_exception(error)
193
215
 
194
216
  @tests.map do |test|
195
- CompletedTest.new(test, error)
217
+ CompletedTest.new(test, error, notary: test_case.notary)
196
218
  end
197
219
  end
198
220
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: theorem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Gregory
@@ -96,6 +96,7 @@ files:
96
96
  - src/theorem/completed_test.rb
97
97
  - src/theorem/harness.rb
98
98
  - src/theorem/hypothesis.rb
99
+ - src/theorem/notation.rb
99
100
  - src/theorem/registry.rb
100
101
  - src/theorem/reporter.rb
101
102
  - src/theorem/test.rb