test_bench_legacy 1.3.5
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 +7 -0
- data/bin/bench +10 -0
- data/lib/test_bench.rb +37 -0
- data/lib/test_bench/activate.rb +3 -0
- data/lib/test_bench/assert.rb +58 -0
- data/lib/test_bench/assert/failed.rb +25 -0
- data/lib/test_bench/assert/proc.rb +24 -0
- data/lib/test_bench/assert/refute.rb +9 -0
- data/lib/test_bench/cli.rb +4 -0
- data/lib/test_bench/cli/cli.rb +108 -0
- data/lib/test_bench/controls.rb +16 -0
- data/lib/test_bench/controls/binding.rb +17 -0
- data/lib/test_bench/controls/clock/elapsed.rb +41 -0
- data/lib/test_bench/controls/clock/reference.rb +15 -0
- data/lib/test_bench/controls/dir_substitute.rb +58 -0
- data/lib/test_bench/controls/error.rb +63 -0
- data/lib/test_bench/controls/executor/substitute.rb +27 -0
- data/lib/test_bench/controls/expand_path.rb +23 -0
- data/lib/test_bench/controls/fixture.rb +36 -0
- data/lib/test_bench/controls/kernel_substitute.rb +72 -0
- data/lib/test_bench/controls/output.rb +106 -0
- data/lib/test_bench/controls/path.rb +11 -0
- data/lib/test_bench/controls/result.rb +64 -0
- data/lib/test_bench/controls/telemetry.rb +23 -0
- data/lib/test_bench/controls/test_script.rb +23 -0
- data/lib/test_bench/executor.rb +45 -0
- data/lib/test_bench/expand_path.rb +44 -0
- data/lib/test_bench/fixture.rb +17 -0
- data/lib/test_bench/output.rb +169 -0
- data/lib/test_bench/output/assertions.rb +43 -0
- data/lib/test_bench/output/palette.rb +59 -0
- data/lib/test_bench/output/writer.rb +94 -0
- data/lib/test_bench/output/writer/assertions.rb +29 -0
- data/lib/test_bench/output/writer/assertions/line.rb +76 -0
- data/lib/test_bench/registry.rb +32 -0
- data/lib/test_bench/result.rb +71 -0
- data/lib/test_bench/result/assertions.rb +11 -0
- data/lib/test_bench/result/null.rb +12 -0
- data/lib/test_bench/runner.rb +59 -0
- data/lib/test_bench/settings.rb +62 -0
- data/lib/test_bench/settings/defaults.rb +29 -0
- data/lib/test_bench/settings/environment.rb +124 -0
- data/lib/test_bench/settings/registry.rb +17 -0
- data/lib/test_bench/structure.rb +89 -0
- data/lib/test_bench/telemetry.rb +130 -0
- data/lib/test_bench/telemetry/assertions.rb +85 -0
- data/lib/test_bench/telemetry/registry.rb +17 -0
- data/lib/test_bench/telemetry/subscription.rb +23 -0
- data/lib/test_bench/test_bench.rb +33 -0
- metadata +94 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Structure
|
3
|
+
def assert subject, mod=nil, assert_class: nil, caller_location: nil, &block
|
4
|
+
assert_class ||= Assert
|
5
|
+
caller_location ||= caller_locations[0]
|
6
|
+
|
7
|
+
telemetry = Telemetry::Registry.get binding
|
8
|
+
|
9
|
+
unless assert_class.(subject, mod, &block)
|
10
|
+
raise Assert::Failed.build caller_location
|
11
|
+
end
|
12
|
+
|
13
|
+
ensure
|
14
|
+
telemetry.asserted
|
15
|
+
end
|
16
|
+
|
17
|
+
def comment prose
|
18
|
+
telemetry = Telemetry::Registry.get binding
|
19
|
+
|
20
|
+
telemetry.commented prose
|
21
|
+
end
|
22
|
+
|
23
|
+
def context prose=nil, suppress_exit: nil, &block
|
24
|
+
suppress_exit ||= false
|
25
|
+
|
26
|
+
telemetry = Telemetry::Registry.get binding
|
27
|
+
|
28
|
+
unless prose.nil? or prose.is_a? String
|
29
|
+
raise TypeError, "Prose must be a String"
|
30
|
+
end
|
31
|
+
|
32
|
+
begin
|
33
|
+
telemetry.context_entered prose
|
34
|
+
block.() if block
|
35
|
+
|
36
|
+
rescue => error
|
37
|
+
Structure.error error, binding
|
38
|
+
|
39
|
+
ensure
|
40
|
+
nesting = telemetry.context_exited prose
|
41
|
+
|
42
|
+
if nesting.zero? and telemetry.failed?
|
43
|
+
exit 1 unless suppress_exit
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def refute *arguments, &block
|
49
|
+
assert(*arguments, :assert_class => Assert::Refute, :caller_location => caller_locations[0], &block)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test prose=nil, &block
|
53
|
+
telemetry = Telemetry::Registry.get binding
|
54
|
+
|
55
|
+
prose ||= 'Test'
|
56
|
+
|
57
|
+
unless prose.is_a? String
|
58
|
+
raise TypeError, "Prose must be a String"
|
59
|
+
end
|
60
|
+
|
61
|
+
if block.nil?
|
62
|
+
telemetry.test_skipped prose
|
63
|
+
return
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
telemetry.test_started prose
|
68
|
+
block.()
|
69
|
+
telemetry.test_passed prose
|
70
|
+
|
71
|
+
rescue => error
|
72
|
+
telemetry.test_failed prose
|
73
|
+
Structure.error error, binding
|
74
|
+
|
75
|
+
ensure
|
76
|
+
telemetry.test_finished prose
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.error error, binding
|
81
|
+
telemetry = Telemetry::Registry.get binding
|
82
|
+
settings = Settings::Registry.get binding
|
83
|
+
|
84
|
+
telemetry.error_raised error
|
85
|
+
|
86
|
+
exit 1 if settings.abort_on_error
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
module TestBench
|
2
|
+
class Telemetry
|
3
|
+
include Observable
|
4
|
+
|
5
|
+
attr_accessor :failed
|
6
|
+
attr_writer :nesting
|
7
|
+
attr_writer :sink
|
8
|
+
|
9
|
+
def self.build
|
10
|
+
instance = new
|
11
|
+
|
12
|
+
if Settings.toplevel.record_telemetry
|
13
|
+
instance.sink = []
|
14
|
+
end
|
15
|
+
|
16
|
+
instance
|
17
|
+
end
|
18
|
+
|
19
|
+
def asserted
|
20
|
+
publish :asserted
|
21
|
+
end
|
22
|
+
|
23
|
+
def commented prose
|
24
|
+
publish :commented, prose
|
25
|
+
end
|
26
|
+
|
27
|
+
def context_entered prose
|
28
|
+
publish :context_entered, prose
|
29
|
+
|
30
|
+
self.nesting += 1
|
31
|
+
end
|
32
|
+
|
33
|
+
def context_exited prose
|
34
|
+
publish :context_exited, prose
|
35
|
+
|
36
|
+
self.nesting -= 1
|
37
|
+
|
38
|
+
nesting
|
39
|
+
end
|
40
|
+
|
41
|
+
def error_raised error
|
42
|
+
self.failed = true
|
43
|
+
|
44
|
+
publish :error_raised, error
|
45
|
+
end
|
46
|
+
|
47
|
+
def failed?
|
48
|
+
if failed then true else false end
|
49
|
+
end
|
50
|
+
|
51
|
+
def file_finished file
|
52
|
+
publish :file_finished, file
|
53
|
+
end
|
54
|
+
|
55
|
+
def file_started file
|
56
|
+
publish :file_started, file
|
57
|
+
end
|
58
|
+
|
59
|
+
def nesting
|
60
|
+
@nesting ||= 0
|
61
|
+
end
|
62
|
+
|
63
|
+
def passed?
|
64
|
+
not failed?
|
65
|
+
end
|
66
|
+
|
67
|
+
def publish event, *arguments
|
68
|
+
changed
|
69
|
+
notify_observers event, *arguments
|
70
|
+
|
71
|
+
record = Record.new event, *arguments
|
72
|
+
sink << record
|
73
|
+
end
|
74
|
+
|
75
|
+
def run_started
|
76
|
+
publish :run_started
|
77
|
+
end
|
78
|
+
|
79
|
+
def run_finished
|
80
|
+
publish :run_finished
|
81
|
+
end
|
82
|
+
|
83
|
+
def sink
|
84
|
+
@sink ||= NullSink
|
85
|
+
end
|
86
|
+
|
87
|
+
def subscribe subscriber
|
88
|
+
subscription = Subscription.new subscriber
|
89
|
+
add_observer subscription
|
90
|
+
subscription
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_failed prose
|
94
|
+
publish :test_failed, prose
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_finished prose
|
98
|
+
publish :test_finished, prose
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_passed prose
|
102
|
+
publish :test_passed, prose
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_skipped prose
|
106
|
+
publish :test_skipped, prose
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_started prose
|
110
|
+
publish :test_started, prose
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.subscribe subscriber
|
114
|
+
toplevel_telemetry = Registry.get TOPLEVEL_BINDING
|
115
|
+
toplevel_telemetry.subscribe subscriber
|
116
|
+
end
|
117
|
+
|
118
|
+
Record = Struct.new :event, :data
|
119
|
+
|
120
|
+
module NullSink
|
121
|
+
extend Enumerable
|
122
|
+
|
123
|
+
def self.<< event
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.each &block
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module TestBench
|
2
|
+
class Telemetry
|
3
|
+
module Assertions
|
4
|
+
def elapsed? seconds
|
5
|
+
seconds == elapsed_time
|
6
|
+
end
|
7
|
+
|
8
|
+
def record_count &block
|
9
|
+
sink.count do |record|
|
10
|
+
block.(record)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def recorded_any? control_event
|
15
|
+
count = record_count do |record|
|
16
|
+
record.event == control_event
|
17
|
+
end
|
18
|
+
|
19
|
+
count > 0
|
20
|
+
end
|
21
|
+
|
22
|
+
def recorded_asserted?
|
23
|
+
recorded_any? :asserted
|
24
|
+
end
|
25
|
+
|
26
|
+
def recorded_comment?
|
27
|
+
recorded_any? :commented
|
28
|
+
end
|
29
|
+
|
30
|
+
def recorded_context_entered?
|
31
|
+
recorded_any? :context_entered
|
32
|
+
end
|
33
|
+
|
34
|
+
def recorded_context_exited?
|
35
|
+
recorded_any? :context_exited
|
36
|
+
end
|
37
|
+
|
38
|
+
def recorded_error_raised?
|
39
|
+
recorded_any? :error_raised
|
40
|
+
end
|
41
|
+
|
42
|
+
def recorded_file_finished?
|
43
|
+
recorded_any? :file_finished
|
44
|
+
end
|
45
|
+
|
46
|
+
def recorded_file_started?
|
47
|
+
recorded_any? :file_started
|
48
|
+
end
|
49
|
+
|
50
|
+
def recorded_run_finished?
|
51
|
+
recorded_any? :run_finished
|
52
|
+
end
|
53
|
+
|
54
|
+
def recorded_run_started?
|
55
|
+
recorded_any? :run_started
|
56
|
+
end
|
57
|
+
|
58
|
+
def recorded_test_failed?
|
59
|
+
recorded_any? :test_failed
|
60
|
+
end
|
61
|
+
|
62
|
+
def recorded_test_finished?
|
63
|
+
recorded_any? :test_finished
|
64
|
+
end
|
65
|
+
|
66
|
+
def recorded_test_passed?
|
67
|
+
recorded_any? :test_passed
|
68
|
+
end
|
69
|
+
|
70
|
+
def recorded_test_skipped?
|
71
|
+
recorded_any? :test_skipped
|
72
|
+
end
|
73
|
+
|
74
|
+
def recorded_test_started?
|
75
|
+
recorded_any? :test_started
|
76
|
+
end
|
77
|
+
|
78
|
+
def test? prose
|
79
|
+
record_count do |record|
|
80
|
+
record.event == :test_started and record.data == prose
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module TestBench
|
2
|
+
class Telemetry
|
3
|
+
class Subscription
|
4
|
+
attr_reader :subscriber
|
5
|
+
|
6
|
+
def initialize subscriber
|
7
|
+
@subscriber = subscriber
|
8
|
+
end
|
9
|
+
|
10
|
+
def update event, argument=nil
|
11
|
+
return unless subscriber.respond_to? event
|
12
|
+
|
13
|
+
method = subscriber.method event
|
14
|
+
|
15
|
+
if method.arity == 0
|
16
|
+
subscriber.public_send event
|
17
|
+
else
|
18
|
+
subscriber.public_send event, argument
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module TestBench
|
2
|
+
def self.activate
|
3
|
+
# Monkeypatch assert, context, and test onto the main object
|
4
|
+
unless TOPLEVEL_BINDING.receiver.is_a? Structure
|
5
|
+
TOPLEVEL_BINDING.receiver.extend Structure
|
6
|
+
end
|
7
|
+
|
8
|
+
# Ruby pre 2.2 did not implement Binding#receiver
|
9
|
+
unless TOPLEVEL_BINDING.respond_to? :receiver
|
10
|
+
::Binding.class_exec do
|
11
|
+
def receiver
|
12
|
+
eval "self"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Build the output instance that will be used to render all the test output
|
19
|
+
output = Output.build
|
20
|
+
|
21
|
+
# Settings can affect the output (verbosity & color), so we pass the output
|
22
|
+
# object into the toplevel settings object and then apply environment
|
23
|
+
# variables to it.
|
24
|
+
settings = Settings::Registry.get TOPLEVEL_BINDING
|
25
|
+
settings.writer = output.writer
|
26
|
+
Settings::Environment.(settings)
|
27
|
+
|
28
|
+
# Configure reverse backtraces on output
|
29
|
+
output.reverse_backtraces = settings.reverse_backtraces
|
30
|
+
|
31
|
+
# Telemetry pushes updates to output for display
|
32
|
+
Telemetry.subscribe output
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: test_bench_legacy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nathan Ladd
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Test Bench Legacy is the legacy version of a test framework for Ruby
|
14
|
+
designed to offer the minimum set of features necessary to test well designed code
|
15
|
+
effectively.
|
16
|
+
email: jf.arseneau@wealthbar.com
|
17
|
+
executables:
|
18
|
+
- bench
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- bin/bench
|
23
|
+
- lib/test_bench.rb
|
24
|
+
- lib/test_bench/activate.rb
|
25
|
+
- lib/test_bench/assert.rb
|
26
|
+
- lib/test_bench/assert/failed.rb
|
27
|
+
- lib/test_bench/assert/proc.rb
|
28
|
+
- lib/test_bench/assert/refute.rb
|
29
|
+
- lib/test_bench/cli.rb
|
30
|
+
- lib/test_bench/cli/cli.rb
|
31
|
+
- lib/test_bench/controls.rb
|
32
|
+
- lib/test_bench/controls/binding.rb
|
33
|
+
- lib/test_bench/controls/clock/elapsed.rb
|
34
|
+
- lib/test_bench/controls/clock/reference.rb
|
35
|
+
- lib/test_bench/controls/dir_substitute.rb
|
36
|
+
- lib/test_bench/controls/error.rb
|
37
|
+
- lib/test_bench/controls/executor/substitute.rb
|
38
|
+
- lib/test_bench/controls/expand_path.rb
|
39
|
+
- lib/test_bench/controls/fixture.rb
|
40
|
+
- lib/test_bench/controls/kernel_substitute.rb
|
41
|
+
- lib/test_bench/controls/output.rb
|
42
|
+
- lib/test_bench/controls/path.rb
|
43
|
+
- lib/test_bench/controls/result.rb
|
44
|
+
- lib/test_bench/controls/telemetry.rb
|
45
|
+
- lib/test_bench/controls/test_script.rb
|
46
|
+
- lib/test_bench/executor.rb
|
47
|
+
- lib/test_bench/expand_path.rb
|
48
|
+
- lib/test_bench/fixture.rb
|
49
|
+
- lib/test_bench/output.rb
|
50
|
+
- lib/test_bench/output/assertions.rb
|
51
|
+
- lib/test_bench/output/palette.rb
|
52
|
+
- lib/test_bench/output/writer.rb
|
53
|
+
- lib/test_bench/output/writer/assertions.rb
|
54
|
+
- lib/test_bench/output/writer/assertions/line.rb
|
55
|
+
- lib/test_bench/registry.rb
|
56
|
+
- lib/test_bench/result.rb
|
57
|
+
- lib/test_bench/result/assertions.rb
|
58
|
+
- lib/test_bench/result/null.rb
|
59
|
+
- lib/test_bench/runner.rb
|
60
|
+
- lib/test_bench/settings.rb
|
61
|
+
- lib/test_bench/settings/defaults.rb
|
62
|
+
- lib/test_bench/settings/environment.rb
|
63
|
+
- lib/test_bench/settings/registry.rb
|
64
|
+
- lib/test_bench/structure.rb
|
65
|
+
- lib/test_bench/telemetry.rb
|
66
|
+
- lib/test_bench/telemetry/assertions.rb
|
67
|
+
- lib/test_bench/telemetry/registry.rb
|
68
|
+
- lib/test_bench/telemetry/subscription.rb
|
69
|
+
- lib/test_bench/test_bench.rb
|
70
|
+
homepage: https://github.com/WealthBar/test-bench-1.x
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.7.6
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: The legacy version of a frugal test framework for Ruby
|
94
|
+
test_files: []
|