test_bench 1.0.0.0

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