test_bench-isolated 0 → 2.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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench_isolated/test_bench/cli.rb +298 -0
  3. data/lib/test_bench_isolated/test_bench/controls/file.rb +7 -0
  4. data/lib/test_bench_isolated/test_bench/controls/path.rb +7 -0
  5. data/lib/test_bench_isolated/test_bench/controls/random.rb +9 -0
  6. data/lib/test_bench_isolated/test_bench/controls/result.rb +7 -0
  7. data/lib/test_bench_isolated/test_bench/controls/stdin.rb +29 -0
  8. data/lib/test_bench_isolated/test_bench/controls.rb +11 -0
  9. data/lib/test_bench_isolated/test_bench/fixture/actuate/class.rb +97 -0
  10. data/lib/test_bench_isolated/test_bench/fixture/actuate/object.rb +93 -0
  11. data/lib/test_bench_isolated/test_bench/fixture/controls/exception.rb +9 -0
  12. data/lib/test_bench_isolated/test_bench/fixture/controls/fixture/class.rb +88 -0
  13. data/lib/test_bench_isolated/test_bench/fixture/controls/fixture/object/modules.rb +41 -0
  14. data/lib/test_bench_isolated/test_bench/fixture/controls/fixture/object.rb +33 -0
  15. data/lib/test_bench_isolated/test_bench/fixture/controls/fixture.rb +29 -0
  16. data/lib/test_bench_isolated/test_bench/fixture/controls/output.rb +9 -0
  17. data/lib/test_bench_isolated/test_bench/fixture/controls/random.rb +9 -0
  18. data/lib/test_bench_isolated/test_bench/fixture/controls/result.rb +9 -0
  19. data/lib/test_bench_isolated/test_bench/fixture/controls/title.rb +9 -0
  20. data/lib/test_bench_isolated/test_bench/fixture/controls.rb +13 -0
  21. data/lib/test_bench_isolated/test_bench/fixture/evaluate.rb +31 -0
  22. data/lib/test_bench_isolated/test_bench/fixture/fixture.rb +201 -0
  23. data/lib/test_bench_isolated/test_bench/fixture.rb +8 -0
  24. data/lib/test_bench_isolated/test_bench/output/controls/data.rb +51 -0
  25. data/lib/test_bench_isolated/test_bench/output/controls/device.rb +29 -0
  26. data/lib/test_bench_isolated/test_bench/output/controls/event.rb +9 -0
  27. data/lib/test_bench_isolated/test_bench/output/controls/output.rb +36 -0
  28. data/lib/test_bench_isolated/test_bench/output/controls/random.rb +9 -0
  29. data/lib/test_bench_isolated/test_bench/output/controls/style.rb +33 -0
  30. data/lib/test_bench_isolated/test_bench/output/controls/styling.rb +29 -0
  31. data/lib/test_bench_isolated/test_bench/output/controls/text.rb +19 -0
  32. data/lib/test_bench_isolated/test_bench/output/controls.rb +10 -0
  33. data/lib/test_bench_isolated/test_bench/output/device/null.rb +21 -0
  34. data/lib/test_bench_isolated/test_bench/output/device/substitute.rb +60 -0
  35. data/lib/test_bench_isolated/test_bench/output/digest.rb +115 -0
  36. data/lib/test_bench_isolated/test_bench/output/output.rb +68 -0
  37. data/lib/test_bench_isolated/test_bench/output/writer/buffer.rb +59 -0
  38. data/lib/test_bench_isolated/test_bench/output/writer/defaults.rb +13 -0
  39. data/lib/test_bench_isolated/test_bench/output/writer/style.rb +52 -0
  40. data/lib/test_bench_isolated/test_bench/output/writer/substitute.rb +40 -0
  41. data/lib/test_bench_isolated/test_bench/output/writer.rb +212 -0
  42. data/lib/test_bench_isolated/test_bench/output.rb +14 -0
  43. data/lib/test_bench_isolated/test_bench/random/controls/seed.rb +27 -0
  44. data/lib/test_bench_isolated/test_bench/random/controls.rb +1 -0
  45. data/lib/test_bench_isolated/test_bench/random/random.rb +170 -0
  46. data/lib/test_bench_isolated/test_bench/random.rb +1 -0
  47. data/lib/test_bench_isolated/test_bench/run/controls/directory.rb +72 -0
  48. data/lib/test_bench_isolated/test_bench/run/controls/event_data.rb +9 -0
  49. data/lib/test_bench_isolated/test_bench/run/controls/events/event_data.rb +11 -0
  50. data/lib/test_bench_isolated/test_bench/run/controls/events/file_crashed.rb +111 -0
  51. data/lib/test_bench_isolated/test_bench/run/controls/events/file_finished.rb +58 -0
  52. data/lib/test_bench_isolated/test_bench/run/controls/events/file_started.rb +49 -0
  53. data/lib/test_bench_isolated/test_bench/run/controls/events/finished.rb +58 -0
  54. data/lib/test_bench_isolated/test_bench/run/controls/events/session.rb +11 -0
  55. data/lib/test_bench_isolated/test_bench/run/controls/events/started.rb +49 -0
  56. data/lib/test_bench_isolated/test_bench/run/controls/exception.rb +103 -0
  57. data/lib/test_bench_isolated/test_bench/run/controls/executor.rb +58 -0
  58. data/lib/test_bench_isolated/test_bench/run/controls/file/create.rb +71 -0
  59. data/lib/test_bench_isolated/test_bench/run/controls/file/pattern.rb +35 -0
  60. data/lib/test_bench_isolated/test_bench/run/controls/file.rb +182 -0
  61. data/lib/test_bench_isolated/test_bench/run/controls/path.rb +17 -0
  62. data/lib/test_bench_isolated/test_bench/run/controls/process_id.rb +9 -0
  63. data/lib/test_bench_isolated/test_bench/run/controls/random.rb +9 -0
  64. data/lib/test_bench_isolated/test_bench/run/controls/result.rb +9 -0
  65. data/lib/test_bench_isolated/test_bench/run/controls/time.rb +9 -0
  66. data/lib/test_bench_isolated/test_bench/run/controls.rb +26 -0
  67. data/lib/test_bench_isolated/test_bench/run/events.rb +14 -0
  68. data/lib/test_bench_isolated/test_bench/run/executor/serial.rb +36 -0
  69. data/lib/test_bench_isolated/test_bench/run/executor/substitute.rb +47 -0
  70. data/lib/test_bench_isolated/test_bench/run/executor.rb +46 -0
  71. data/lib/test_bench_isolated/test_bench/run/file.rb +83 -0
  72. data/lib/test_bench_isolated/test_bench/run/get_files/substitute.rb +48 -0
  73. data/lib/test_bench_isolated/test_bench/run/get_files.rb +78 -0
  74. data/lib/test_bench_isolated/test_bench/run/output/file.rb +137 -0
  75. data/lib/test_bench_isolated/test_bench/run/output/summary/error.rb +141 -0
  76. data/lib/test_bench_isolated/test_bench/run/output/summary.rb +184 -0
  77. data/lib/test_bench_isolated/test_bench/run/run.rb +156 -0
  78. data/lib/test_bench_isolated/test_bench/run.rb +18 -0
  79. data/lib/test_bench_isolated/test_bench/session/controls/comment.rb +107 -0
  80. data/lib/test_bench_isolated/test_bench/session/controls/detail.rb +93 -0
  81. data/lib/test_bench_isolated/test_bench/session/controls/event.rb +9 -0
  82. data/lib/test_bench_isolated/test_bench/session/controls/events/commented.rb +112 -0
  83. data/lib/test_bench_isolated/test_bench/session/controls/events/context_finished.rb +72 -0
  84. data/lib/test_bench_isolated/test_bench/session/controls/events/context_skipped.rb +49 -0
  85. data/lib/test_bench_isolated/test_bench/session/controls/events/context_started.rb +66 -0
  86. data/lib/test_bench_isolated/test_bench/session/controls/events/detailed.rb +112 -0
  87. data/lib/test_bench_isolated/test_bench/session/controls/events/event_data.rb +11 -0
  88. data/lib/test_bench_isolated/test_bench/session/controls/events/failed.rb +49 -0
  89. data/lib/test_bench_isolated/test_bench/session/controls/events/fixture_finished.rb +55 -0
  90. data/lib/test_bench_isolated/test_bench/session/controls/events/fixture_started.rb +49 -0
  91. data/lib/test_bench_isolated/test_bench/session/controls/events/test_finished.rb +72 -0
  92. data/lib/test_bench_isolated/test_bench/session/controls/events/test_skipped.rb +49 -0
  93. data/lib/test_bench_isolated/test_bench/session/controls/events/test_started.rb +66 -0
  94. data/lib/test_bench_isolated/test_bench/session/controls/events.rb +35 -0
  95. data/lib/test_bench_isolated/test_bench/session/controls/exception.rb +47 -0
  96. data/lib/test_bench_isolated/test_bench/session/controls/failure.rb +21 -0
  97. data/lib/test_bench_isolated/test_bench/session/controls/fixture.rb +21 -0
  98. data/lib/test_bench_isolated/test_bench/session/controls/output/detail.rb +31 -0
  99. data/lib/test_bench_isolated/test_bench/session/controls/output.rb +57 -0
  100. data/lib/test_bench_isolated/test_bench/session/controls/process_id.rb +9 -0
  101. data/lib/test_bench_isolated/test_bench/session/controls/random.rb +9 -0
  102. data/lib/test_bench_isolated/test_bench/session/controls/result.rb +25 -0
  103. data/lib/test_bench_isolated/test_bench/session/controls/substitute/path.rb +35 -0
  104. data/lib/test_bench_isolated/test_bench/session/controls/time.rb +9 -0
  105. data/lib/test_bench_isolated/test_bench/session/controls/title.rb +41 -0
  106. data/lib/test_bench_isolated/test_bench/session/controls.rb +36 -0
  107. data/lib/test_bench_isolated/test_bench/session/events.rb +27 -0
  108. data/lib/test_bench_isolated/test_bench/session/output/get.rb +29 -0
  109. data/lib/test_bench_isolated/test_bench/session/output/writer/buffer/interactive/viewport.rb +167 -0
  110. data/lib/test_bench_isolated/test_bench/session/output/writer/buffer/interactive.rb +141 -0
  111. data/lib/test_bench_isolated/test_bench/session/output/writer/buffer.rb +29 -0
  112. data/lib/test_bench_isolated/test_bench/session/output/writer/defaults.rb +19 -0
  113. data/lib/test_bench_isolated/test_bench/session/output/writer/substitute.rb +19 -0
  114. data/lib/test_bench_isolated/test_bench/session/output/writer.rb +97 -0
  115. data/lib/test_bench_isolated/test_bench/session/output.rb +377 -0
  116. data/lib/test_bench_isolated/test_bench/session/projection.rb +30 -0
  117. data/lib/test_bench_isolated/test_bench/session/session.rb +220 -0
  118. data/lib/test_bench_isolated/test_bench/session/store.rb +61 -0
  119. data/lib/test_bench_isolated/test_bench/session/substitute/path.rb +65 -0
  120. data/lib/test_bench_isolated/test_bench/session/substitute/sink.rb +114 -0
  121. data/lib/test_bench_isolated/test_bench/session/substitute.rb +120 -0
  122. data/lib/test_bench_isolated/test_bench/session.rb +22 -0
  123. data/lib/test_bench_isolated/test_bench/telemetry/controls/event/event_data.rb +17 -0
  124. data/lib/test_bench_isolated/test_bench/telemetry/controls/event/metadata.rb +72 -0
  125. data/lib/test_bench_isolated/test_bench/telemetry/controls/event.rb +140 -0
  126. data/lib/test_bench_isolated/test_bench/telemetry/controls/event_data.rb +131 -0
  127. data/lib/test_bench_isolated/test_bench/telemetry/controls/file.rb +86 -0
  128. data/lib/test_bench_isolated/test_bench/telemetry/controls/handler.rb +83 -0
  129. data/lib/test_bench_isolated/test_bench/telemetry/controls/process_id.rb +21 -0
  130. data/lib/test_bench_isolated/test_bench/telemetry/controls/projection/receiver.rb +33 -0
  131. data/lib/test_bench_isolated/test_bench/telemetry/controls/projection.rb +86 -0
  132. data/lib/test_bench_isolated/test_bench/telemetry/controls/random.rb +9 -0
  133. data/lib/test_bench_isolated/test_bench/telemetry/controls/sink.rb +35 -0
  134. data/lib/test_bench_isolated/test_bench/telemetry/controls/time.rb +125 -0
  135. data/lib/test_bench_isolated/test_bench/telemetry/controls.rb +17 -0
  136. data/lib/test_bench_isolated/test_bench/telemetry/event.rb +108 -0
  137. data/lib/test_bench_isolated/test_bench/telemetry/event_data/serialization.rb +172 -0
  138. data/lib/test_bench_isolated/test_bench/telemetry/event_data.rb +15 -0
  139. data/lib/test_bench_isolated/test_bench/telemetry/sink/file.rb +33 -0
  140. data/lib/test_bench_isolated/test_bench/telemetry/sink/handler/event_registry.rb +44 -0
  141. data/lib/test_bench_isolated/test_bench/telemetry/sink/handler.rb +128 -0
  142. data/lib/test_bench_isolated/test_bench/telemetry/sink/projection.rb +134 -0
  143. data/lib/test_bench_isolated/test_bench/telemetry/sink.rb +13 -0
  144. data/lib/test_bench_isolated/test_bench/telemetry/substitute/sink.rb +85 -0
  145. data/lib/test_bench_isolated/test_bench/telemetry/substitute.rb +34 -0
  146. data/lib/test_bench_isolated/test_bench/telemetry/telemetry.rb +111 -0
  147. data/lib/test_bench_isolated/test_bench/telemetry.rb +17 -0
  148. data/lib/test_bench_isolated/test_bench/test_bench.rb +56 -0
  149. data/lib/test_bench_isolated/test_bench.rb +5 -0
  150. data/script/bench +5 -0
  151. metadata +156 -7
  152. data/lib/test_bench/bootstrap.rb +0 -328
@@ -0,0 +1,58 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ module Executor
6
+ def self.example
7
+ Example.new
8
+ end
9
+
10
+ class Example
11
+ include TestBench::Run::Executor
12
+
13
+ attr_accessor :executed_file
14
+
15
+ attr_accessor :started
16
+ def started? = !!started
17
+
18
+ attr_accessor :finished
19
+ def finished? = !!finished
20
+
21
+ attr_accessor :configured
22
+ def configured? = !!configured
23
+
24
+ def configure
25
+ self.configured = true
26
+ end
27
+
28
+ def start
29
+ self.started = true
30
+ end
31
+
32
+ def execute(file)
33
+ self.executed_file = file
34
+ end
35
+
36
+ def executed?(file)
37
+ executed_file == file
38
+ end
39
+
40
+ def finish
41
+ self.finished = true
42
+ end
43
+ end
44
+
45
+ module NotImplemented
46
+ def self.example
47
+ Example.new
48
+ end
49
+
50
+ class Example
51
+ include TestBench::Run::Executor
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,71 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ module File
6
+ module Create
7
+ def self.call(contents: nil, directory: nil)
8
+ contents ||= self.contents
9
+ directory ||= self.directory
10
+
11
+ filename = File::Name::Random.example
12
+
13
+ file = ::File.join(directory, filename)
14
+
15
+ ::File.write(file, contents)
16
+
17
+ file
18
+ end
19
+
20
+ def self.contents
21
+ '# Some file'
22
+ end
23
+
24
+ def self.directory
25
+ 'tmp'
26
+ end
27
+
28
+ module Pass
29
+ def self.call(directory: nil)
30
+ Create.(contents:, directory:)
31
+ end
32
+
33
+ def self.contents
34
+ Create.contents
35
+ end
36
+ end
37
+
38
+ module Failure
39
+ def self.call(session: nil, directory: nil)
40
+ contents = contents(session:)
41
+
42
+ Create.(contents:, directory:)
43
+ end
44
+
45
+ def self.contents(session: nil)
46
+ session ||= Session.new
47
+
48
+ <<~RUBY
49
+ session = ObjectSpace._id2ref(#{session.object_id})
50
+ session.test do
51
+ session.assert(false)
52
+ end
53
+ RUBY
54
+ end
55
+ end
56
+
57
+ module Crash
58
+ def self.call(directory: nil)
59
+ Create.(contents:, directory:)
60
+ end
61
+
62
+ def self.contents
63
+ "raise #{Exception}.example"
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,35 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ module File
6
+ module Pattern
7
+ def self.example
8
+ File.example
9
+ end
10
+
11
+ def self.other_example
12
+ '*.rb'
13
+ end
14
+
15
+ module File
16
+ def self.example
17
+ 'some_file*.rb'
18
+ end
19
+ end
20
+
21
+ module None
22
+ def self.example
23
+ random
24
+ end
25
+
26
+ def self.random
27
+ Controls::Random.string
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,182 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ module File
6
+ def self.example(filename: nil, directory: nil, root_directory: nil)
7
+ filename ||= self.filename
8
+ directory ||= self.directory
9
+
10
+ if root_directory == :none
11
+ root_directory = nil
12
+ else
13
+ root_directory ||= self.root_directory
14
+ end
15
+
16
+ paths = []
17
+
18
+ if root_directory
19
+ paths << root_directory
20
+ end
21
+
22
+ paths << directory
23
+ paths << filename
24
+
25
+ ::File.join(*paths)
26
+ end
27
+
28
+ def self.random
29
+ Test.random
30
+ end
31
+
32
+ def self.filename
33
+ Name.example
34
+ end
35
+
36
+ def self.directory
37
+ Test.directory
38
+ end
39
+
40
+ def self.root_directory
41
+ '/some-root-dir'
42
+ end
43
+
44
+ module Random
45
+ def self.example(basename: nil, directory: nil, root_directory: nil)
46
+ basename ||= Test::Random.basename
47
+ directory ||= Test::Random.directory
48
+
49
+ filename = Name::Random.example(basename:)
50
+
51
+ File.example(filename:, directory:, root_directory:)
52
+ end
53
+ end
54
+
55
+ module Local
56
+ def self.example
57
+ File.example(root_directory: :none)
58
+ end
59
+
60
+ def self.random
61
+ File::Random.example(root_directory: :none)
62
+ end
63
+ end
64
+
65
+ module Test
66
+ extend self
67
+
68
+ def self.example(root_directory: nil)
69
+ filename = Name.example(basename:)
70
+
71
+ File.example(filename:, directory:, root_directory:)
72
+ end
73
+
74
+ def self.random
75
+ Random.example
76
+ end
77
+
78
+ def basename
79
+ 'some_test_file'
80
+ end
81
+
82
+ def directory
83
+ 'test/automated'
84
+ end
85
+
86
+ module Random
87
+ extend Test
88
+
89
+ def self.example(root_directory: nil)
90
+ filename = Name::Random.example(basename:)
91
+
92
+ File.example(filename:, directory:, root_directory:)
93
+ end
94
+ end
95
+
96
+ module Local
97
+ def self.example
98
+ Test.example(root_directory: :none)
99
+ end
100
+
101
+ def self.random
102
+ Test::Random.example(root_directory: :none)
103
+ end
104
+ end
105
+ end
106
+
107
+ module Implementation
108
+ extend self
109
+
110
+ def self.example(root_directory: nil)
111
+ filename = Name.example(basename:)
112
+
113
+ File.example(filename:, directory:, root_directory:)
114
+ end
115
+
116
+ def self.random
117
+ Random.example
118
+ end
119
+
120
+ def basename
121
+ 'some_file'
122
+ end
123
+
124
+ def directory
125
+ 'lib/some_directory'
126
+ end
127
+
128
+ module Random
129
+ extend Implementation
130
+
131
+ def self.example(root_directory: nil)
132
+ filename = Name::Random.example(basename:)
133
+
134
+ File.example(filename:, directory:, root_directory:)
135
+ end
136
+ end
137
+
138
+ module Local
139
+ def self.example
140
+ Implementation.example(root_directory: :none)
141
+ end
142
+
143
+ def self.random
144
+ Implementation::Random.example(root_directory: :none)
145
+ end
146
+ end
147
+ end
148
+
149
+ module Name
150
+ def self.example(basename: nil)
151
+ basename ||= self.basename
152
+
153
+ Telemetry::Controls::File::Name.example(basename:, extension:)
154
+ end
155
+
156
+ def self.random
157
+ Random.example
158
+ end
159
+
160
+ def self.basename
161
+ 'some_file'
162
+ end
163
+
164
+ def self.extension
165
+ '.rb'
166
+ end
167
+
168
+ module Random
169
+ def self.example(basename: nil)
170
+ basename ||= Name.basename
171
+
172
+ extension = Name.extension
173
+
174
+ Telemetry::Controls::File::Name::Random.example(basename:, extension:)
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,17 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ module Path
6
+ def self.example
7
+ File.example
8
+ end
9
+
10
+ def self.random
11
+ File.random
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ ProcessID = Session::Controls::ProcessID
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ Random = Fixture::Controls::Random
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ Result = Fixture::Controls::Result
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Controls
5
+ Time = Session::Controls::Time
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_bench_isolated/test_bench/fixture/controls'
2
+
3
+ require 'test_bench_isolated/test_bench/run/controls/file'
4
+ require 'test_bench_isolated/test_bench/run/controls/file/create'
5
+ require 'test_bench_isolated/test_bench/run/controls/file/pattern'
6
+ require 'test_bench_isolated/test_bench/run/controls/exception'
7
+ require 'test_bench_isolated/test_bench/run/controls/process_id'
8
+ require 'test_bench_isolated/test_bench/run/controls/random'
9
+ require 'test_bench_isolated/test_bench/run/controls/result'
10
+ require 'test_bench_isolated/test_bench/run/controls/time'
11
+
12
+ require 'test_bench_isolated/test_bench/run/controls/events/event_data'
13
+ require 'test_bench_isolated/test_bench/run/controls/events/file_started'
14
+ require 'test_bench_isolated/test_bench/run/controls/events/file_finished'
15
+ require 'test_bench_isolated/test_bench/run/controls/events/file_crashed'
16
+ require 'test_bench_isolated/test_bench/run/controls/events/started'
17
+ require 'test_bench_isolated/test_bench/run/controls/events/finished'
18
+
19
+ require 'test_bench_isolated/test_bench/run/controls/directory'
20
+
21
+ require 'test_bench_isolated/test_bench/run/controls/path'
22
+
23
+ require 'test_bench_isolated/test_bench/run/controls/event_data'
24
+ require 'test_bench_isolated/test_bench/run/controls/events/session'
25
+
26
+ require 'test_bench_isolated/test_bench/run/controls/executor'
@@ -0,0 +1,14 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Events
5
+ FileStarted = Telemetry::Event.define(:file)
6
+ FileFinished = Telemetry::Event.define(:file, :result)
7
+ FileCrashed = Telemetry::Event.define(:file, :error_message, :error_text)
8
+
9
+ Started = Telemetry::Event.define(:random_seed)
10
+ Finished = Telemetry::Event.define(:random_seed, :result)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Executor
5
+ class Serial
6
+ include Executor
7
+
8
+ def run_file
9
+ @run_file ||= Run::File.build
10
+ end
11
+ attr_writer :run_file
12
+
13
+ def session_store
14
+ @session_store ||= Session::Store.new
15
+ end
16
+ attr_writer :session_store
17
+
18
+ def configure
19
+ Session::Store.configure(self)
20
+ end
21
+
22
+ def execute(file)
23
+ run_file.(file)
24
+
25
+ rescue => exception
26
+ session = session_store.fetch
27
+
28
+ session.record_failure
29
+
30
+ STDERR.write("#{exception.full_message}\n")
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,47 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Executor
5
+ module Substitute
6
+ def self.build
7
+ Executor.new
8
+ end
9
+
10
+ class Executor
11
+ include Run::Executor
12
+
13
+ def files
14
+ @files ||= []
15
+ end
16
+
17
+ attr_accessor :started
18
+ def started? = !!started
19
+
20
+ attr_accessor :finished
21
+ def finished? = !!finished
22
+
23
+ def start
24
+ self.started = true
25
+ end
26
+
27
+ def execute(file)
28
+ files << file
29
+ end
30
+
31
+ def executed?(file=nil)
32
+ if not file.nil?
33
+ files.include?(file)
34
+ else
35
+ !files.empty?
36
+ end
37
+ end
38
+
39
+ def finish
40
+ self.finished = true
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,46 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ module Executor
5
+ AbstractMethodError = Class.new(RuntimeError)
6
+
7
+ def self.included(cls)
8
+ cls.class_exec do
9
+ extend Build
10
+ extend Configure
11
+ end
12
+ end
13
+
14
+ def configure
15
+ end
16
+
17
+ def start
18
+ end
19
+
20
+ def execute(file)
21
+ raise AbstractMethodError, "Subclass didn't implement execute (File: #{file.inspect})"
22
+ end
23
+
24
+ def finish
25
+ end
26
+
27
+ module Build
28
+ def build
29
+ instance = new
30
+ instance.configure
31
+ instance
32
+ end
33
+ end
34
+
35
+ module Configure
36
+ def configure(receiver, attr_name: nil)
37
+ attr_name ||= :executor
38
+
39
+ instance = build
40
+ receiver.public_send(:"#{attr_name}=", instance)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,83 @@
1
+ module TestBenchIsolated
2
+ module TestBench
3
+ class Run
4
+ class File
5
+ ReadFileError = Class.new(RuntimeError)
6
+
7
+ def root_directory
8
+ @root_directory ||= ::Dir.pwd
9
+ end
10
+ attr_writer :root_directory
11
+
12
+ def session
13
+ @session ||= Session::Substitute.build
14
+ end
15
+ attr_writer :session
16
+
17
+ def random
18
+ @random ||= Random::Substitute.build
19
+ end
20
+ attr_writer :random
21
+
22
+ def self.build(session: nil)
23
+ instance = new
24
+ Session.configure(instance, session:)
25
+ Random.configure(instance)
26
+ instance
27
+ end
28
+
29
+ def call(file)
30
+ random.reset(file)
31
+
32
+ begin
33
+ source = ::File.read(file)
34
+ rescue SystemCallError => error
35
+ raise ReadFileError, "Couldn't run #{file}: #{error.message.partition(' @ ').first}"
36
+ end
37
+
38
+ failure_sequence = session.failure_sequence
39
+
40
+ session.record_event(Events::FileStarted.new(file))
41
+
42
+ begin
43
+ TOPLEVEL_BINDING.eval(source, file)
44
+
45
+ rescue => exception
46
+ raise exception
47
+
48
+ ensure
49
+ if not exception.nil?
50
+ error_message = error_message(exception)
51
+ error_text = error_text(exception)
52
+
53
+ session.record_event(Events::FileCrashed.new(file, error_message, error_text))
54
+
55
+ raise exception
56
+ end
57
+ end
58
+
59
+ failed = session.failed?(failure_sequence)
60
+ result = !failed
61
+
62
+ session.record_event(Events::FileFinished.new(file, result))
63
+
64
+ result
65
+ end
66
+
67
+ def error_message(exception)
68
+ error_message = exception.full_message(order: :top, highlight: false).each_line(chomp: true).first
69
+
70
+ if error_message.delete_prefix!(root_directory)
71
+ error_message.delete_prefix!('/')
72
+ end
73
+
74
+ error_message
75
+ end
76
+
77
+ def error_text(exception)
78
+ exception.full_message
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end