test_bench-session 2.1.3.2 → 3.0.0.0.pre.2

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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench/session/controls/backtrace/location.rb +46 -0
  3. data/lib/test_bench/session/controls/backtrace.rb +81 -0
  4. data/lib/test_bench/session/controls/comment_disposition.rb +15 -0
  5. data/lib/test_bench/session/controls/event.rb +27 -1
  6. data/lib/test_bench/session/controls/events/aborted.rb +49 -0
  7. data/lib/test_bench/session/controls/events/commented.rb +26 -76
  8. data/lib/test_bench/session/controls/events/context_finished.rb +68 -28
  9. data/lib/test_bench/session/controls/events/context_started.rb +17 -32
  10. data/lib/test_bench/session/controls/events/detailed.rb +26 -76
  11. data/lib/test_bench/session/controls/events/failed.rb +16 -24
  12. data/lib/test_bench/session/controls/events/file_executed.rb +99 -0
  13. data/lib/test_bench/session/controls/events/file_not_found.rb +39 -0
  14. data/lib/test_bench/session/controls/events/file_queued.rb +39 -0
  15. data/lib/test_bench/session/controls/events/skipped.rb +49 -0
  16. data/lib/test_bench/session/controls/events/test_finished.rb +48 -28
  17. data/lib/test_bench/session/controls/events/test_started.rb +17 -32
  18. data/lib/test_bench/session/controls/events.rb +19 -19
  19. data/lib/test_bench/session/controls/exception/message.rb +21 -0
  20. data/lib/test_bench/session/controls/exception/raise.rb +50 -0
  21. data/lib/test_bench/session/controls/exception.rb +55 -21
  22. data/lib/test_bench/session/controls/message.rb +41 -0
  23. data/lib/test_bench/session/controls/{time.rb → metadata.rb} +1 -1
  24. data/lib/test_bench/session/controls/path/apex_directory.rb +74 -0
  25. data/lib/test_bench/session/controls/path/file/create.rb +111 -0
  26. data/lib/test_bench/session/controls/path/file.rb +40 -0
  27. data/lib/test_bench/session/controls/path.rb +85 -0
  28. data/lib/test_bench/session/controls/random.rb +1 -1
  29. data/lib/test_bench/session/controls/result.rb +3 -11
  30. data/lib/test_bench/session/controls/{events/event_data.rb → sequence.rb} +4 -2
  31. data/lib/test_bench/session/controls/status.rb +90 -0
  32. data/lib/test_bench/session/controls/telemetry.rb +13 -0
  33. data/lib/test_bench/session/controls/telemetry_sink.rb +29 -1
  34. data/lib/test_bench/session/controls/text.rb +31 -0
  35. data/lib/test_bench/session/controls/title.rb +12 -12
  36. data/lib/test_bench/session/controls.rb +31 -26
  37. data/lib/test_bench/session/defaults.rb +15 -0
  38. data/lib/test_bench/session/events.rb +12 -15
  39. data/lib/test_bench/session/exception/format_backtrace/substitute.rb +32 -0
  40. data/lib/test_bench/session/exception/format_backtrace.rb +112 -0
  41. data/lib/test_bench/session/isolate/substitute.rb +43 -0
  42. data/lib/test_bench/session/isolate.rb +157 -0
  43. data/lib/test_bench/session/result.rb +42 -0
  44. data/lib/test_bench/session/session.rb +137 -164
  45. data/lib/test_bench/session/status.rb +58 -0
  46. data/lib/test_bench/session/substitute/sink.rb +30 -45
  47. data/lib/test_bench/session/substitute.rb +91 -52
  48. data/lib/test_bench/session/trace.rb +51 -0
  49. data/lib/test_bench/session.rb +15 -15
  50. metadata +53 -45
  51. data/lib/test_bench/session/controls/comment.rb +0 -105
  52. data/lib/test_bench/session/controls/detail.rb +0 -91
  53. data/lib/test_bench/session/controls/events/context_skipped.rb +0 -47
  54. data/lib/test_bench/session/controls/events/fixture_finished.rb +0 -53
  55. data/lib/test_bench/session/controls/events/fixture_started.rb +0 -47
  56. data/lib/test_bench/session/controls/events/test_skipped.rb +0 -47
  57. data/lib/test_bench/session/controls/failure.rb +0 -19
  58. data/lib/test_bench/session/controls/fixture.rb +0 -19
  59. data/lib/test_bench/session/controls/output/detail.rb +0 -29
  60. data/lib/test_bench/session/controls/output.rb +0 -55
  61. data/lib/test_bench/session/controls/process_id.rb +0 -7
  62. data/lib/test_bench/session/controls/substitute/path.rb +0 -33
  63. data/lib/test_bench/session/output/get.rb +0 -27
  64. data/lib/test_bench/session/output/writer/buffer/interactive/viewport.rb +0 -165
  65. data/lib/test_bench/session/output/writer/buffer/interactive.rb +0 -139
  66. data/lib/test_bench/session/output/writer/buffer.rb +0 -27
  67. data/lib/test_bench/session/output/writer/defaults.rb +0 -17
  68. data/lib/test_bench/session/output/writer/substitute.rb +0 -17
  69. data/lib/test_bench/session/output/writer.rb +0 -95
  70. data/lib/test_bench/session/output.rb +0 -384
  71. data/lib/test_bench/session/projection.rb +0 -28
  72. data/lib/test_bench/session/store.rb +0 -59
  73. data/lib/test_bench/session/substitute/path.rb +0 -63
@@ -1,17 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer
5
- module Substitute
6
- def self.build
7
- Writer.build
8
- end
9
-
10
- class Writer < Writer
11
- include TestBench::Output::Writer::Substitute
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,95 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer < TestBench::Output::Writer
5
- attr_accessor :peer
6
-
7
- def alternate_device
8
- @alternate_device ||= TestBench::Output::Device::Substitute.build
9
- end
10
- attr_writer :alternate_device
11
-
12
- def indentation_depth
13
- @indentation_depth ||= 0
14
- end
15
- attr_writer :indentation_depth
16
-
17
- def configure
18
- device = self.device
19
-
20
- self.alternate_device = TestBench::Output::Device::Null.build
21
-
22
- Buffer.configure(self, device:)
23
- end
24
-
25
- def self.follow(previous_writer)
26
- device = previous_writer
27
-
28
- alternate_device = previous_writer.peer
29
- alternate_device ||= TestBench::Output::Device::Null.build
30
-
31
- previous_digest = previous_writer.digest
32
- digest = previous_digest.clone
33
-
34
- writer = new
35
- writer.sync = false
36
- writer.device = device
37
- writer.alternate_device = alternate_device
38
- writer.styling_policy = previous_writer.styling_policy
39
- writer.digest = digest
40
- writer.sequence = previous_writer.sequence
41
- writer.column_sequence = previous_writer.column_sequence
42
- writer.indentation_depth = previous_writer.indentation_depth
43
- writer.digest = previous_writer.digest.clone
44
- writer
45
- end
46
-
47
- def branch
48
- alternate = self.class.follow(self)
49
- primary = self.class.follow(self)
50
-
51
- primary.peer = alternate
52
-
53
- return primary, alternate
54
- end
55
-
56
- def indent
57
- indentation = ' ' * indentation_depth
58
-
59
- print(indentation)
60
- end
61
-
62
- def flush
63
- buffer.flush(device, alternate_device)
64
- end
65
-
66
- def write!(data)
67
- device.write(data)
68
- alternate_device.write(data)
69
- end
70
-
71
- def increase_indentation
72
- self.indentation_depth += 1
73
- end
74
- alias :indent! :increase_indentation
75
-
76
- def decrease_indentation
77
- self.indentation_depth -= 1
78
- end
79
- alias :deindent! :decrease_indentation
80
-
81
- def follows?(other_writer)
82
- if sequence < other_writer.sequence
83
- false
84
- elsif device == other_writer
85
- true
86
- elsif device == other_writer.peer
87
- true
88
- else
89
- false
90
- end
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,384 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- include TestBench::Output
5
- include Events
6
-
7
- def pending_writer
8
- @pending_writer ||= Writer::Substitute.build
9
- end
10
- attr_writer :pending_writer
11
-
12
- def passing_writer
13
- @passing_writer ||= Writer::Substitute.build
14
- end
15
- attr_writer :passing_writer
16
-
17
- def failing_writer
18
- @failing_writer ||= Writer::Substitute.build
19
- end
20
- attr_writer :failing_writer
21
-
22
- def failures
23
- @failures ||= 0
24
- end
25
- attr_writer :failures
26
-
27
- def mode
28
- @mode ||= Mode.initial
29
- end
30
- attr_writer :mode
31
-
32
- def branch_count
33
- @branch_count ||= 0
34
- end
35
- attr_writer :branch_count
36
-
37
- def detail_policy
38
- @detail_policy ||= Detail.default
39
- end
40
- alias :detail :detail_policy
41
- attr_writer :detail_policy
42
-
43
- def configure(detail: nil, **arguments)
44
- if not detail.nil?
45
- self.detail_policy = detail
46
- end
47
-
48
- Writer.configure(self, **arguments, attr_name: :pending_writer)
49
- end
50
-
51
- def receive(event_data)
52
- case event_data.type
53
- when ContextStarted.event_type, TestStarted.event_type
54
- branch
55
- end
56
-
57
- if initial?
58
- handle(event_data)
59
-
60
- else
61
- self.mode = Mode.failing
62
- handle(event_data)
63
-
64
- self.mode = Mode.passing
65
- handle(event_data)
66
-
67
- self.mode = Mode.pending
68
- handle(event_data)
69
- end
70
-
71
- case event_data.type
72
- when ContextFinished.event_type, TestFinished.event_type
73
- _title, result = event_data.data
74
- merge(result)
75
- end
76
- end
77
-
78
- handle ContextStarted do |context_started|
79
- title = context_started.title
80
-
81
- if not title.nil?
82
- writer.
83
- indent.
84
- style(:green).
85
- puts(title)
86
-
87
- writer.indent!
88
-
89
- if branch_count == 1
90
- self.failures = 0
91
- end
92
- end
93
- end
94
-
95
- handle ContextFinished do |context_finished|
96
- title = context_finished.title
97
-
98
- if not title.nil?
99
- writer.deindent!
100
-
101
- if branch_count == 1
102
- writer.puts
103
-
104
- if failing? && failures > 0
105
- writer.
106
- style(:bold, :red).
107
- puts("Failure#{'s' if not failures == 1}: #{failures}")
108
-
109
- writer.puts
110
- end
111
- end
112
- end
113
- end
114
-
115
- handle ContextSkipped do |context_skipped|
116
- title = context_skipped.title
117
-
118
- if not writer.styling?
119
- title = "#{title} (skipped)"
120
- end
121
-
122
- writer.
123
- indent.
124
- style(:yellow).
125
- puts(title)
126
- end
127
-
128
- handle TestStarted do |test_started|
129
- title = test_started.title
130
-
131
- if title.nil?
132
- if passing?
133
- return
134
- else
135
- title = 'Test'
136
- end
137
- end
138
-
139
- writer.indent
140
-
141
- if passing?
142
- writer.style(:green)
143
- elsif failing?
144
- if not writer.styling?
145
- title = "#{title} (failed)"
146
- end
147
-
148
- writer.style(:bold, :red)
149
- elsif pending?
150
- writer.style(:faint)
151
- end
152
-
153
- writer.puts(title)
154
-
155
- writer.indent!
156
- end
157
-
158
- handle TestFinished do |test_finished|
159
- title = test_finished.title
160
-
161
- if passing? && title.nil?
162
- return
163
- end
164
-
165
- writer.deindent!
166
- end
167
-
168
- handle TestSkipped do |test_skipped|
169
- title = test_skipped.title
170
-
171
- if not writer.styling?
172
- title = "#{title} (skipped)"
173
- end
174
-
175
- writer.
176
- indent.
177
- style(:yellow).
178
- puts(title)
179
- end
180
-
181
- handle Failed do |failed|
182
- message = failed.message
183
-
184
- if failing?
185
- self.failures += 1
186
- end
187
-
188
- writer
189
- .indent
190
- .style(:red)
191
- .puts(message)
192
- end
193
-
194
- handle Detailed do |detailed|
195
- if not detail?
196
- return
197
- end
198
-
199
- text = detailed.text
200
- quote = detailed.quote
201
- heading = detailed.heading
202
-
203
- comment(text, quote, heading)
204
- end
205
-
206
- handle Commented do |commented|
207
- text = commented.text
208
- quote = commented.quote
209
- heading = commented.heading
210
-
211
- comment(text, quote, heading)
212
- end
213
-
214
- def comment(text, quote, heading)
215
- if not heading.nil?
216
- writer.
217
- indent.
218
- style(:bold, :underline).
219
- puts(heading)
220
-
221
- if not writer.styling?
222
- writer.
223
- indent.
224
- puts('- - -')
225
- end
226
- end
227
-
228
- if text.empty?
229
- writer.
230
- indent.
231
- style(:faint, :italic).
232
- puts('(empty)')
233
- return
234
- end
235
-
236
- if not quote
237
- writer.
238
- indent.
239
- puts(text)
240
- else
241
- text.each_line(chomp: true) do |line|
242
- writer.
243
- indent
244
-
245
- if writer.styling?
246
- writer.
247
- style(:white_bg).
248
- print(' ').
249
- style(:reset_bg).
250
- print(' ')
251
- else
252
- writer.
253
- print('> ')
254
- end
255
-
256
- writer.puts(line)
257
- end
258
- end
259
- end
260
-
261
- def current_writer
262
- if initial? || pending?
263
- pending_writer
264
- elsif passing?
265
- passing_writer
266
- elsif failing?
267
- failing_writer
268
- end
269
- end
270
- alias :writer :current_writer
271
-
272
- def branch
273
- if branch_count.zero?
274
- self.mode = Mode.pending
275
-
276
- pending_writer.sync = false
277
-
278
- parent_writer = pending_writer
279
- else
280
- parent_writer = passing_writer
281
- end
282
-
283
- self.branch_count += 1
284
-
285
- self.passing_writer, self.failing_writer = parent_writer.branch
286
- end
287
-
288
- def merge(result)
289
- self.branch_count -= 1
290
-
291
- if not branched?
292
- pending_writer.sync = true
293
-
294
- self.mode = Mode.initial
295
- end
296
-
297
- if result
298
- writer = passing_writer
299
- else
300
- writer = failing_writer
301
- end
302
-
303
- writer.flush
304
-
305
- self.passing_writer = writer.device
306
- self.failing_writer = writer.alternate_device
307
- end
308
-
309
- def branched?
310
- branch_count > 0
311
- end
312
-
313
- def initial?
314
- mode == Mode.initial
315
- end
316
-
317
- def pending?
318
- mode == Mode.pending
319
- end
320
-
321
- def passing?
322
- mode == Mode.passing
323
- end
324
-
325
- def failing?
326
- mode == Mode.failing
327
- end
328
-
329
- def detail?
330
- Detail.detail?(detail_policy, mode)
331
- end
332
-
333
- module Mode
334
- def self.initial = :initial
335
- def self.pending = :pending
336
- def self.passing = :passing
337
- def self.failing = :failing
338
- end
339
-
340
- module Detail
341
- Error = Class.new(RuntimeError)
342
-
343
- def self.detail?(policy, mode)
344
- assure_detail(policy, mode)
345
- end
346
-
347
- def self.assure_detail(policy, mode=nil)
348
- mode ||= Mode.initial
349
-
350
- case policy
351
- when on
352
- true
353
- when off
354
- false
355
- when failure
356
- if mode == Mode.failing || mode == Mode.initial
357
- true
358
- else
359
- false
360
- end
361
- else
362
- raise Error, "Unknown detail policy #{policy.inspect}"
363
- end
364
- end
365
-
366
- def self.on = :on
367
- def self.off = :off
368
- def self.failure = :failure
369
-
370
- def self.default
371
- policy = ENV.fetch('TEST_BENCH_DETAIL') do
372
- return default!
373
- end
374
-
375
- policy.to_sym
376
- end
377
-
378
- def self.default!
379
- :failure
380
- end
381
- end
382
- end
383
- end
384
- end
@@ -1,28 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Projection
4
- include Telemetry::Sink::Projection
5
- include Events
6
-
7
- receiver_name :session
8
-
9
- apply Failed do
10
- session.record_failure
11
- end
12
-
13
- apply TestSkipped do
14
- session.record_skip
15
- end
16
-
17
- apply ContextSkipped do
18
- session.record_skip
19
- end
20
-
21
- apply TestFinished do |test_finished|
22
- if test_finished.result
23
- session.record_assertion
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,59 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Store
4
- PutError = Class.new(RuntimeError)
5
-
6
- attr_accessor :put_session
7
-
8
- def self.configure(receiver, attr_name: nil)
9
- attr_name ||= :session_store
10
-
11
- receiver.public_send(:"#{attr_name}=", instance)
12
- end
13
-
14
- def self.instance
15
- @instance ||= new
16
- end
17
-
18
- def self.put(...) = instance.put(...)
19
- def self.put?(...) = instance.put?(...)
20
- def self.reset(...) = instance.reset(...)
21
- def self.get(...) = instance.get(...)
22
- def self.fetch(...) = instance.fetch(...)
23
-
24
- def put(session)
25
- if not put_session.nil?
26
- raise PutError, "Already put a session"
27
- end
28
-
29
- self.put_session = session
30
- end
31
-
32
- def put?(session=nil)
33
- if not session.nil?
34
- put_session == session
35
- else
36
- !put_session.nil?
37
- end
38
- end
39
-
40
- def reset(session=nil)
41
- self.put_session = session
42
- end
43
-
44
- def get
45
- put_session
46
- end
47
-
48
- def fetch
49
- self.put_session ||= new_session
50
- end
51
-
52
- def new_session
53
- Session.build do |telemetry|
54
- Output.register_telemetry(telemetry)
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,63 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Substitute
4
- class Path
5
- def segments
6
- @segments ||= []
7
- end
8
- attr_writer :segments
9
-
10
- def match?(*segments, segment)
11
- if not segment == self.segments.last
12
- return false
13
- end
14
-
15
- segment_iterator = self.segments.to_enum
16
-
17
- control_segments = [*segments, segment]
18
-
19
- control_segments.all? do |control_segment|
20
- begin
21
- next_segment = segment_iterator.next
22
- end until next_segment == control_segment
23
- true
24
-
25
- rescue StopIteration
26
- false
27
- end
28
- end
29
-
30
- def push_segment(segment)
31
- segments << segment
32
- end
33
- alias :push :push_segment
34
- alias :<< :push
35
-
36
- def pop_segment(compare_segment=nil)
37
- segments.pop
38
- end
39
- alias :pop :pop_segment
40
-
41
- def copy(receiver)
42
- path = self.class.new
43
-
44
- segments.each do |segment|
45
- path << segment
46
- end
47
-
48
- receiver.path = path
49
- path
50
- end
51
-
52
- def eql?(compare)
53
- if compare.is_a?(self.class)
54
- segments == compare.segments
55
- else
56
- false
57
- end
58
- end
59
- alias :== :eql?
60
- end
61
- end
62
- end
63
- end