test_bench 1.0.0.0

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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/lib/test_bench.rb +37 -0
  3. data/lib/test_bench/cli.rb +43 -0
  4. data/lib/test_bench/cli/parse_arguments.rb +168 -0
  5. data/lib/test_bench/controls.rb +22 -0
  6. data/lib/test_bench/controls/caller_location.rb +5 -0
  7. data/lib/test_bench/controls/depth.rb +21 -0
  8. data/lib/test_bench/controls/device.rb +27 -0
  9. data/lib/test_bench/controls/directory.rb +15 -0
  10. data/lib/test_bench/controls/error.rb +35 -0
  11. data/lib/test_bench/controls/fixture.rb +29 -0
  12. data/lib/test_bench/controls/output/escape_code.rb +23 -0
  13. data/lib/test_bench/controls/output/newline_character.rb +11 -0
  14. data/lib/test_bench/controls/output/print_error.rb +19 -0
  15. data/lib/test_bench/controls/output/styling.rb +29 -0
  16. data/lib/test_bench/controls/output/summary/error.rb +44 -0
  17. data/lib/test_bench/controls/output/summary/run.rb +59 -0
  18. data/lib/test_bench/controls/path.rb +15 -0
  19. data/lib/test_bench/controls/pattern.rb +29 -0
  20. data/lib/test_bench/controls/result.rb +5 -0
  21. data/lib/test_bench/controls/test_file.rb +5 -0
  22. data/lib/test_bench/controls/time.rb +61 -0
  23. data/lib/test_bench/deactivation_variants.rb +21 -0
  24. data/lib/test_bench/environment/boolean.rb +40 -0
  25. data/lib/test_bench/fixtures.rb +3 -0
  26. data/lib/test_bench/fixtures/configure_receiver.rb +80 -0
  27. data/lib/test_bench/output.rb +9 -0
  28. data/lib/test_bench/output/build.rb +57 -0
  29. data/lib/test_bench/output/levels/debug.rb +229 -0
  30. data/lib/test_bench/output/levels/failure.rb +31 -0
  31. data/lib/test_bench/output/levels/none.rb +13 -0
  32. data/lib/test_bench/output/levels/pass.rb +274 -0
  33. data/lib/test_bench/output/levels/summary.rb +21 -0
  34. data/lib/test_bench/output/print_error.rb +163 -0
  35. data/lib/test_bench/output/summary/error.rb +77 -0
  36. data/lib/test_bench/output/summary/run.rb +102 -0
  37. data/lib/test_bench/output/summary/run/print.rb +98 -0
  38. data/lib/test_bench/output/timer.rb +75 -0
  39. data/lib/test_bench/output/timer/substitute.rb +45 -0
  40. data/lib/test_bench/output/writer.rb +192 -0
  41. data/lib/test_bench/output/writer/dependency.rb +12 -0
  42. data/lib/test_bench/output/writer/sgr.rb +54 -0
  43. data/lib/test_bench/output/writer/substitute.rb +38 -0
  44. data/lib/test_bench/run.rb +103 -0
  45. data/lib/test_bench/run/substitute.rb +36 -0
  46. data/lib/test_bench/test_bench.rb +76 -0
  47. data/script/bench +19 -0
  48. metadata +117 -0
@@ -0,0 +1,11 @@
1
+ module TestBench
2
+ module Controls
3
+ module Output
4
+ module NewlineCharacter
5
+ def self.example
6
+ StringIO.new.tap(&:puts).string
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -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,15 @@
1
+ module TestBench
2
+ module Controls
3
+ module Path
4
+ def self.example
5
+ TestFile.filename
6
+ end
7
+
8
+ def self.alternate
9
+ TestFile::Alternate.filename
10
+ end
11
+
12
+ Directory = Controls::Directory
13
+ end
14
+ end
15
+ 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,5 @@
1
+ module TestBench
2
+ module Controls
3
+ Result = TestBench::Fixture::Controls::Result
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module TestBench
2
+ module Controls
3
+ TestFile = TestBench::Fixture::Controls::TestFile
4
+ end
5
+ 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,3 @@
1
+ require 'ostruct'
2
+
3
+ require 'test_bench/fixtures/configure_receiver'
@@ -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