test_bench_legacy 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bench +10 -0
  3. data/lib/test_bench.rb +37 -0
  4. data/lib/test_bench/activate.rb +3 -0
  5. data/lib/test_bench/assert.rb +58 -0
  6. data/lib/test_bench/assert/failed.rb +25 -0
  7. data/lib/test_bench/assert/proc.rb +24 -0
  8. data/lib/test_bench/assert/refute.rb +9 -0
  9. data/lib/test_bench/cli.rb +4 -0
  10. data/lib/test_bench/cli/cli.rb +108 -0
  11. data/lib/test_bench/controls.rb +16 -0
  12. data/lib/test_bench/controls/binding.rb +17 -0
  13. data/lib/test_bench/controls/clock/elapsed.rb +41 -0
  14. data/lib/test_bench/controls/clock/reference.rb +15 -0
  15. data/lib/test_bench/controls/dir_substitute.rb +58 -0
  16. data/lib/test_bench/controls/error.rb +63 -0
  17. data/lib/test_bench/controls/executor/substitute.rb +27 -0
  18. data/lib/test_bench/controls/expand_path.rb +23 -0
  19. data/lib/test_bench/controls/fixture.rb +36 -0
  20. data/lib/test_bench/controls/kernel_substitute.rb +72 -0
  21. data/lib/test_bench/controls/output.rb +106 -0
  22. data/lib/test_bench/controls/path.rb +11 -0
  23. data/lib/test_bench/controls/result.rb +64 -0
  24. data/lib/test_bench/controls/telemetry.rb +23 -0
  25. data/lib/test_bench/controls/test_script.rb +23 -0
  26. data/lib/test_bench/executor.rb +45 -0
  27. data/lib/test_bench/expand_path.rb +44 -0
  28. data/lib/test_bench/fixture.rb +17 -0
  29. data/lib/test_bench/output.rb +169 -0
  30. data/lib/test_bench/output/assertions.rb +43 -0
  31. data/lib/test_bench/output/palette.rb +59 -0
  32. data/lib/test_bench/output/writer.rb +94 -0
  33. data/lib/test_bench/output/writer/assertions.rb +29 -0
  34. data/lib/test_bench/output/writer/assertions/line.rb +76 -0
  35. data/lib/test_bench/registry.rb +32 -0
  36. data/lib/test_bench/result.rb +71 -0
  37. data/lib/test_bench/result/assertions.rb +11 -0
  38. data/lib/test_bench/result/null.rb +12 -0
  39. data/lib/test_bench/runner.rb +59 -0
  40. data/lib/test_bench/settings.rb +62 -0
  41. data/lib/test_bench/settings/defaults.rb +29 -0
  42. data/lib/test_bench/settings/environment.rb +124 -0
  43. data/lib/test_bench/settings/registry.rb +17 -0
  44. data/lib/test_bench/structure.rb +89 -0
  45. data/lib/test_bench/telemetry.rb +130 -0
  46. data/lib/test_bench/telemetry/assertions.rb +85 -0
  47. data/lib/test_bench/telemetry/registry.rb +17 -0
  48. data/lib/test_bench/telemetry/subscription.rb +23 -0
  49. data/lib/test_bench/test_bench.rb +33 -0
  50. metadata +94 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f8a3bbbea3b17a0bfef403315e96bc36ec72f85cc5f51f7168698626ef009976
4
+ data.tar.gz: 4bd2579635c5df18083d50861dcae2f7f186be176ec99adc4d55de2f735c0a96
5
+ SHA512:
6
+ metadata.gz: 57515c64e1cb86885ede6dbcb18ecb3d284dda0549d5e35a11e7ca91c966042ec5cf950aa01a2479f0570101ce6ae1f40756ccdf13546d530e00c307489a9ffc
7
+ data.tar.gz: 9954bc2f45222fb7526aa3d3cf59843ce7371b37995c488010a6fec0275cf4feb10eaa749778a89e798ff3b642998fbea2dd61e4f99dd0a779488e7834d4fa69
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'test_bench/cli'
5
+ rescue LoadError
6
+ require_relative '../init'
7
+ require 'test_bench/cli'
8
+ end
9
+
10
+ TestBench::CLI.() or exit 1
@@ -0,0 +1,37 @@
1
+ require 'English'
2
+ require 'forwardable'
3
+ require 'observer'
4
+ require 'pathname'
5
+ require 'stringio'
6
+ require 'time'
7
+
8
+ require 'test_bench/telemetry'
9
+ require 'test_bench/telemetry/assertions'
10
+ require 'test_bench/telemetry/registry'
11
+ require 'test_bench/telemetry/subscription'
12
+
13
+ require 'test_bench/assert'
14
+ require 'test_bench/assert/failed'
15
+ require 'test_bench/assert/proc'
16
+ require 'test_bench/assert/refute'
17
+ require 'test_bench/executor'
18
+ require 'test_bench/expand_path'
19
+ require 'test_bench/fixture'
20
+ require 'test_bench/output'
21
+ require 'test_bench/output/assertions'
22
+ require 'test_bench/output/palette'
23
+ require 'test_bench/output/writer'
24
+ require 'test_bench/output/writer/assertions'
25
+ require 'test_bench/output/writer/assertions/line'
26
+ require 'test_bench/registry'
27
+ require 'test_bench/result'
28
+ require 'test_bench/result/assertions'
29
+ require 'test_bench/result/null'
30
+ require 'test_bench/runner'
31
+ require 'test_bench/settings'
32
+ require 'test_bench/settings/defaults'
33
+ require 'test_bench/settings/environment'
34
+ require 'test_bench/settings/registry'
35
+ require 'test_bench/structure'
36
+
37
+ require 'test_bench/test_bench'
@@ -0,0 +1,3 @@
1
+ require_relative '../test_bench'
2
+
3
+ TestBench.activate
@@ -0,0 +1,58 @@
1
+ module TestBench
2
+ class Assert
3
+ attr_reader :block
4
+ attr_reader :mod
5
+ attr_reader :subject
6
+
7
+ def initialize subject, mod, block
8
+ @subject = subject
9
+ @mod = mod
10
+ @block = block
11
+ end
12
+
13
+ def self.call subject, mod=nil, &block
14
+ block ||= identity_block
15
+
16
+ instance = new subject, mod, block
17
+ instance.call
18
+ end
19
+
20
+ def assertions_module
21
+ return mod if mod
22
+
23
+ if subject_namespace.const_defined? :Assertions
24
+ subject_namespace.const_get :Assertions
25
+ end
26
+ end
27
+
28
+ def call
29
+ extend_subject assertions_module if assertions_module
30
+
31
+ result = subject.instance_exec subject, &block
32
+
33
+ interpret_result result
34
+ end
35
+
36
+ def extend_subject mod
37
+ raise TypeError if subject.frozen?
38
+ subject.extend mod
39
+ rescue TypeError
40
+ end
41
+
42
+ def interpret_result result
43
+ if result then true else false end
44
+ end
45
+
46
+ def subject_namespace
47
+ if subject.is_a? Module
48
+ subject
49
+ else
50
+ subject.class
51
+ end
52
+ end
53
+
54
+ def self.identity_block
55
+ @identity_block ||= -> subject do subject end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,25 @@
1
+ module TestBench
2
+ class Assert
3
+ class Failed < StandardError
4
+ attr_reader :backtrace_locations
5
+
6
+ def initialize backtrace_locations
7
+ @backtrace_locations = backtrace_locations
8
+ end
9
+
10
+ def self.build backtrace_location=nil
11
+ backtrace_location ||= caller_locations[0]
12
+
13
+ new [backtrace_location]
14
+ end
15
+
16
+ def backtrace
17
+ backtrace_locations.map(&:to_s)
18
+ end
19
+
20
+ def to_s
21
+ "Assertion failed"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module TestBench
2
+ class Assert
3
+ module Proc
4
+ module Assertions
5
+ def raises_error? error_type=nil
6
+ rescue_error_type = error_type || StandardError
7
+
8
+ self.call
9
+
10
+ return false
11
+
12
+ rescue rescue_error_type => error
13
+ if error_type.nil? or error.instance_of? rescue_error_type
14
+ return true
15
+ end
16
+
17
+ raise error
18
+ end
19
+ end
20
+
21
+ ::Proc.send :const_set, :Assertions, Assertions
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ module TestBench
2
+ class Assert
3
+ class Refute < Assert
4
+ def interpret_result result
5
+ if result then false else true end
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'optparse'
2
+
3
+ require 'test_bench'
4
+ require 'test_bench/cli/cli'
@@ -0,0 +1,108 @@
1
+ module TestBench
2
+ class CLI
3
+ attr_reader :argv
4
+ attr_writer :settings
5
+ attr_writer :root_directory
6
+
7
+ def initialize argv
8
+ @argv = argv
9
+ end
10
+
11
+ def self.call argv=nil, exclude_pattern: nil, tests_directory: nil
12
+ argv ||= ARGV
13
+
14
+ settings = Settings.toplevel
15
+
16
+ settings.exclude_pattern = exclude_pattern unless exclude_pattern.nil?
17
+ settings.tests_dir = tests_directory unless tests_directory.nil?
18
+
19
+ instance = new argv
20
+
21
+ instance.settings = settings
22
+ instance.()
23
+ end
24
+
25
+ def call
26
+ option_parser.parse! argv
27
+
28
+ paths = argv
29
+ paths << settings.tests_dir if paths.empty?
30
+
31
+ TestBench::Runner.(paths, root_directory) or exit 1
32
+ end
33
+
34
+ def help
35
+ puts option_parser.help
36
+ puts
37
+ puts <<-TEXT
38
+ If no paths are specified, #{program_name} runs all files in ./tests. The following environment variables can also control execution:
39
+
40
+ TEST_BENCH_ABORT_ON_ERROR Same as -a or --abort-on-error
41
+ TEST_BENCH_COLOR Set color on or off
42
+ TEST_BENCH_EXCLUDE_PATTERN Regular expression that matches paths to be excluded from execution
43
+ TEST_BENCH_RECORD_TELEMETRY Causes Test Bench to preserve telemetry events (needed for testing Test Bench itself)
44
+ TEST_BENCH_REVERSE_BACKTRACES Prints exceptions in reverse order
45
+ TEST_BENCH_QUIET Same as -q or --quiet
46
+ TEST_BENCH_TESTS_DIR Specifies the default directory where Test Bench searches for tests
47
+ TEST_BENCH_VERBOSE Same as -v or --verbose
48
+
49
+ TEXT
50
+ end
51
+
52
+ def option_parser
53
+ @option_parser ||= OptionParser.new do |parser|
54
+ parser.on '-a', '--abort-on-error', "Exit immediately after any test script fails" do
55
+ settings.abort_on_error = true
56
+ end
57
+
58
+ parser.on '-h', '--help', "Print this help message and exit successfully" do
59
+ help
60
+ exit 0
61
+ end
62
+
63
+ parser.on '-q', '--quiet', "Lower verbosity level" do
64
+ settings.lower_verbosity
65
+ end
66
+
67
+ parser.on '-r', '--reverse-backtraces', "Reverse error backtraces" do
68
+ settings.reverse_backtraces = true
69
+ end
70
+
71
+ parser.on '-v', '--verbose', "Raise verbosity level" do
72
+ settings.raise_verbosity
73
+ end
74
+
75
+ parser.on '-V', '--version', "Print version and exit successfully" do
76
+ puts "test-bench (#{parser.program_name}) version #{version}"
77
+ exit 0
78
+ end
79
+
80
+ parser.on '-x', '--exclude PATTERN', %{Filter out files matching PATTERN (Default is "_init$")} do |pattern|
81
+ settings.exclude_pattern = pattern
82
+ end
83
+ end
84
+ end
85
+
86
+ def program_name
87
+ File.basename $PROGRAM_NAME
88
+ end
89
+
90
+ def root_directory
91
+ @root_directory ||= File.expand_path Dir.pwd
92
+ end
93
+
94
+ def settings
95
+ @settings ||= Settings.new
96
+ end
97
+
98
+ def version
99
+ spec = Gem.loaded_specs['test_bench']
100
+
101
+ if spec
102
+ spec.version
103
+ else
104
+ '(local)'.freeze
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,16 @@
1
+ require 'ostruct'
2
+
3
+ require 'test_bench/controls/binding'
4
+ require 'test_bench/controls/clock/elapsed'
5
+ require 'test_bench/controls/clock/reference'
6
+ require 'test_bench/controls/dir_substitute'
7
+ require 'test_bench/controls/executor/substitute'
8
+ require 'test_bench/controls/expand_path'
9
+ require 'test_bench/controls/error'
10
+ require 'test_bench/controls/fixture'
11
+ require 'test_bench/controls/kernel_substitute'
12
+ require 'test_bench/controls/output'
13
+ require 'test_bench/controls/path'
14
+ require 'test_bench/controls/result'
15
+ require 'test_bench/controls/telemetry'
16
+ require 'test_bench/controls/test_script'
@@ -0,0 +1,17 @@
1
+ module TestBench
2
+ module Controls
3
+ module Binding
4
+ def self.example
5
+ mod = Module.new do
6
+ extend TestBench::Structure
7
+
8
+ def self.get_binding
9
+ binding
10
+ end
11
+ end
12
+
13
+ mod.get_binding
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,41 @@
1
+ module TestBench
2
+ module Controls
3
+ module Clock
4
+ class Elapsed
5
+ def self.example
6
+ new t0, t1
7
+ end
8
+
9
+ def self.seconds
10
+ 61.11111
11
+ end
12
+
13
+ def self.t0
14
+ time = Time.new 2000, 1, 1, 1, 1, 1.11111, 0
15
+ time.round 5
16
+ end
17
+
18
+ def self.t1
19
+ time = Time.new 2000, 1, 1, 1, 2, 2.22222, 0
20
+ time.round 5
21
+ end
22
+
23
+ attr_reader :t0
24
+ attr_reader :t1
25
+
26
+ def initialize t0, t1
27
+ @t0 = t0
28
+ @t1 = t1
29
+ end
30
+
31
+ def now
32
+ enumerator.next
33
+ end
34
+
35
+ def enumerator
36
+ @enumerator ||= [t0, t1].lazy
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,15 @@
1
+ module TestBench
2
+ module Controls
3
+ module Clock
4
+ module Reference
5
+ def self.now
6
+ value
7
+ end
8
+
9
+ def self.value
10
+ Time.new 2000, 1, 1, 1, 1, 1, 0
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,58 @@
1
+ module TestBench
2
+ module Controls
3
+ class DirSubstitute
4
+ def self.example
5
+ files = %w(
6
+ /root/some/path/1.rb
7
+ /root/some/path/2.rb
8
+ /root/other/path.rb
9
+ )
10
+
11
+ new files
12
+ end
13
+
14
+ attr_reader :files
15
+
16
+ def initialize files
17
+ @files = files
18
+ end
19
+
20
+ def [] pattern
21
+ if match_data = %r{\A(?<base>.*)/\*\*/\*\.rb\z}.match(pattern)
22
+ # some/path/**/*.rb
23
+ files.select do |file|
24
+ file.start_with? match_data['base']
25
+ end
26
+ elsif match_data = %r{\A(?<base>.*)/\*\.rb\z}.match(pattern)
27
+ # some/path/*.rb
28
+ files.select do |file|
29
+ dirname = File.dirname file
30
+ dirname == match_data['base']
31
+ end
32
+ else
33
+ # some/path.rb
34
+ files.select do |file|
35
+ file == pattern
36
+ end
37
+ end
38
+ end
39
+
40
+ def directories
41
+ files.flat_map do |file|
42
+ dirs = []
43
+
44
+ until file == '/'
45
+ file = File.dirname file
46
+ dirs << file
47
+ end
48
+
49
+ dirs
50
+ end
51
+ end
52
+
53
+ def exist? directory
54
+ directories.include? directory.to_s
55
+ end
56
+ end
57
+ end
58
+ end