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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench/cli.rb +268 -18
  3. data/lib/test_bench/controls/file.rb +5 -0
  4. data/lib/test_bench/controls/path.rb +1 -11
  5. data/lib/test_bench/controls/random.rb +7 -0
  6. data/lib/test_bench/controls/result.rb +1 -1
  7. data/lib/test_bench/controls/stdin.rb +27 -0
  8. data/lib/test_bench/controls.rb +7 -24
  9. data/lib/test_bench/test_bench.rb +23 -77
  10. data/lib/test_bench.rb +1 -35
  11. metadata +16 -55
  12. data/lib/test_bench/cli/parse_arguments.rb +0 -181
  13. data/lib/test_bench/controls/caller_location.rb +0 -5
  14. data/lib/test_bench/controls/depth.rb +0 -21
  15. data/lib/test_bench/controls/device.rb +0 -27
  16. data/lib/test_bench/controls/directory.rb +0 -15
  17. data/lib/test_bench/controls/error.rb +0 -35
  18. data/lib/test_bench/controls/fixture.rb +0 -29
  19. data/lib/test_bench/controls/output/batch_data.rb +0 -52
  20. data/lib/test_bench/controls/output/detail_setting.rb +0 -29
  21. data/lib/test_bench/controls/output/escape_code.rb +0 -23
  22. data/lib/test_bench/controls/output/exercise.rb +0 -7
  23. data/lib/test_bench/controls/output/log_level.rb +0 -7
  24. data/lib/test_bench/controls/output/newline_character.rb +0 -16
  25. data/lib/test_bench/controls/output/print_error.rb +0 -19
  26. data/lib/test_bench/controls/output/styling.rb +0 -29
  27. data/lib/test_bench/controls/output/summary/error.rb +0 -28
  28. data/lib/test_bench/controls/output/summary/session.rb +0 -20
  29. data/lib/test_bench/controls/pattern.rb +0 -33
  30. data/lib/test_bench/controls/test_file.rb +0 -5
  31. data/lib/test_bench/controls/time.rb +0 -89
  32. data/lib/test_bench/deactivation_variants.rb +0 -11
  33. data/lib/test_bench/environment/boolean.rb +0 -40
  34. data/lib/test_bench/fixtures/configure_receiver.rb +0 -80
  35. data/lib/test_bench/fixtures.rb +0 -5
  36. data/lib/test_bench/output/batch_data.rb +0 -17
  37. data/lib/test_bench/output/buffer.rb +0 -114
  38. data/lib/test_bench/output/log.rb +0 -27
  39. data/lib/test_bench/output/print_error.rb +0 -163
  40. data/lib/test_bench/output/raw.rb +0 -363
  41. data/lib/test_bench/output/summary/session.rb +0 -94
  42. data/lib/test_bench/output/summary.rb +0 -146
  43. data/lib/test_bench/output/timer/substitute.rb +0 -45
  44. data/lib/test_bench/output/timer.rb +0 -75
  45. data/lib/test_bench/output/writer/dependency.rb +0 -12
  46. data/lib/test_bench/output/writer/sgr.rb +0 -54
  47. data/lib/test_bench/output/writer/substitute.rb +0 -38
  48. data/lib/test_bench/output/writer.rb +0 -192
  49. data/lib/test_bench/output.rb +0 -21
  50. data/lib/test_bench/run/substitute.rb +0 -36
  51. data/lib/test_bench/run.rb +0 -113
  52. 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,5 +0,0 @@
1
- module TestBench
2
- module Controls
3
- TestFile = TestBench::Fixture::Controls::TestFile
4
- end
5
- 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,11 +0,0 @@
1
- module TestBench
2
- module DeactivationVariants
3
- def _context(title=nil, &block)
4
- context(title)
5
- end
6
-
7
- def _test(title=nil, &block)
8
- test(title)
9
- end
10
- end
11
- 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
@@ -1,5 +0,0 @@
1
- unless RUBY_ENGINE == 'mruby'
2
- require 'ostruct'
3
- end
4
-
5
- require 'test_bench/fixtures/configure_receiver'
@@ -1,17 +0,0 @@
1
- module TestBench
2
- module Output
3
- BatchData = Struct.new(:result, :depth) do
4
- def passed?
5
- result
6
- end
7
-
8
- def failed?
9
- !result
10
- end
11
-
12
- def toplevel?
13
- depth.zero?
14
- end
15
- end
16
- end
17
- end
@@ -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