test_bench 1.2.0.10 → 2.0.0.0.pre1
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 +4 -4
- data/lib/test_bench/cli.rb +268 -18
- data/lib/test_bench/controls/file.rb +5 -0
- data/lib/test_bench/controls/path.rb +1 -11
- data/lib/test_bench/controls/random.rb +7 -0
- data/lib/test_bench/controls/result.rb +1 -1
- data/lib/test_bench/controls/stdin.rb +27 -0
- data/lib/test_bench/controls.rb +7 -24
- data/lib/test_bench/test_bench.rb +23 -77
- data/lib/test_bench.rb +1 -35
- metadata +16 -55
- data/lib/test_bench/cli/parse_arguments.rb +0 -181
- data/lib/test_bench/controls/caller_location.rb +0 -5
- data/lib/test_bench/controls/depth.rb +0 -21
- data/lib/test_bench/controls/device.rb +0 -27
- data/lib/test_bench/controls/directory.rb +0 -15
- data/lib/test_bench/controls/error.rb +0 -35
- data/lib/test_bench/controls/fixture.rb +0 -29
- data/lib/test_bench/controls/output/batch_data.rb +0 -52
- data/lib/test_bench/controls/output/detail_setting.rb +0 -29
- data/lib/test_bench/controls/output/escape_code.rb +0 -23
- data/lib/test_bench/controls/output/exercise.rb +0 -7
- data/lib/test_bench/controls/output/log_level.rb +0 -7
- data/lib/test_bench/controls/output/newline_character.rb +0 -16
- data/lib/test_bench/controls/output/print_error.rb +0 -19
- data/lib/test_bench/controls/output/styling.rb +0 -29
- data/lib/test_bench/controls/output/summary/error.rb +0 -28
- data/lib/test_bench/controls/output/summary/session.rb +0 -20
- data/lib/test_bench/controls/pattern.rb +0 -33
- data/lib/test_bench/controls/test_file.rb +0 -5
- data/lib/test_bench/controls/time.rb +0 -89
- data/lib/test_bench/deactivation_variants.rb +0 -11
- data/lib/test_bench/environment/boolean.rb +0 -40
- data/lib/test_bench/fixtures/configure_receiver.rb +0 -80
- data/lib/test_bench/fixtures.rb +0 -5
- data/lib/test_bench/output/batch_data.rb +0 -17
- data/lib/test_bench/output/buffer.rb +0 -114
- data/lib/test_bench/output/log.rb +0 -27
- data/lib/test_bench/output/print_error.rb +0 -163
- data/lib/test_bench/output/raw.rb +0 -363
- data/lib/test_bench/output/summary/session.rb +0 -94
- data/lib/test_bench/output/summary.rb +0 -146
- data/lib/test_bench/output/timer/substitute.rb +0 -45
- data/lib/test_bench/output/timer.rb +0 -75
- data/lib/test_bench/output/writer/dependency.rb +0 -12
- data/lib/test_bench/output/writer/sgr.rb +0 -54
- data/lib/test_bench/output/writer/substitute.rb +0 -38
- data/lib/test_bench/output/writer.rb +0 -192
- data/lib/test_bench/output.rb +0 -21
- data/lib/test_bench/run/substitute.rb +0 -36
- data/lib/test_bench/run.rb +0 -113
- data/script/bench +0 -19
@@ -1,33 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Controls
|
3
|
-
module Pattern
|
4
|
-
def self.example(text=nil)
|
5
|
-
text ||= self.text
|
6
|
-
|
7
|
-
escaped_text = Regexp.escape(text)
|
8
|
-
|
9
|
-
Regexp.new(escaped_text)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.text
|
13
|
-
'some-pattern'
|
14
|
-
end
|
15
|
-
|
16
|
-
module None
|
17
|
-
def self.example
|
18
|
-
/#{text}/
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.text
|
22
|
-
'\z.'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
module Invalid
|
27
|
-
def self.text
|
28
|
-
'('
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Controls
|
3
|
-
module Time
|
4
|
-
def self.example(seconds_offset: nil)
|
5
|
-
seconds_offset ||= 0
|
6
|
-
|
7
|
-
year = self.year
|
8
|
-
month = self.month
|
9
|
-
day = self.day
|
10
|
-
|
11
|
-
hours = self.hours
|
12
|
-
minutes = self.minutes
|
13
|
-
seconds = self.seconds + seconds_offset
|
14
|
-
|
15
|
-
if not RUBY_ENGINE == 'mruby'
|
16
|
-
tz_offset = self.tz_offset
|
17
|
-
|
18
|
-
final_argument = tz_offset
|
19
|
-
else
|
20
|
-
seconds, subseconds = seconds.divmod(1)
|
21
|
-
|
22
|
-
microseconds = subseconds * 1_000_000
|
23
|
-
|
24
|
-
final_argument = microseconds
|
25
|
-
end
|
26
|
-
|
27
|
-
::Time.new(year, month, day, hours, minutes, seconds, final_argument)
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.year
|
31
|
-
2000
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.month
|
35
|
-
1
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.day
|
39
|
-
1
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.hours
|
43
|
-
11
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.minutes
|
47
|
-
11
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.seconds
|
51
|
-
11.0
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.tz_offset
|
55
|
-
0
|
56
|
-
end
|
57
|
-
|
58
|
-
module Elapsed
|
59
|
-
def self.example
|
60
|
-
1.111
|
61
|
-
end
|
62
|
-
|
63
|
-
module Text
|
64
|
-
def self.example
|
65
|
-
"1.111s"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
module PerSecond
|
70
|
-
def self.example
|
71
|
-
elapsed_time = Elapsed.example
|
72
|
-
|
73
|
-
Rational(ocurrences, elapsed_time)
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.ocurrences
|
77
|
-
1
|
78
|
-
end
|
79
|
-
|
80
|
-
module Text
|
81
|
-
def self.example
|
82
|
-
"0.9"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Environment
|
3
|
-
module Boolean
|
4
|
-
Error = Class.new(RuntimeError)
|
5
|
-
|
6
|
-
def self.fetch(env_var, default_value=nil, env: nil)
|
7
|
-
value = get(env_var, env: env)
|
8
|
-
|
9
|
-
return default_value if value.nil?
|
10
|
-
|
11
|
-
value
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.get(env_var, env: nil)
|
15
|
-
env ||= ::ENV
|
16
|
-
|
17
|
-
return nil unless env.key?(env_var)
|
18
|
-
|
19
|
-
text_value = env.fetch(env_var)
|
20
|
-
|
21
|
-
case text_value
|
22
|
-
when true_pattern
|
23
|
-
true
|
24
|
-
when false_pattern
|
25
|
-
false
|
26
|
-
else
|
27
|
-
raise Error, "Invalid boolean value for ENV variable #{env_var.inspect} (Value: #{text_value.inspect})"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.true_pattern
|
32
|
-
@true_pattern ||= %r{\A(?:on|yes|y|true|t|1)\z}ni
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.false_pattern
|
36
|
-
@false_pattern ||= %r{\A(?:off|no|n|false|f|0)\z}ni
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Fixtures
|
3
|
-
class ConfigureReceiver
|
4
|
-
include TestBench::Fixture
|
5
|
-
|
6
|
-
attr_reader :cls
|
7
|
-
attr_reader :default_attr_name
|
8
|
-
|
9
|
-
def args
|
10
|
-
@args ||= []
|
11
|
-
end
|
12
|
-
|
13
|
-
def kwargs
|
14
|
-
@kwargs ||= {}
|
15
|
-
end
|
16
|
-
|
17
|
-
def initialize(cls, default_attr_name, args=nil, kwargs=nil)
|
18
|
-
@cls = cls
|
19
|
-
@default_attr_name = default_attr_name
|
20
|
-
@args = args
|
21
|
-
@kwargs = kwargs
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.build(cls, *args, attr_name:, **kwargs)
|
25
|
-
new(cls, attr_name, args, kwargs)
|
26
|
-
end
|
27
|
-
|
28
|
-
def call
|
29
|
-
test "Responds to configure" do
|
30
|
-
assert(cls.respond_to?(:configure))
|
31
|
-
end or return
|
32
|
-
|
33
|
-
context do
|
34
|
-
receiver = OpenStruct.new
|
35
|
-
|
36
|
-
instance = configure(receiver)
|
37
|
-
|
38
|
-
test "Attribute is set on receiver" do
|
39
|
-
refute(receiver.public_send(default_attr_name).nil?)
|
40
|
-
end
|
41
|
-
|
42
|
-
test "Returns the instance that was assigned" do
|
43
|
-
assert(receiver.public_send(default_attr_name).equal?(instance))
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "Optional Attribute Name" do
|
48
|
-
context "Given" do
|
49
|
-
receiver = OpenStruct.new
|
50
|
-
attr_name = :given_attr_name
|
51
|
-
|
52
|
-
configure(receiver, attr_name: attr_name)
|
53
|
-
|
54
|
-
test "Given attribute is set on receiver (Attribute: #{attr_name})" do
|
55
|
-
refute(receiver.public_send(attr_name).nil?)
|
56
|
-
end
|
57
|
-
|
58
|
-
test "Default attribute is not set on receiver" do
|
59
|
-
assert(receiver.public_send(default_attr_name).nil?)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "Omitted" do
|
64
|
-
receiver = OpenStruct.new
|
65
|
-
|
66
|
-
configure(receiver)
|
67
|
-
|
68
|
-
test "Default attribute is set on receiver (Attribute: #{default_attr_name})" do
|
69
|
-
refute(receiver.public_send(default_attr_name).nil?)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def configure(receiver, attr_name: nil)
|
76
|
-
cls.configure(receiver, *args, attr_name: attr_name, **kwargs)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
data/lib/test_bench/fixtures.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Output
|
3
|
-
class Buffer < Fixture::Output::Capture
|
4
|
-
attr_accessor :writer
|
5
|
-
|
6
|
-
def raw_output
|
7
|
-
@raw_output ||= Raw.new
|
8
|
-
end
|
9
|
-
attr_writer :raw_output
|
10
|
-
|
11
|
-
def stack
|
12
|
-
@stack ||= []
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.build(verbose: nil, detail: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil, writer: nil, device: nil, styling: nil)
|
16
|
-
instance = new
|
17
|
-
|
18
|
-
raw_output = Raw.configure(instance, verbose: verbose, detail: detail, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces, writer: writer, device: device, styling: styling)
|
19
|
-
|
20
|
-
instance.writer = raw_output.writer
|
21
|
-
|
22
|
-
instance
|
23
|
-
end
|
24
|
-
|
25
|
-
def exit_context(*)
|
26
|
-
super
|
27
|
-
|
28
|
-
flush unless buffering?
|
29
|
-
end
|
30
|
-
|
31
|
-
def finish_test(*)
|
32
|
-
super
|
33
|
-
|
34
|
-
flush unless buffering?
|
35
|
-
end
|
36
|
-
|
37
|
-
def finish_fixture(*)
|
38
|
-
super
|
39
|
-
|
40
|
-
flush unless buffering?
|
41
|
-
end
|
42
|
-
|
43
|
-
def new_record(signal, data)
|
44
|
-
record = super
|
45
|
-
|
46
|
-
record.extend(Record)
|
47
|
-
|
48
|
-
case signal
|
49
|
-
when :enter_context, :start_test, :start_fixture
|
50
|
-
start_batch(record)
|
51
|
-
|
52
|
-
when :exit_context, :finish_test, :finish_fixture
|
53
|
-
result = record.data.last
|
54
|
-
|
55
|
-
finish_batch(record, result)
|
56
|
-
end
|
57
|
-
|
58
|
-
record
|
59
|
-
end
|
60
|
-
|
61
|
-
def start_batch(record)
|
62
|
-
record.start_batch(stack_depth)
|
63
|
-
|
64
|
-
stack.push(record)
|
65
|
-
end
|
66
|
-
|
67
|
-
def finish_batch(final_record, result)
|
68
|
-
first_record = stack.pop
|
69
|
-
|
70
|
-
batch_data = first_record.batch_data
|
71
|
-
batch_data.result = result
|
72
|
-
|
73
|
-
final_record.batch_data = first_record.batch_data
|
74
|
-
end
|
75
|
-
|
76
|
-
def flush
|
77
|
-
records.each do |record|
|
78
|
-
record.forward(raw_output)
|
79
|
-
end
|
80
|
-
|
81
|
-
records.clear
|
82
|
-
end
|
83
|
-
|
84
|
-
def buffering?
|
85
|
-
stack_depth.nonzero?
|
86
|
-
end
|
87
|
-
|
88
|
-
def stack_depth
|
89
|
-
stack.length
|
90
|
-
end
|
91
|
-
|
92
|
-
module Record
|
93
|
-
attr_accessor :batch_data
|
94
|
-
|
95
|
-
def forward(raw_output)
|
96
|
-
return super if batch_data.nil?
|
97
|
-
|
98
|
-
raw_output.public_send(signal, *data, batch_data: batch_data)
|
99
|
-
end
|
100
|
-
|
101
|
-
def start_batch(depth)
|
102
|
-
batch_data = Output::BatchData.new
|
103
|
-
batch_data.depth = depth
|
104
|
-
|
105
|
-
self.batch_data = batch_data
|
106
|
-
end
|
107
|
-
|
108
|
-
def finish_batch(result)
|
109
|
-
batch_data.result = result
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Output
|
3
|
-
module Log
|
4
|
-
def self.build(device=nil, level: nil)
|
5
|
-
level ||= Defaults.level
|
6
|
-
|
7
|
-
Fixture::Output::Log.build(device, level: level)
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.default_level
|
11
|
-
:fatal
|
12
|
-
end
|
13
|
-
|
14
|
-
module Defaults
|
15
|
-
def self.level
|
16
|
-
level_text = ::ENV['TEST_BENCH_LOG_LEVEL']
|
17
|
-
|
18
|
-
if level_text.nil?
|
19
|
-
Log.default_level
|
20
|
-
else
|
21
|
-
level_text.to_sym
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,163 +0,0 @@
|
|
1
|
-
module TestBench
|
2
|
-
module Output
|
3
|
-
module PrintError
|
4
|
-
include Writer::Dependency
|
5
|
-
|
6
|
-
def omit_backtrace_pattern
|
7
|
-
@omit_backtrace_pattern ||= Defaults.omit_backtrace_pattern
|
8
|
-
end
|
9
|
-
attr_writer :omit_backtrace_pattern
|
10
|
-
|
11
|
-
def reverse_backtraces
|
12
|
-
instance_variable_defined?(:@reverse_backtraces) ?
|
13
|
-
@reverse_backtraces :
|
14
|
-
@reverse_backtraces = Defaults.reverse_backtraces
|
15
|
-
end
|
16
|
-
attr_writer :reverse_backtraces
|
17
|
-
|
18
|
-
def print_error(error)
|
19
|
-
PrintError.(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.call(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
|
23
|
-
writer ||= Writer.build
|
24
|
-
omit_backtrace_pattern ||= Defaults.omit_backtrace_pattern
|
25
|
-
reverse_backtraces = Defaults.reverse_backtraces if reverse_backtraces.nil?
|
26
|
-
|
27
|
-
writer.escape_code(:red)
|
28
|
-
|
29
|
-
if reverse_backtraces && error.backtrace.length > 1
|
30
|
-
writer
|
31
|
-
.indent
|
32
|
-
.escape_code(:bold)
|
33
|
-
.text("Traceback")
|
34
|
-
.escape_code(:reset_intensity)
|
35
|
-
.text(" (most recent call last):")
|
36
|
-
.newline
|
37
|
-
end
|
38
|
-
|
39
|
-
error(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
40
|
-
|
41
|
-
writer
|
42
|
-
.escape_code(:reset_fg)
|
43
|
-
.sync
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.error(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
|
47
|
-
reverse_backtraces = self.reverse_backtraces if reverse_backtraces.nil?
|
48
|
-
|
49
|
-
if reverse_backtraces
|
50
|
-
error_cause(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
51
|
-
error_backtrace(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
52
|
-
error_message(error, writer: writer)
|
53
|
-
else
|
54
|
-
error_message(error, writer: writer)
|
55
|
-
error_backtrace(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
56
|
-
error_cause(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.error_cause(error, **args)
|
61
|
-
error(error.cause, **args) unless error.cause.nil?
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.error_message(error, writer: nil)
|
65
|
-
caller_location = error.backtrace[0]
|
66
|
-
|
67
|
-
message = error.message
|
68
|
-
|
69
|
-
error_class = error.class.name
|
70
|
-
|
71
|
-
writer
|
72
|
-
.indent
|
73
|
-
.text("#{caller_location}: ")
|
74
|
-
.escape_code(:bold)
|
75
|
-
.text("#{message} (")
|
76
|
-
.escape_code(:underline)
|
77
|
-
.text(error_class)
|
78
|
-
.escape_code(:reset_underline)
|
79
|
-
.text(")")
|
80
|
-
.escape_code(:reset_intensity)
|
81
|
-
.newline
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.error_backtrace(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
|
85
|
-
writer ||= self.writer
|
86
|
-
omit_backtrace_pattern ||= self.omit_backtrace_pattern
|
87
|
-
reverse_backtraces = self.reverse_backtraces if reverse_backtraces.nil?
|
88
|
-
|
89
|
-
omitting = false
|
90
|
-
|
91
|
-
backtrace = error.backtrace[1..-1]
|
92
|
-
|
93
|
-
unless reverse_backtraces
|
94
|
-
backtrace_iterator = backtrace.each.with_index
|
95
|
-
else
|
96
|
-
frame_count = backtrace.count
|
97
|
-
|
98
|
-
number_width = frame_count.to_s.each_char.count
|
99
|
-
|
100
|
-
backtrace_iterator = backtrace.reverse_each.map.with_index do |location, index|
|
101
|
-
ordinal = frame_count - index
|
102
|
-
|
103
|
-
ordinal = ordinal.to_s.rjust(number_width, ' ')
|
104
|
-
|
105
|
-
[location, ordinal]
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
backtrace_iterator.each do |location, ordinal|
|
110
|
-
omit = omit_backtrace_pattern.match?(location)
|
111
|
-
|
112
|
-
next if omit && omitting
|
113
|
-
|
114
|
-
writer
|
115
|
-
.text("\t")
|
116
|
-
.indent
|
117
|
-
|
118
|
-
if omit
|
119
|
-
omitting = true
|
120
|
-
|
121
|
-
if reverse_backtraces
|
122
|
-
ordinal.gsub!(/[[:digit:]]/, '?')
|
123
|
-
|
124
|
-
writer.text("#{ordinal}: ")
|
125
|
-
end
|
126
|
-
|
127
|
-
writer
|
128
|
-
.escape_code(:faint)
|
129
|
-
.escape_code(:italic)
|
130
|
-
.text('*omitted*')
|
131
|
-
.escape_code(:reset_italic)
|
132
|
-
.escape_code(:reset_intensity)
|
133
|
-
|
134
|
-
else
|
135
|
-
omitting = false
|
136
|
-
|
137
|
-
if reverse_backtraces
|
138
|
-
writer.text("#{ordinal}: ")
|
139
|
-
end
|
140
|
-
|
141
|
-
writer.text("from #{location}")
|
142
|
-
end
|
143
|
-
|
144
|
-
writer.newline
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
module Defaults
|
149
|
-
def self.omit_backtrace_pattern
|
150
|
-
pattern = ENV.fetch('TEST_BENCH_OMIT_BACKTRACE_PATTERN') do
|
151
|
-
'test_bench'
|
152
|
-
end
|
153
|
-
|
154
|
-
Regexp.new(pattern)
|
155
|
-
end
|
156
|
-
|
157
|
-
def self.reverse_backtraces
|
158
|
-
Environment::Boolean.fetch('TEST_BENCH_REVERSE_BACKTRACES', false)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|