test_bench 1.0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/test_bench.rb +37 -0
- data/lib/test_bench/cli.rb +43 -0
- data/lib/test_bench/cli/parse_arguments.rb +168 -0
- data/lib/test_bench/controls.rb +22 -0
- data/lib/test_bench/controls/caller_location.rb +5 -0
- data/lib/test_bench/controls/depth.rb +21 -0
- data/lib/test_bench/controls/device.rb +27 -0
- data/lib/test_bench/controls/directory.rb +15 -0
- data/lib/test_bench/controls/error.rb +35 -0
- data/lib/test_bench/controls/fixture.rb +29 -0
- data/lib/test_bench/controls/output/escape_code.rb +23 -0
- data/lib/test_bench/controls/output/newline_character.rb +11 -0
- data/lib/test_bench/controls/output/print_error.rb +19 -0
- data/lib/test_bench/controls/output/styling.rb +29 -0
- data/lib/test_bench/controls/output/summary/error.rb +44 -0
- data/lib/test_bench/controls/output/summary/run.rb +59 -0
- data/lib/test_bench/controls/path.rb +15 -0
- data/lib/test_bench/controls/pattern.rb +29 -0
- data/lib/test_bench/controls/result.rb +5 -0
- data/lib/test_bench/controls/test_file.rb +5 -0
- data/lib/test_bench/controls/time.rb +61 -0
- data/lib/test_bench/deactivation_variants.rb +21 -0
- data/lib/test_bench/environment/boolean.rb +40 -0
- data/lib/test_bench/fixtures.rb +3 -0
- data/lib/test_bench/fixtures/configure_receiver.rb +80 -0
- data/lib/test_bench/output.rb +9 -0
- data/lib/test_bench/output/build.rb +57 -0
- data/lib/test_bench/output/levels/debug.rb +229 -0
- data/lib/test_bench/output/levels/failure.rb +31 -0
- data/lib/test_bench/output/levels/none.rb +13 -0
- data/lib/test_bench/output/levels/pass.rb +274 -0
- data/lib/test_bench/output/levels/summary.rb +21 -0
- data/lib/test_bench/output/print_error.rb +163 -0
- data/lib/test_bench/output/summary/error.rb +77 -0
- data/lib/test_bench/output/summary/run.rb +102 -0
- data/lib/test_bench/output/summary/run/print.rb +98 -0
- data/lib/test_bench/output/timer.rb +75 -0
- data/lib/test_bench/output/timer/substitute.rb +45 -0
- data/lib/test_bench/output/writer.rb +192 -0
- data/lib/test_bench/output/writer/dependency.rb +12 -0
- data/lib/test_bench/output/writer/sgr.rb +54 -0
- data/lib/test_bench/output/writer/substitute.rb +38 -0
- data/lib/test_bench/run.rb +103 -0
- data/lib/test_bench/run/substitute.rb +36 -0
- data/lib/test_bench/test_bench.rb +76 -0
- data/script/bench +19 -0
- metadata +117 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Controls
|
3
|
+
module Output
|
4
|
+
module PrintError
|
5
|
+
def self.example(omit_backtrace_pattern: nil, reverse_backtraces: nil, writer: nil)
|
6
|
+
print_error = Example.new
|
7
|
+
print_error.omit_backtrace_pattern = omit_backtrace_pattern unless omit_backtrace_pattern.nil?
|
8
|
+
print_error.reverse_backtraces = reverse_backtraces unless reverse_backtraces.nil?
|
9
|
+
print_error.writer = writer unless writer.nil?
|
10
|
+
print_error
|
11
|
+
end
|
12
|
+
|
13
|
+
class Example
|
14
|
+
include TestBench::Output::PrintError
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Controls
|
3
|
+
module Output
|
4
|
+
module Styling
|
5
|
+
def self.example
|
6
|
+
detect
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.detect
|
10
|
+
:detect
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.on
|
14
|
+
:on
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.off
|
18
|
+
:off
|
19
|
+
end
|
20
|
+
|
21
|
+
module Invalid
|
22
|
+
def self.example
|
23
|
+
:not_a_styling_setting
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Controls
|
3
|
+
module Output
|
4
|
+
module Summary
|
5
|
+
module Error
|
6
|
+
def self.example(writer: nil)
|
7
|
+
error_summary = Example.new
|
8
|
+
error_summary.writer = writer unless writer.nil?
|
9
|
+
error_summary
|
10
|
+
end
|
11
|
+
|
12
|
+
class Example
|
13
|
+
include TestBench::Fixture::Output
|
14
|
+
include TestBench::Output::Summary::Error
|
15
|
+
|
16
|
+
TestBench::Fixture::Output.instance_methods.each do |method|
|
17
|
+
define_method(method) do |*|
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Text
|
23
|
+
def self.example
|
24
|
+
<<~TEXT
|
25
|
+
Error Summary:
|
26
|
+
1: #{file}
|
27
|
+
#{error.backtrace[0]}: #{error} (#{error.class})
|
28
|
+
|
29
|
+
TEXT
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.file
|
33
|
+
TestFile.filename
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.error
|
37
|
+
Controls::Error.example
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Controls
|
3
|
+
module Output
|
4
|
+
module Summary
|
5
|
+
module Run
|
6
|
+
def self.example(writer: nil, timer: nil)
|
7
|
+
run_summary = Example.new
|
8
|
+
run_summary.writer = writer unless writer.nil?
|
9
|
+
run_summary.timer = timer unless timer.nil?
|
10
|
+
run_summary
|
11
|
+
end
|
12
|
+
|
13
|
+
class Example
|
14
|
+
include TestBench::Fixture::Output
|
15
|
+
include TestBench::Output::Summary::Run
|
16
|
+
|
17
|
+
TestBench::Fixture::Output.instance_methods.each do |method|
|
18
|
+
define_method(method) do |*|
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Text
|
24
|
+
def self.example
|
25
|
+
<<~TEXT
|
26
|
+
Finished running 0 files
|
27
|
+
Ran 0 tests in 0.000s (0.0 tests/second)
|
28
|
+
0 passed, 0 skipped, 0 failed, 0 total errors
|
29
|
+
|
30
|
+
TEXT
|
31
|
+
end
|
32
|
+
|
33
|
+
module Pass
|
34
|
+
def self.example
|
35
|
+
<<~TEXT
|
36
|
+
Finished running 1 file
|
37
|
+
Ran 1 test in 0.000s (0.0 tests/second)
|
38
|
+
1 passed, 0 skipped, 0 failed, 0 total errors
|
39
|
+
|
40
|
+
TEXT
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Failure
|
45
|
+
def self.example
|
46
|
+
<<~TEXT
|
47
|
+
Finished running 1 file
|
48
|
+
Ran 1 test in 0.000s (0.0 tests/second)
|
49
|
+
0 passed, 0 skipped, 1 failed, 1 total error
|
50
|
+
|
51
|
+
TEXT
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TestBench
|
2
|
+
module Controls
|
3
|
+
module Pattern
|
4
|
+
def self.example
|
5
|
+
/#{text}/
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.text
|
9
|
+
'some-pattern'
|
10
|
+
end
|
11
|
+
|
12
|
+
module None
|
13
|
+
def self.example
|
14
|
+
/#{text}/
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.text
|
18
|
+
'\z.'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Invalid
|
23
|
+
def self.text
|
24
|
+
'('
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,61 @@
|
|
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
|
+
tz_offset = self.tz_offset
|
16
|
+
|
17
|
+
::Time.new(year, month, day, hours, minutes, seconds, tz_offset)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.year
|
21
|
+
2000
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.month
|
25
|
+
1
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.day
|
29
|
+
1
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.hours
|
33
|
+
11
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.minutes
|
37
|
+
11
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.seconds
|
41
|
+
11.0
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.tz_offset
|
45
|
+
0
|
46
|
+
end
|
47
|
+
|
48
|
+
module Elapsed
|
49
|
+
def self.example
|
50
|
+
1.111
|
51
|
+
end
|
52
|
+
|
53
|
+
module Text
|
54
|
+
def self.example
|
55
|
+
"1.111s"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module TestBench
|
2
|
+
module DeactivationVariants
|
3
|
+
def _context(title=nil, &block)
|
4
|
+
test_session.fail! if Defaults.fail_session
|
5
|
+
|
6
|
+
context(title)
|
7
|
+
end
|
8
|
+
|
9
|
+
def _test(title=nil, &block)
|
10
|
+
test_session.fail! if Defaults.fail_session
|
11
|
+
|
12
|
+
test(title)
|
13
|
+
end
|
14
|
+
|
15
|
+
module Defaults
|
16
|
+
def self.fail_session
|
17
|
+
Environment::Boolean.fetch('TEST_BENCH_FAIL_DEACTIVATED_TESTS', true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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
|
@@ -0,0 +1,80 @@
|
|
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
|