test_bench 2.0.1.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 869eb3ef686496b5cca98d99afb412c69a7701b11d759bf265ca9989a2dc0dfb
4
- data.tar.gz: 3fef454e001e2ae11c5212d5f134c88de3436f87f78c6d1e073af2969e63bf65
3
+ metadata.gz: 56c1f79059bf004fb8831d9fe884647ccbc2a59f9237be81d8524046b2d813ec
4
+ data.tar.gz: f87e744fb7cd7aa811da22faf99646fe435cebaf30bc4e33807b1a3f6fd74541
5
5
  SHA512:
6
- metadata.gz: 76aa3e35b71785323fd0193b4e9b9e6914e618b50e3038da7ea3881dd0fe981647d429a6889bc030ebb9295d8309909d746360f878c670ea59315746ec910399
7
- data.tar.gz: 2840f31ee3ea0a3726e76529cedbbdbeb20a30fe60f5a86cd8fcbccd551f2922386c900c525d2902f8479472769f57da8265728ea740358d06e016204c6eb31d
6
+ metadata.gz: 792ca8ee7283f1080e6f7391281e47394ecf136f315688a2d726dfa7d37da703b4fd6c9be934bd402d712c6924f63df57a526160948ba170eb4f1bf30ffd8ad2
7
+ data.tar.gz: c2979e6cf6013fc34d23f47708507b5b99a4ea3f6aaa26961fc083dfba1552105c04f75e4136ae2482b3ffdba626de8752ff532e25121649f54d3634c82fd94b
@@ -1,5 +1,5 @@
1
1
  module TestBench
2
2
  module Controls
3
- TelemetrySink = TestBench::Telemetry::Controls::Sink
3
+ TelemetrySink = Session::Controls::TelemetrySink
4
4
  end
5
5
  end
@@ -1,14 +1,3 @@
1
- require 'test_bench/random/controls'
2
- require 'test_bench/telemetry/controls'
3
- require 'test_bench/run/controls'
1
+ require 'test_bench/executable/controls'
4
2
 
5
- require 'test_bench/controls/telemetry_sink'
6
-
7
- require 'test_bench/controls/result'
8
-
9
- require 'test_bench/controls/path'
10
-
11
- require 'test_bench/controls/file'
12
- require 'test_bench/controls/stdin'
13
-
14
- require 'test_bench/controls/random'
3
+ require 'test_bench/controls/telemetry_sink.rb'
@@ -1,13 +1,13 @@
1
1
  module TestBench
2
- def self.activate(receiver=nil, session_store: nil)
2
+ def self.activate(receiver=nil)
3
3
  receiver ||= TOPLEVEL_BINDING.receiver
4
- session_store ||= Session::Store.instance
5
4
 
6
5
  receiver.extend(Fixture)
7
6
  receiver.extend(DeactivatedVariants)
8
-
9
7
  receiver.extend(TestSession)
10
- receiver.test_session_store = session_store
8
+
9
+ session = receiver.test_session
10
+ establish_output(session)
11
11
  end
12
12
 
13
13
  def self.context(title=nil, session: nil, &block)
@@ -19,23 +19,37 @@ module TestBench
19
19
  end
20
20
 
21
21
  def self.evaluate(session: nil, &block)
22
- fixture = TestBench::Fixture::Evaluate.build(session:, &block)
22
+ session ||= Session.build
23
+
24
+ original_session = Session.instance
25
+
26
+ Session.establish(session)
27
+
28
+ establish_output(session)
29
+
30
+ fixture = TestBench::Fixture::Evaluate.build(test_session: session, &block)
23
31
  fixture.extend(DeactivatedVariants)
24
32
  fixture.()
25
33
 
26
- fixture.test_session.passed?
34
+ result = fixture.test_session.result
35
+ Session::Result.resolve(result)
36
+
37
+ ensure
38
+ Session.establish(original_session)
27
39
  end
28
40
 
29
- def self.session
30
- Session::Store.fetch
41
+ def self.register_telemetry_sink(telemetry_sink)
42
+ Session.register_telemetry_sink(telemetry_sink)
31
43
  end
32
44
 
33
- def self.telemetry
34
- session&.telemetry
45
+ def self.session
46
+ Session.instance
35
47
  end
36
48
 
37
- def self.register_telemetry_sink(telemetry_sink)
38
- session&.register_telemetry_sink(telemetry_sink)
49
+ def self.establish_output(session)
50
+ if session.telemetry.sinks.none?
51
+ Output.register_telemetry_sink(session)
52
+ end
39
53
  end
40
54
 
41
55
  module DeactivatedVariants
@@ -49,10 +63,12 @@ module TestBench
49
63
  end
50
64
 
51
65
  module TestSession
52
- attr_accessor :test_session_store
53
-
54
66
  def test_session
55
- test_session_store.fetch
67
+ Session.instance
68
+ end
69
+
70
+ def test_session=(session)
71
+ Session.establish(session)
56
72
  end
57
73
  end
58
74
  end
data/lib/test_bench.rb CHANGED
@@ -1,5 +1,4 @@
1
- require 'test_bench/run'
1
+ require 'test_bench/fixture'
2
+ require 'test_bench/executable'
2
3
 
3
4
  require 'test_bench/test_bench'
4
-
5
- require 'test_bench/cli'
metadata CHANGED
@@ -1,17 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_bench
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1.1
4
+ version: 3.0.0.0.pre.2
5
5
  platform: ruby
6
6
  authors:
7
- - Nathan Ladd
8
- autorequire:
9
- bindir: script
7
+ - Brightworks Digital
8
+ bindir: bin
10
9
  cert_chain: []
11
- date:
12
10
  dependencies:
13
11
  - !ruby/object:Gem::Dependency
14
- name: test_bench-run
12
+ name: test_bench-fixture
15
13
  requirement: !ruby/object:Gem::Requirement
16
14
  requirements:
17
15
  - - ">="
@@ -25,7 +23,21 @@ dependencies:
25
23
  - !ruby/object:Gem::Version
26
24
  version: '0'
27
25
  - !ruby/object:Gem::Dependency
28
- name: test_bench-isolated
26
+ name: test_bench-executable
27
+ requirement: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ - !ruby/object:Gem::Dependency
40
+ name: test_bench-bootstrap
29
41
  requirement: !ruby/object:Gem::Requirement
30
42
  requirements:
31
43
  - - ">="
@@ -38,30 +50,26 @@ dependencies:
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
52
  version: '0'
41
- description:
42
- email: nathanladd+github@gmail.com
43
- executables:
44
- - bench
53
+ description: Principled test framework for Ruby.
54
+ email: development@bright.works
55
+ executables: []
45
56
  extensions: []
46
57
  extra_rdoc_files: []
47
58
  files:
48
59
  - lib/test_bench
49
- - lib/test_bench/cli.rb
50
60
  - lib/test_bench/controls
51
- - lib/test_bench/controls/file.rb
52
- - lib/test_bench/controls/path.rb
53
- - lib/test_bench/controls/random.rb
54
- - lib/test_bench/controls/result.rb
55
- - lib/test_bench/controls/stdin.rb
56
61
  - lib/test_bench/controls/telemetry_sink.rb
57
62
  - lib/test_bench/controls.rb
58
63
  - lib/test_bench/test_bench.rb
59
64
  - lib/test_bench.rb
60
- homepage: https://github.com/test-bench/test-bench
65
+ homepage: http://test-bench.software
61
66
  licenses:
62
67
  - MIT
63
- metadata: {}
64
- post_install_message:
68
+ metadata:
69
+ homepage_uri: http://test-bench.software
70
+ source_code_uri: https://github.com/test-bench-demo/test-bench
71
+ allowed_push_host: https://rubygems.org
72
+ namespace: TestBench
65
73
  rdoc_options: []
66
74
  require_paths:
67
75
  - lib
@@ -76,8 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
84
  - !ruby/object:Gem::Version
77
85
  version: '0'
78
86
  requirements: []
79
- rubygems_version: 3.4.10
80
- signing_key:
87
+ rubygems_version: 3.6.9
81
88
  specification_version: 4
82
- summary: ruby
89
+ summary: Principled test framework for Ruby
83
90
  test_files: []
@@ -1,316 +0,0 @@
1
- module TestBench
2
- class CLI
3
- ArgumentError = Class.new(RuntimeError)
4
-
5
- attr_reader :arguments
6
-
7
- attr_accessor :exit_code
8
-
9
- def env
10
- @env ||= {}
11
- end
12
- attr_writer :env
13
-
14
- def program_name
15
- @program_name ||= Defaults.program_name
16
- end
17
- attr_writer :program_name
18
-
19
- def version
20
- @version ||= Defaults.version
21
- end
22
- attr_writer :version
23
-
24
- def stdin
25
- @stdin ||= STDIN
26
- end
27
- attr_writer :stdin
28
-
29
- def writer
30
- @writer ||= Output::Writer::Substitute.build
31
- end
32
- attr_writer :writer
33
-
34
- def run
35
- @run ||= Run::Substitute.build
36
- end
37
- attr_writer :run
38
-
39
- def random
40
- @random ||= Random::Substitute.build
41
- end
42
- attr_writer :random
43
-
44
- def initialize(*arguments)
45
- @arguments = arguments
46
- end
47
-
48
- def self.build(arguments=nil, env: nil)
49
- arguments ||= ::ARGV
50
- env ||= ::ENV
51
-
52
- instance = new(*arguments)
53
- instance.env = env
54
- Output::Writer.configure(instance)
55
- Run.configure(instance)
56
- Random.configure(instance)
57
- instance
58
- end
59
-
60
- def self.call(arguments=nil, env: nil)
61
- instance = build(arguments, env:)
62
-
63
- session = instance.run.session
64
- Session::Store.reset(session)
65
-
66
- exit_code = instance.()
67
-
68
- exit(exit_code)
69
- end
70
-
71
- def call
72
- parse_arguments
73
-
74
- if exit_code?
75
- return exit_code
76
- end
77
-
78
- writer.puts(RUBY_DESCRIPTION)
79
- writer.puts("Random Seed: #{random.seed.to_s(36)}")
80
- writer.puts
81
-
82
- default_path = Defaults.tests_directory
83
-
84
- result = run.! do |run|
85
- if not stdin.tty?
86
- until stdin.eof?
87
- path = stdin.gets(chomp: true)
88
-
89
- next if path.empty?
90
-
91
- run << path
92
- end
93
- end
94
-
95
- arguments.each do |path|
96
- run << path
97
- end
98
-
99
- if not run.ran?
100
- run << default_path
101
- end
102
- end
103
-
104
- self.exit_code = self.class.exit_code(result)
105
-
106
- exit_code
107
- end
108
-
109
- def parse_arguments
110
- argument_index = 0
111
-
112
- until argument_index == arguments.count
113
- next_argument = next_argument(argument_index)
114
-
115
- if not next_argument.start_with?('-')
116
- argument_index += 1
117
- next
118
- end
119
-
120
- switch = next_argument!(argument_index)
121
-
122
- case switch
123
- when '--'
124
- break
125
-
126
- when '-h', '--help'
127
- print_help_text
128
-
129
- self.exit_code = 0
130
-
131
- when '-v', '--version'
132
- writer.puts "TestBench Version: #{version}"
133
-
134
- self.exit_code = 0
135
-
136
- when '-d', '--detail', '--no-detail'
137
- if not negated?(switch)
138
- detail_policy_text = 'on'
139
- else
140
- detail_policy_text = 'off'
141
- end
142
-
143
- detail_policy = detail_policy_text.to_sym
144
- Session::Output::Detail.assure_detail(detail_policy)
145
-
146
- env['TEST_BENCH_DETAIL'] = detail_policy_text
147
-
148
- when '-x', '--exclude', '--no-exclude'
149
- if not negated?(switch)
150
- exclude_pattern_text = switch_value!(argument_index, switch)
151
-
152
- if env.key?('TEST_BENCH_EXCLUDE_FILE_PATTERN')
153
- exclude_pattern_text = [
154
- env['TEST_BENCH_EXCLUDE_FILE_PATTERN'],
155
- exclude_pattern_text
156
- ].join(':')
157
- end
158
- else
159
- exclude_pattern_text = ''
160
- end
161
-
162
- env['TEST_BENCH_EXCLUDE_FILE_PATTERN'] = exclude_pattern_text
163
-
164
- when '-f', '-F', '--only-failure', '--no-only-failure'
165
- if not negated?(switch)
166
- only_failure_text = 'on'
167
- else
168
- only_failure_text = 'off'
169
- end
170
-
171
- env['TEST_BENCH_ONLY_FAILURE'] = only_failure_text
172
-
173
- when '-p', '-P', '--require-passing-test', '--no-require-passing-test'
174
- if not negated?(switch)
175
- require_passing_tests = 'on'
176
- else
177
- require_passing_tests = 'off'
178
- end
179
-
180
- env['TEST_BENCH_REQUIRE_PASSING_TEST'] = require_passing_tests
181
-
182
- when '-o', '--output-styling'
183
- output_styling_text = switch_value(argument_index) do
184
- 'on'
185
- end
186
-
187
- output_styling = output_styling_text.to_sym
188
- Output::Writer::Styling.assure_styling(output_styling)
189
-
190
- env['TEST_BENCH_OUTPUT_STYLING'] = output_styling_text
191
-
192
- when '-s', '--seed'
193
- seed_text = switch_value!(argument_index, switch)
194
-
195
- begin
196
- Integer(seed_text)
197
- rescue
198
- raise ArgumentError, "Seed switch must be an integer (Seed: #{seed_text.inspect})"
199
- end
200
-
201
- env['TEST_BENCH_SEED'] = seed_text
202
-
203
- when '-r', '--require'
204
- library = switch_value!(argument_index, switch)
205
-
206
- require library
207
-
208
- else
209
- raise ArgumentError, "Unknown switch #{switch.inspect}"
210
- end
211
- end
212
- end
213
-
214
- def print_help_text
215
- writer.write <<~TEXT
216
- Usage: #{program_name} [options] [paths]
217
-
218
- Informational Options:
219
- \t-h, --help Print this help message and exit successfully
220
- \t-v, --version Print version and exit successfully
221
-
222
- Configuration Options:
223
- \t-d, --[no]detail Always show (or hide) details (Default: #{Session::Output::Detail.default})
224
- \t-x, --[no-]exclude PATTERN Do not execute test files matching PATTERN (Default: #{Run::GetFiles::Defaults.exclude_patterns.inspect})
225
- \t-f, --[no-]only-failure Don't display output for test files that pass (Default: #{Run::Output::File::Defaults.only_failure ? 'on' : 'off'})
226
- \t-o, --output-styling [on|off|detect]
227
- \t Render output coloring and font styling escape codes (Default: #{Output::Writer::Styling.default})
228
- \t-s, --seed NUMBER Sets pseudo-random number seed (Default: not set)
229
-
230
- Other Options:
231
- \t-r, --require LIBRARY Require LIBRARY before running any files
232
-
233
- Paths to test files (and directories containing test files) can be given after any command line arguments or via STDIN (or both).
234
-
235
- If no paths are given, a default path (#{Defaults.tests_directory}) is scanned for test files.
236
-
237
- The following environment variables can also control execution:
238
-
239
- \tTEST_BENCH_DETAIL Same as -d or --detail
240
- \tTEST_BENCH_EXCLUDE_FILE_PATTERN Same as -x or --exclude-file-pattern
241
- \tTEST_BENCH_ONLY_FAILURE Same as -f or --only-failure
242
- \tTEST_BENCH_OUTPUT_STYLING Same as -o or --output-styling
243
- \tTEST_BENCH_SEED Same as -s or --seed
244
-
245
- TEXT
246
- end
247
-
248
- def negated?(switch)
249
- if switch.start_with?('--')
250
- switch.start_with?('--no-')
251
- else
252
- /^-[A-Z]/.match?(switch)
253
- end
254
- end
255
-
256
- def exit_code?
257
- !exit_code.nil?
258
- end
259
-
260
- def switch_value!(argument_index, argument)
261
- switch_value(argument_index) do
262
- raise ArgumentError, "Argument #{argument.inspect} requires an argument"
263
- end
264
- end
265
-
266
- def switch_value(argument_index, &no_value_action)
267
- next_value = next_argument(argument_index)
268
-
269
- if next_value.nil? || next_value.start_with?('-')
270
- switch_value = nil
271
-
272
- return no_value_action.()
273
- else
274
- switch_value = next_argument!(argument_index)
275
-
276
- return switch_value
277
- end
278
- end
279
-
280
- def next_argument(argument_index)
281
- arguments[argument_index]
282
- end
283
-
284
- def next_argument!(argument_index)
285
- arguments.delete_at(argument_index)
286
- end
287
-
288
- def self.exit_code(result)
289
- if result == true
290
- 0
291
- elsif result == false
292
- 1
293
- else
294
- 2
295
- end
296
- end
297
-
298
- module Defaults
299
- def self.tests_directory
300
- ENV.fetch('TEST_BENCH_TESTS_DIRECTORY', 'test/automated')
301
- end
302
-
303
- def self.program_name
304
- $PROGRAM_NAME || 'bench'
305
- end
306
-
307
- def self.version
308
- if Object.const_defined?(:Gem)
309
- spec = Gem.loaded_specs['test_bench']
310
- end
311
-
312
- spec&.version || '(unknown)'
313
- end
314
- end
315
- end
316
- end
@@ -1,5 +0,0 @@
1
- module TestBench
2
- module Controls
3
- File = Run::Controls::File
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module TestBench
2
- module Controls
3
- Path = Run::Controls::Path
4
- end
5
- end
@@ -1,7 +0,0 @@
1
- module TestBench
2
- module Controls
3
- module Random
4
- Seed = TestBench::Random::Controls::Seed
5
- end
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- module TestBench
2
- module Controls
3
- Result = Run::Controls::Result
4
- end
5
- end
@@ -1,27 +0,0 @@
1
- module TestBench
2
- module Controls
3
- module Stdin
4
- module Create
5
- def self.call(*paths)
6
- if paths.empty?
7
- paths = Path.examples
8
- end
9
-
10
- contents = <<~TEXT
11
- #{paths.join("\n")}
12
- TEXT
13
-
14
- file = File::Create.(contents:)
15
-
16
- ::File.open(file, 'r')
17
- end
18
-
19
- def self.contents
20
- <<~TEXT
21
- #{Path.example}
22
- TEXT
23
- end
24
- end
25
- end
26
- end
27
- end
data/script/bench DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test_bench'
4
-
5
- TestBench::CLI.()