test_bench 1.0.1.1 → 1.1.0.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench.rb +9 -9
  3. data/lib/test_bench/cli.rb +2 -2
  4. data/lib/test_bench/cli/parse_arguments.rb +31 -18
  5. data/lib/test_bench/controls.rb +5 -1
  6. data/lib/test_bench/controls/output/batch_data.rb +52 -0
  7. data/lib/test_bench/controls/output/detail_setting.rb +29 -0
  8. data/lib/test_bench/controls/output/exercise.rb +7 -0
  9. data/lib/test_bench/controls/output/log_level.rb +7 -0
  10. data/lib/test_bench/controls/output/summary/error.rb +0 -16
  11. data/lib/test_bench/controls/output/summary/session.rb +20 -0
  12. data/lib/test_bench/controls/pattern.rb +6 -2
  13. data/lib/test_bench/controls/time.rb +18 -0
  14. data/lib/test_bench/fixture +1 -0
  15. data/lib/test_bench/fixture.rb +1 -0
  16. data/lib/test_bench/output.rb +14 -2
  17. data/lib/test_bench/output/batch_data.rb +17 -0
  18. data/lib/test_bench/output/buffer.rb +112 -0
  19. data/lib/test_bench/output/log.rb +27 -0
  20. data/lib/test_bench/output/raw.rb +353 -0
  21. data/lib/test_bench/output/summary.rb +146 -0
  22. data/lib/test_bench/output/summary/session.rb +94 -0
  23. data/lib/test_bench/output/writer.rb +2 -2
  24. data/lib/test_bench/run.rb +7 -7
  25. metadata +15 -12
  26. data/lib/test_bench/controls/output/summary/run.rb +0 -59
  27. data/lib/test_bench/output/build.rb +0 -51
  28. data/lib/test_bench/output/levels/debug.rb +0 -229
  29. data/lib/test_bench/output/levels/failure.rb +0 -31
  30. data/lib/test_bench/output/levels/none.rb +0 -13
  31. data/lib/test_bench/output/levels/pass.rb +0 -286
  32. data/lib/test_bench/output/levels/summary.rb +0 -21
  33. data/lib/test_bench/output/summary/error.rb +0 -77
  34. data/lib/test_bench/output/summary/run.rb +0 -102
  35. data/lib/test_bench/output/summary/run/print.rb +0 -98
@@ -1,31 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Levels
4
- class Failure
5
- include TestBench::Fixture::Output
6
-
7
- include Output::PrintError
8
- include Output::Summary::Error
9
-
10
- def self.build(omit_backtrace_pattern: nil, reverse_backtraces: nil, writer: nil, styling: nil, device: nil)
11
- warn "Warning: #{self} is deprecated. It will remain in the TestBench v2 series, but will be removed from TestBench v3"
12
-
13
- instance = new
14
-
15
- instance.omit_backtrace_pattern = omit_backtrace_pattern unless omit_backtrace_pattern.nil?
16
- instance.reverse_backtraces = reverse_backtraces unless reverse_backtraces.nil?
17
-
18
- Writer.configure(instance, writer: writer, styling: styling, device: device)
19
-
20
- instance
21
- end
22
-
23
- def error(error)
24
- print_error(error)
25
-
26
- writer.newline
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,13 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Levels
4
- class None < Fixture::Output::Null
5
- def self.build
6
- warn "Warning: #{self} is deprecated. It will remain in the TestBench v2 series, but will be removed from TestBench v3"
7
-
8
- new
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,286 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Levels
4
- class Pass
5
- include TestBench::Fixture::Output
6
-
7
- include Writer::Dependency
8
-
9
- include PrintError
10
-
11
- include Output::Summary::Error
12
- include Output::Summary::Run
13
-
14
- attr_accessor :previous_error
15
-
16
- def previous_byte_offset
17
- @previous_byte_offset ||= 0
18
- end
19
- attr_writer :previous_byte_offset
20
-
21
- def assert_block_stack
22
- @assert_block_stack ||= AssertBlockStack.new(writer)
23
- end
24
- attr_writer :assert_block_stack
25
-
26
- def test_stack
27
- @test_stack ||= []
28
- end
29
- attr_writer :test_stack
30
-
31
- def self.build(omit_backtrace_pattern: nil, reverse_backtraces: nil, writer: nil, styling: nil, device: nil)
32
- instance = new
33
-
34
- instance.omit_backtrace_pattern = omit_backtrace_pattern unless omit_backtrace_pattern.nil?
35
- instance.reverse_backtraces = reverse_backtraces unless reverse_backtraces.nil?
36
-
37
- Writer.configure(instance, writer: writer, styling: styling, device: device)
38
- Timer.configure(instance)
39
-
40
- instance
41
- end
42
-
43
- def comment(text)
44
- writer
45
- .indent
46
- .text(text)
47
- .newline
48
- end
49
-
50
- def error(error)
51
- self.previous_error = error
52
- end
53
-
54
- def print_previous_error
55
- print_error(previous_error)
56
-
57
- self.previous_error = nil
58
- end
59
-
60
- def start_test(_)
61
- test_stack.push(true)
62
- end
63
-
64
- def finish_test(title, result)
65
- test_stack.pop
66
-
67
- unless result && title.nil?
68
- writer.indent
69
-
70
- writer.escape_code(:bold) unless result
71
-
72
- fg_color = result ? :green : :red
73
-
74
- writer
75
- .escape_code(fg_color)
76
- .text(title || 'Test')
77
- .escape_code(:reset_fg)
78
-
79
- writer.escape_code(:reset_intensity) unless result
80
-
81
- writer.newline
82
- end
83
-
84
- unless previous_error.nil?
85
- writer.increase_indentation
86
-
87
- print_previous_error
88
-
89
- writer.decrease_indentation
90
- end
91
-
92
- unless result
93
- assert_block_stack.print_captured_text
94
- end
95
- end
96
-
97
- def skip_test(title)
98
- title ||= 'Test'
99
-
100
- writer.indent
101
-
102
- if writer.styling?
103
- writer
104
- .escape_code(:yellow)
105
- .text(title)
106
- .escape_code(:reset_fg)
107
- else
108
- writer.text("#{title} (skipped)")
109
- end
110
-
111
- writer.newline
112
- end
113
-
114
- def enter_context(title)
115
- test_stack.push(false)
116
-
117
- return if title.nil?
118
-
119
- writer
120
- .indent
121
- .escape_code(:green)
122
- .text(title)
123
- .escape_code(:reset_fg)
124
- .newline
125
-
126
- writer.increase_indentation
127
- end
128
-
129
- def exit_context(title, result)
130
- test_stack.pop
131
-
132
- print_previous_error unless previous_error.nil?
133
-
134
- unless result
135
- assert_block_stack.print_captured_text
136
- end
137
-
138
- return if title.nil?
139
-
140
- writer.decrease_indentation
141
-
142
- writer.newline if writer.indentation_depth.zero?
143
- end
144
-
145
- def skip_context(title)
146
- return if title.nil?
147
-
148
- writer.indent
149
-
150
- if writer.styling?
151
- writer
152
- .escape_code(:yellow)
153
- .text(title)
154
- .escape_code(:reset_fg)
155
- else
156
- writer.text("#{title} (skipped)")
157
- end
158
-
159
- writer.newline
160
-
161
- writer.newline if writer.indentation_depth.zero?
162
- end
163
-
164
- def enter_file(file)
165
- text = "Running #{file}"
166
-
167
- writer.text(text).newline
168
-
169
- self.previous_byte_offset = writer.byte_offset
170
- end
171
-
172
- def exit_file(file, result)
173
- print_previous_error unless previous_error.nil?
174
-
175
- unless result
176
- assert_block_stack.print_captured_text
177
- end
178
-
179
- unless writer.byte_offset > previous_byte_offset
180
- writer
181
- .escape_code(:faint)
182
- .text("(Nothing written)")
183
- .escape_code(:reset_intensity)
184
- .newline
185
-
186
- writer.newline
187
- end
188
- end
189
-
190
- def finish_fixture(_, result)
191
- print_previous_error unless previous_error.nil?
192
-
193
- unless result
194
- assert_block_stack.print_captured_text
195
- end
196
- end
197
-
198
- def enter_assert_block(_)
199
- inside_test = inside_test?
200
-
201
- test_stack.push(false)
202
-
203
- assert_block_stack.push
204
-
205
- writer.increase_indentation
206
- writer.increase_indentation if inside_test
207
- end
208
-
209
- def exit_assert_block(_, result)
210
- test_stack.pop
211
-
212
- print_previous_error unless previous_error.nil?
213
-
214
- unless result
215
- assert_block_stack.print_captured_text
216
- end
217
-
218
- discard_captured_text = result
219
-
220
- assert_block_stack.pop(discard_captured_text)
221
-
222
- writer.decrease_indentation if inside_test?
223
- writer.decrease_indentation
224
- end
225
-
226
- def inside_test?
227
- test_stack[-1]
228
- end
229
-
230
- class AssertBlockStack
231
- def stack
232
- @stack ||= []
233
- end
234
-
235
- attr_accessor :captured_text
236
-
237
- attr_reader :writer
238
-
239
- def initialize(writer)
240
- @writer = writer
241
- end
242
-
243
- def push
244
- capture_text = String.new
245
-
246
- previous_device = writer.device
247
-
248
- writer.device = StringIO.new(capture_text)
249
-
250
- entry = Entry.new(capture_text, previous_device)
251
-
252
- stack.push(entry)
253
-
254
- entry
255
- end
256
-
257
- def pop(discard)
258
- entry = stack.pop
259
-
260
- writer.device = entry.previous_device
261
-
262
- unless discard
263
- self.captured_text = entry.capture_text
264
- end
265
-
266
- entry
267
- end
268
-
269
- def print_captured_text
270
- return if captured_text.nil?
271
-
272
- writer.text(captured_text)
273
-
274
- self.captured_text = nil
275
- end
276
-
277
- def inside_test?
278
- test_stack[-1]
279
- end
280
-
281
- Entry = Struct.new(:capture_text, :previous_device)
282
- end
283
- end
284
- end
285
- end
286
- end
@@ -1,21 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Levels
4
- class Summary
5
- include TestBench::Fixture::Output
6
-
7
- include Output::Summary::Error
8
- include Output::Summary::Run
9
-
10
- def self.build(writer: nil, styling: nil, device: nil)
11
- warn "Warning: #{self} is deprecated. It will remain in the TestBench v2 series, but will be removed from TestBench v3"
12
-
13
- instance = new
14
- Writer.configure(instance, writer: writer, styling: styling, device: device)
15
- Timer.configure(instance)
16
- instance
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,77 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Summary
4
- module Error
5
- include Writer::Dependency
6
-
7
- def self.included(cls)
8
- cls.prepend(OutputMethods)
9
- end
10
-
11
- def error_summary_errors
12
- @error_summary_errors ||= Hash.new do |hash, key|
13
- hash[key] = []
14
- end
15
- end
16
- attr_writer :error_summary_errors
17
-
18
- attr_accessor :error_summary_current_file
19
-
20
- def error_summary
21
- return if error_summary_errors.empty?
22
-
23
- writer
24
- .escape_code(:bold)
25
- .escape_code(:red)
26
- .text('Error Summary:')
27
- .escape_code(:reset_intensity)
28
- .escape_code(:reset_fg)
29
- .newline
30
-
31
- error_summary_errors.each do |file, errors|
32
- error_count = errors.count
33
-
34
- writer
35
- .text(error_count.to_s.rjust(4, ' '))
36
- .text(": #{file}")
37
- .newline
38
-
39
- errors.each do |error|
40
- writer
41
- .text(' ')
42
- .escape_code(:red)
43
-
44
- PrintError.error_message(error, writer: writer)
45
-
46
- writer.escape_code(:reset_fg)
47
- end
48
- end
49
-
50
- writer.newline
51
- end
52
-
53
- module OutputMethods
54
- def enter_file(file)
55
- super
56
-
57
- self.error_summary_current_file = file
58
- end
59
-
60
- def error(error)
61
- super
62
-
63
- current_file = error_summary_current_file
64
-
65
- self.error_summary_errors[current_file] << error
66
- end
67
-
68
- def finish(_)
69
- super
70
-
71
- error_summary
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,102 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Summary
4
- module Run
5
- include Writer::Dependency
6
- extend Print
7
-
8
- def self.included(cls)
9
- cls.prepend(OutputMethods)
10
- end
11
-
12
- def file_count
13
- @file_count ||= 0
14
- end
15
- attr_writer :file_count
16
-
17
- def test_count
18
- @test_count ||= 0
19
- end
20
- attr_writer :test_count
21
-
22
- def pass_count
23
- @pass_count ||= 0
24
- end
25
- attr_writer :pass_count
26
-
27
- def skip_count
28
- @skip_count ||= 0
29
- end
30
- attr_writer :skip_count
31
-
32
- def failure_count
33
- @failure_count ||= 0
34
- end
35
- attr_writer :failure_count
36
-
37
- def error_count
38
- @error_count ||= 0
39
- end
40
- attr_writer :error_count
41
-
42
- def elapsed_time
43
- @elapsed_time ||= 0
44
- end
45
- attr_writer :elapsed_time
46
-
47
- def timer
48
- @timer ||= Timer::Substitute.build
49
- end
50
- attr_writer :timer
51
-
52
- module OutputMethods
53
- def enter_file(_)
54
- super
55
-
56
- timer.start
57
- end
58
-
59
- def exit_file(_, _)
60
- super
61
-
62
- elapsed_time = timer.stop
63
-
64
- self.elapsed_time += elapsed_time
65
-
66
- self.file_count += 1
67
- end
68
-
69
- def finish_test(_, result)
70
- super
71
-
72
- self.test_count += 1
73
-
74
- if result
75
- self.pass_count += 1
76
- else
77
- self.failure_count += 1
78
- end
79
- end
80
-
81
- def skip_test(_)
82
- super
83
-
84
- self.skip_count += 1
85
- end
86
-
87
- def error(_)
88
- super
89
-
90
- self.error_count += 1
91
- end
92
-
93
- def finish(_)
94
- super
95
-
96
- Print.(file_count: file_count, test_count: test_count, pass_count: pass_count, skip_count: skip_count, failure_count: failure_count, error_count: error_count, elapsed_time: elapsed_time, writer: writer)
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end