test_bench 1.0.1.1 → 1.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,94 @@
1
+ module TestBench
2
+ module Output
3
+ class Summary
4
+ module Session
5
+ def self.call(file_count: nil, test_count: nil, pass_count: nil, skip_count: nil, failure_count: nil, error_count: nil, elapsed_time: nil, writer: nil)
6
+ file_count ||= 0
7
+ test_count ||= 0
8
+ pass_count ||= 0
9
+ skip_count ||= 0
10
+ failure_count ||= 0
11
+ error_count ||= 0
12
+ elapsed_time ||= 0
13
+ writer ||= Writer.build
14
+
15
+ failed = error_count > 0
16
+
17
+ if elapsed_time.nonzero?
18
+ tests_per_second = test_count / elapsed_time
19
+ end
20
+
21
+ if failed
22
+ writer.escape_code(:red)
23
+ end
24
+
25
+ writer
26
+ .text("Finished running #{numeric_label(file_count, 'file')}")
27
+ .newline
28
+ .text("Ran %s in %.3fs (%.1f tests/second)" % [
29
+ numeric_label(test_count, 'test'),
30
+ elapsed_time,
31
+ tests_per_second || 0])
32
+ .newline
33
+
34
+ if pass_count.nonzero? && !failed
35
+ writer
36
+ .escape_code(:green)
37
+ .text("#{pass_count} passed")
38
+ .escape_code(:reset_fg)
39
+ else
40
+ writer.text("#{pass_count} passed")
41
+ end
42
+
43
+ writer.text(", ")
44
+
45
+ if skip_count.nonzero? && !failed
46
+ writer
47
+ .escape_code(:yellow)
48
+ .text("#{skip_count} skipped")
49
+ .escape_code(:reset_fg)
50
+ else
51
+ writer.text("#{skip_count} skipped")
52
+ end
53
+
54
+ writer.text(", ")
55
+
56
+ if failure_count.nonzero?
57
+ writer
58
+ .escape_code(:bold)
59
+ .text("#{failure_count} failed")
60
+ .escape_code(:reset_intensity)
61
+ else
62
+ writer.text("0 failed")
63
+ end
64
+
65
+ writer.text(", ")
66
+
67
+ if failed
68
+ writer
69
+ .escape_code(:bold)
70
+ .text(numeric_label(error_count, 'total error'))
71
+ .escape_code(:reset_intensity)
72
+ .escape_code(:reset_fg)
73
+ else
74
+ writer.text("0 total errors")
75
+ end
76
+
77
+ 2.times do
78
+ writer.newline
79
+ end
80
+ end
81
+
82
+ def self.numeric_label(number, label, plural_text=nil)
83
+ plural_text ||= 's'
84
+
85
+ if number == 1
86
+ "#{number} #{label}"
87
+ else
88
+ "#{number} #{label}#{plural_text}"
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -130,7 +130,7 @@ module TestBench
130
130
  end
131
131
 
132
132
  def self.styling?(device, styling_setting=nil)
133
- styling_setting ||= Defaults.styling_setting
133
+ styling_setting ||= Defaults.styling
134
134
 
135
135
  assure_styling_setting(styling_setting)
136
136
 
@@ -177,7 +177,7 @@ module TestBench
177
177
  $stdout
178
178
  end
179
179
 
180
- def self.styling_setting
180
+ def self.styling
181
181
  styling = ::ENV['TEST_BENCH_OUTPUT_STYLING']
182
182
 
183
183
  if styling.nil?
@@ -7,10 +7,10 @@ module TestBench
7
7
  end
8
8
  attr_writer :session
9
9
 
10
- def exclude_file_pattern
11
- @exclude_file_pattern ||= Defaults.exclude_file_pattern
10
+ def exclude_pattern
11
+ @exclude_pattern ||= Defaults.exclude_pattern
12
12
  end
13
- attr_writer :exclude_file_pattern
13
+ attr_writer :exclude_pattern
14
14
 
15
15
  attr_reader :paths
16
16
 
@@ -18,12 +18,12 @@ module TestBench
18
18
  @paths = Array(paths)
19
19
  end
20
20
 
21
- def self.build(*paths, exclude_file_pattern: nil, session: nil, output: nil)
21
+ def self.build(*paths, exclude: nil, session: nil, output: nil)
22
22
  session ||= TestBench.session
23
23
 
24
24
  instance = new(*paths)
25
25
 
26
- instance.exclude_file_pattern = exclude_file_pattern unless exclude_file_pattern.nil?
26
+ instance.exclude_pattern = exclude unless exclude.nil?
27
27
 
28
28
  Session.configure(instance, session: session)
29
29
  instance.session.output = output unless output.nil?
@@ -80,7 +80,7 @@ module TestBench
80
80
  glob_pattern = File.join(path, '**/*.rb')
81
81
 
82
82
  Dir[glob_pattern].sort.each do |path|
83
- next if exclude_file_pattern.match?(path)
83
+ next if exclude_pattern.match?(path)
84
84
 
85
85
  file(path)
86
86
  end
@@ -91,7 +91,7 @@ module TestBench
91
91
  end
92
92
 
93
93
  module Defaults
94
- def self.exclude_file_pattern
94
+ def self.exclude_pattern
95
95
  pattern = ENV.fetch('TEST_BENCH_EXCLUDE_FILE_PATTERN') do
96
96
  '_init.rb$'
97
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_bench
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1.1
4
+ version: 1.1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
8
8
  autorequire:
9
9
  bindir: script
10
10
  cert_chain: []
11
- date: 2020-07-10 00:00:00.000000000 Z
11
+ date: 2020-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test_bench-fixture
@@ -55,12 +55,16 @@ files:
55
55
  - lib/test_bench/controls/directory.rb
56
56
  - lib/test_bench/controls/error.rb
57
57
  - lib/test_bench/controls/fixture.rb
58
+ - lib/test_bench/controls/output/batch_data.rb
59
+ - lib/test_bench/controls/output/detail_setting.rb
58
60
  - lib/test_bench/controls/output/escape_code.rb
61
+ - lib/test_bench/controls/output/exercise.rb
62
+ - lib/test_bench/controls/output/log_level.rb
59
63
  - lib/test_bench/controls/output/newline_character.rb
60
64
  - lib/test_bench/controls/output/print_error.rb
61
65
  - lib/test_bench/controls/output/styling.rb
62
66
  - lib/test_bench/controls/output/summary/error.rb
63
- - lib/test_bench/controls/output/summary/run.rb
67
+ - lib/test_bench/controls/output/summary/session.rb
64
68
  - lib/test_bench/controls/path.rb
65
69
  - lib/test_bench/controls/pattern.rb
66
70
  - lib/test_bench/controls/result.rb
@@ -68,19 +72,18 @@ files:
68
72
  - lib/test_bench/controls/time.rb
69
73
  - lib/test_bench/deactivation_variants.rb
70
74
  - lib/test_bench/environment/boolean.rb
75
+ - lib/test_bench/fixture
76
+ - lib/test_bench/fixture.rb
71
77
  - lib/test_bench/fixtures.rb
72
78
  - lib/test_bench/fixtures/configure_receiver.rb
73
79
  - lib/test_bench/output.rb
74
- - lib/test_bench/output/build.rb
75
- - lib/test_bench/output/levels/debug.rb
76
- - lib/test_bench/output/levels/failure.rb
77
- - lib/test_bench/output/levels/none.rb
78
- - lib/test_bench/output/levels/pass.rb
79
- - lib/test_bench/output/levels/summary.rb
80
+ - lib/test_bench/output/batch_data.rb
81
+ - lib/test_bench/output/buffer.rb
82
+ - lib/test_bench/output/log.rb
80
83
  - lib/test_bench/output/print_error.rb
81
- - lib/test_bench/output/summary/error.rb
82
- - lib/test_bench/output/summary/run.rb
83
- - lib/test_bench/output/summary/run/print.rb
84
+ - lib/test_bench/output/raw.rb
85
+ - lib/test_bench/output/summary.rb
86
+ - lib/test_bench/output/summary/session.rb
84
87
  - lib/test_bench/output/timer.rb
85
88
  - lib/test_bench/output/timer/substitute.rb
86
89
  - lib/test_bench/output/writer.rb
@@ -1,59 +0,0 @@
1
- module TestBench
2
- module Controls
3
- module Output
4
- module Summary
5
- module Run
6
- def self.example(writer: nil, timer: nil)
7
- run_summary = Example.new
8
- run_summary.writer = writer unless writer.nil?
9
- run_summary.timer = timer unless timer.nil?
10
- run_summary
11
- end
12
-
13
- class Example
14
- include TestBench::Fixture::Output
15
- include TestBench::Output::Summary::Run
16
-
17
- TestBench::Fixture::Output.instance_methods.each do |method|
18
- define_method(method) do |*|
19
- end
20
- end
21
- end
22
-
23
- module Text
24
- def self.example
25
- <<~TEXT
26
- Finished running 0 files
27
- Ran 0 tests in 0.000s (0.0 tests/second)
28
- 0 passed, 0 skipped, 0 failed, 0 total errors
29
-
30
- TEXT
31
- end
32
-
33
- module Pass
34
- def self.example
35
- <<~TEXT
36
- Finished running 1 file
37
- Ran 1 test in 0.000s (0.0 tests/second)
38
- 1 passed, 0 skipped, 0 failed, 0 total errors
39
-
40
- TEXT
41
- end
42
- end
43
-
44
- module Failure
45
- def self.example
46
- <<~TEXT
47
- Finished running 1 file
48
- Ran 1 test in 0.000s (0.0 tests/second)
49
- 0 passed, 0 skipped, 1 failed, 1 total error
50
-
51
- TEXT
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,51 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Build
4
- Error = Class.new(RuntimeError)
5
-
6
- def self.call(level: nil, **args)
7
- level ||= Defaults.level
8
-
9
- level_setting = level
10
-
11
- cls = level_class(level_setting)
12
-
13
- cls.build(**args)
14
- end
15
-
16
- def self.level_class(level_setting)
17
- assure_level(level_setting)
18
-
19
- levels.fetch(level_setting)
20
- end
21
-
22
- def self.levels
23
- {
24
- :none => Levels::None,
25
- :summary => Levels::Summary,
26
- :failure => Levels::Failure,
27
- :pass => Levels::Pass,
28
- :debug => Levels::Debug
29
- }
30
- end
31
-
32
- def self.level_settings
33
- levels.keys
34
- end
35
-
36
- def self.assure_level(level_setting)
37
- unless level_settings.include?(level_setting)
38
- raise Error, "Unknown output level #{level_setting.inspect} (Valid levels: #{level_settings.map(&:inspect) * ', '})"
39
- end
40
- end
41
-
42
- module Defaults
43
- def self.level
44
- level_text = ENV.fetch('TEST_BENCH_OUTPUT_LEVEL', 'pass')
45
-
46
- level_text.to_sym
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,229 +0,0 @@
1
- module TestBench
2
- module Output
3
- module Levels
4
- class Debug
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
- def previous_byte_offset
15
- @previous_byte_offset ||= 0
16
- end
17
- attr_writer :previous_byte_offset
18
-
19
- def self.build(omit_backtrace_pattern: nil, reverse_backtraces: nil, writer: nil, styling: nil, device: nil)
20
- instance = new
21
-
22
- instance.omit_backtrace_pattern = omit_backtrace_pattern unless omit_backtrace_pattern.nil?
23
- instance.reverse_backtraces = reverse_backtraces unless reverse_backtraces.nil?
24
-
25
- Writer.configure(instance, writer: writer, styling: styling, device: device)
26
- Timer.configure(instance)
27
-
28
- instance
29
- end
30
-
31
- def comment(text)
32
- writer
33
- .indent
34
- .text(text)
35
- .newline
36
- end
37
-
38
- def error(error)
39
- print_error(error)
40
- end
41
-
42
- def finish_test(title, result)
43
- writer.decrease_indentation
44
-
45
- fg_color = result ? :green : :red
46
-
47
- writer.indent
48
-
49
- writer
50
- .escape_code(fg_color)
51
- .text("Finished test")
52
-
53
- unless title.nil?
54
- writer
55
- .text(' ')
56
- .escape_code(:bold)
57
- .text(title.inspect)
58
- .escape_code(:reset_intensity)
59
- end
60
-
61
- writer
62
- .text(" (Result: #{result ? 'pass' : 'failure'})")
63
- .escape_code(:reset_fg)
64
- .newline
65
- end
66
-
67
- def skip_test(title)
68
- writer.indent
69
-
70
- writer
71
- .escape_code(:yellow)
72
- .text("Skipped test")
73
-
74
- unless title.nil?
75
- writer
76
- .text(' ')
77
- .escape_code(:bold)
78
- .text(title.inspect)
79
- .escape_code(:reset_intensity)
80
- end
81
-
82
- writer
83
- .escape_code(:reset_fg)
84
- .newline
85
- end
86
-
87
- def start_test(title)
88
- if title.nil?
89
- text = "Starting test"
90
- else
91
- text = "Starting test #{title.inspect}"
92
- end
93
-
94
- writer
95
- .indent
96
- .escape_code(:cyan)
97
- .text(text)
98
- .escape_code(:reset_fg)
99
- .newline
100
-
101
- writer.increase_indentation
102
- end
103
-
104
- def enter_context(title)
105
- return if title.nil?
106
-
107
- writer
108
- .indent
109
- .escape_code(:green)
110
- .text(title)
111
- .escape_code(:reset_fg)
112
- .newline
113
-
114
- writer.increase_indentation
115
- end
116
-
117
- def exit_context(title, result)
118
- return if title.nil?
119
-
120
- writer.decrease_indentation
121
-
122
- fg_color = result ? :green : :red
123
-
124
- text = "Finished context #{title.inspect} (Result: #{result ? 'pass' : 'failure'})"
125
-
126
- writer
127
- .indent
128
- .escape_code(:faint)
129
- .escape_code(:italic)
130
- .escape_code(fg_color)
131
- .text(text)
132
- .escape_code(:reset_fg)
133
- .escape_code(:reset_italic)
134
- .escape_code(:reset_intensity)
135
- .newline
136
-
137
- writer.newline if writer.indentation_depth.zero?
138
- end
139
-
140
- def skip_context(title)
141
- return if title.nil?
142
-
143
- writer
144
- .indent
145
- .escape_code(:yellow)
146
- .text(title)
147
- .escape_code(:reset_fg)
148
- .newline
149
-
150
- writer.newline if writer.indentation_depth.zero?
151
- end
152
-
153
- def start_fixture(fixture)
154
- fixture_class = fixture.class.inspect
155
-
156
- writer
157
- .indent
158
- .escape_code(:blue)
159
- .text("Starting fixture (Fixture: #{fixture_class})")
160
- .escape_code(:reset_fg)
161
- .newline
162
-
163
- writer.increase_indentation
164
- end
165
-
166
- def finish_fixture(fixture, result)
167
- fixture_class = fixture.class.inspect
168
-
169
- writer.decrease_indentation
170
-
171
- writer
172
- .indent
173
- .escape_code(:magenta)
174
- .text("Finished fixture (Fixture: #{fixture_class}, Result: #{result ? 'pass' : 'failure'})")
175
- .escape_code(:reset_fg)
176
- .newline
177
-
178
- writer.newline if writer.indentation_depth.zero?
179
- end
180
-
181
- def enter_file(file)
182
- text = "Running #{file}"
183
-
184
- writer.text(text).newline
185
-
186
- self.previous_byte_offset = writer.byte_offset
187
- end
188
-
189
- def exit_file(file, _)
190
- unless writer.byte_offset > previous_byte_offset
191
- writer
192
- .escape_code(:faint)
193
- .text("(Nothing written)")
194
- .escape_code(:reset_intensity)
195
- .newline
196
-
197
- writer.newline
198
- end
199
- end
200
-
201
- def enter_assert_block(caller_location)
202
- text = "Entered assert block (Caller Location: #{caller_location})"
203
-
204
- writer
205
- .indent
206
- .escape_code(:blue)
207
- .text(text)
208
- .escape_code(:reset_fg)
209
- .newline
210
-
211
- writer.increase_indentation
212
- end
213
-
214
- def exit_assert_block(caller_location, result)
215
- writer.decrease_indentation
216
-
217
- text = "Exited assert block (Caller Location: #{caller_location}, Result: #{result ? 'pass' : 'failure'})"
218
-
219
- writer
220
- .indent
221
- .escape_code(:cyan)
222
- .text(text)
223
- .escape_code(:reset_fg)
224
- .newline
225
- end
226
- end
227
- end
228
- end
229
- end