theorem 1.1.0 → 1.2.0

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