test_bench 1.2.0.10 → 2.0.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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