test_bench-bootstrap 6.1.1 → 7.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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/executables/bench-bootstrap +7 -0
  3. data/lib/test_bench_bootstrap/controls.rb +1 -0
  4. data/lib/test_bench_bootstrap/test_bench_bootstrap.rb +7 -0
  5. data/lib/test_bench_bootstrap.rb +4 -0
  6. data/upstream-lib/test_bench_bootstrap/import_constants/controls/namespace.rb +84 -0
  7. data/upstream-lib/test_bench_bootstrap/import_constants/controls.rb +1 -0
  8. data/upstream-lib/test_bench_bootstrap/import_constants/import_constants.rb +46 -0
  9. data/upstream-lib/test_bench_bootstrap/import_constants/macro.rb +10 -0
  10. data/upstream-lib/test_bench_bootstrap/import_constants.rb +2 -0
  11. data/upstream-lib/test_bench_bootstrap/test_bench/controls/telemetry_sink.rb +7 -0
  12. data/upstream-lib/test_bench_bootstrap/test_bench/controls.rb +3 -0
  13. data/upstream-lib/test_bench_bootstrap/test_bench/executable/controls/path.rb +9 -0
  14. data/upstream-lib/test_bench_bootstrap/test_bench/executable/controls/random.rb +9 -0
  15. data/upstream-lib/test_bench_bootstrap/test_bench/executable/controls/run.rb +12 -0
  16. data/upstream-lib/test_bench_bootstrap/test_bench/executable/controls/standard_input.rb +31 -0
  17. data/upstream-lib/test_bench_bootstrap/test_bench/executable/controls.rb +8 -0
  18. data/upstream-lib/test_bench_bootstrap/test_bench/executable/defaults.rb +15 -0
  19. data/upstream-lib/test_bench_bootstrap/test_bench/executable/executable.rb +61 -0
  20. data/upstream-lib/test_bench_bootstrap/test_bench/executable/parse_arguments.rb +271 -0
  21. data/upstream-lib/test_bench_bootstrap/test_bench/executable.rb +7 -0
  22. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/build.rb +41 -0
  23. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/comment_style.rb +9 -0
  24. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/exception.rb +9 -0
  25. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/fixture.rb +69 -0
  26. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/message.rb +9 -0
  27. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/output.rb +11 -0
  28. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/path.rb +9 -0
  29. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/session.rb +21 -0
  30. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/status.rb +9 -0
  31. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/text.rb +9 -0
  32. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls/title.rb +9 -0
  33. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/controls.rb +14 -0
  34. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/evaluate.rb +37 -0
  35. data/upstream-lib/test_bench_bootstrap/test_bench/fixture/fixture.rb +213 -0
  36. data/upstream-lib/test_bench_bootstrap/test_bench/fixture.rb +7 -0
  37. data/upstream-lib/test_bench_bootstrap/test_bench/output/comment_style.rb +63 -0
  38. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/comment_style.rb +23 -0
  39. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/event.rb +9 -0
  40. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/aborted.rb +11 -0
  41. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/commented.rb +23 -0
  42. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/context_finished.rb +11 -0
  43. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/context_started.rb +11 -0
  44. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/detailed.rb +23 -0
  45. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/failed.rb +11 -0
  46. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/file_executed.rb +11 -0
  47. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/file_not_found.rb +11 -0
  48. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/file_queued.rb +11 -0
  49. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/skipped.rb +11 -0
  50. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/test_finished.rb +11 -0
  51. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/events/test_started.rb +11 -0
  52. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/random.rb +9 -0
  53. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/session.rb +19 -0
  54. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/status.rb +9 -0
  55. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/style.rb +41 -0
  56. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls/text.rb +31 -0
  57. data/upstream-lib/test_bench_bootstrap/test_bench/output/controls.rb +26 -0
  58. data/upstream-lib/test_bench_bootstrap/test_bench/output/detail_policy.rb +46 -0
  59. data/upstream-lib/test_bench_bootstrap/test_bench/output/device/null.rb +21 -0
  60. data/upstream-lib/test_bench_bootstrap/test_bench/output/device/substitute.rb +46 -0
  61. data/upstream-lib/test_bench_bootstrap/test_bench/output/device.rb +75 -0
  62. data/upstream-lib/test_bench_bootstrap/test_bench/output/get.rb +32 -0
  63. data/upstream-lib/test_bench_bootstrap/test_bench/output/level.rb +53 -0
  64. data/upstream-lib/test_bench_bootstrap/test_bench/output/output.rb +572 -0
  65. data/upstream-lib/test_bench_bootstrap/test_bench/output/writer/style.rb +54 -0
  66. data/upstream-lib/test_bench_bootstrap/test_bench/output/writer/substitute.rb +27 -0
  67. data/upstream-lib/test_bench_bootstrap/test_bench/output/writer.rb +119 -0
  68. data/upstream-lib/test_bench_bootstrap/test_bench/output.rb +20 -0
  69. data/upstream-lib/test_bench_bootstrap/test_bench/random/controls/seed.rb +25 -0
  70. data/upstream-lib/test_bench_bootstrap/test_bench/random/controls/sequence.rb +70 -0
  71. data/upstream-lib/test_bench_bootstrap/test_bench/random/controls.rb +2 -0
  72. data/upstream-lib/test_bench_bootstrap/test_bench/random/defaults.rb +13 -0
  73. data/upstream-lib/test_bench_bootstrap/test_bench/random/generator/substitute.rb +23 -0
  74. data/upstream-lib/test_bench_bootstrap/test_bench/random/generator.rb +64 -0
  75. data/upstream-lib/test_bench_bootstrap/test_bench/random/iterator.rb +54 -0
  76. data/upstream-lib/test_bench_bootstrap/test_bench/random/random.rb +27 -0
  77. data/upstream-lib/test_bench_bootstrap/test_bench/random.rb +8 -0
  78. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/events.rb +9 -0
  79. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/message.rb +9 -0
  80. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/path.rb +9 -0
  81. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/random.rb +9 -0
  82. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/session.rb +16 -0
  83. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/status.rb +44 -0
  84. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/summary/file/info.rb +108 -0
  85. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/summary/file/totals.rb +38 -0
  86. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/summary/file.rb +44 -0
  87. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/summary/run.rb +53 -0
  88. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/summary.rb +45 -0
  89. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/telemetry.rb +11 -0
  90. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls/time.rb +9 -0
  91. data/upstream-lib/test_bench_bootstrap/test_bench/run/controls.rb +20 -0
  92. data/upstream-lib/test_bench_bootstrap/test_bench/run/run.rb +146 -0
  93. data/upstream-lib/test_bench_bootstrap/test_bench/run/select_files/substitute.rb +45 -0
  94. data/upstream-lib/test_bench_bootstrap/test_bench/run/select_files.rb +70 -0
  95. data/upstream-lib/test_bench_bootstrap/test_bench/run/substitute.rb +42 -0
  96. data/upstream-lib/test_bench_bootstrap/test_bench/run/summary/substitute.rb +19 -0
  97. data/upstream-lib/test_bench_bootstrap/test_bench/run/summary.rb +477 -0
  98. data/upstream-lib/test_bench_bootstrap/test_bench/run.rb +10 -0
  99. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/backtrace/location.rb +48 -0
  100. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/backtrace.rb +83 -0
  101. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/comment_disposition.rb +17 -0
  102. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/event.rb +35 -0
  103. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/aborted.rb +51 -0
  104. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/commented.rb +62 -0
  105. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/context_finished.rb +112 -0
  106. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/context_started.rb +51 -0
  107. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/detailed.rb +62 -0
  108. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/failed.rb +41 -0
  109. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/file_executed.rb +101 -0
  110. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/file_not_found.rb +41 -0
  111. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/file_queued.rb +41 -0
  112. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/skipped.rb +51 -0
  113. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/test_finished.rb +92 -0
  114. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events/test_started.rb +51 -0
  115. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/events.rb +35 -0
  116. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/exception/message.rb +23 -0
  117. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/exception/raise.rb +52 -0
  118. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/exception.rb +81 -0
  119. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/message.rb +43 -0
  120. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/metadata.rb +9 -0
  121. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/path/apex_directory.rb +76 -0
  122. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/path/file/create.rb +113 -0
  123. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/path/file.rb +42 -0
  124. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/path.rb +87 -0
  125. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/random.rb +9 -0
  126. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/result.rb +17 -0
  127. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/sequence.rb +13 -0
  128. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/status.rb +92 -0
  129. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/telemetry.rb +15 -0
  130. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/telemetry_sink.rb +37 -0
  131. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/text.rb +33 -0
  132. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls/title.rb +41 -0
  133. data/upstream-lib/test_bench_bootstrap/test_bench/session/controls.rb +43 -0
  134. data/upstream-lib/test_bench_bootstrap/test_bench/session/defaults.rb +17 -0
  135. data/upstream-lib/test_bench_bootstrap/test_bench/session/events.rb +24 -0
  136. data/upstream-lib/test_bench_bootstrap/test_bench/session/exception/format_backtrace/substitute.rb +34 -0
  137. data/upstream-lib/test_bench_bootstrap/test_bench/session/exception/format_backtrace.rb +114 -0
  138. data/upstream-lib/test_bench_bootstrap/test_bench/session/isolate/substitute.rb +45 -0
  139. data/upstream-lib/test_bench_bootstrap/test_bench/session/isolate.rb +159 -0
  140. data/upstream-lib/test_bench_bootstrap/test_bench/session/result.rb +44 -0
  141. data/upstream-lib/test_bench_bootstrap/test_bench/session/session.rb +236 -0
  142. data/upstream-lib/test_bench_bootstrap/test_bench/session/status.rb +60 -0
  143. data/upstream-lib/test_bench_bootstrap/test_bench/session/substitute/sink.rb +99 -0
  144. data/upstream-lib/test_bench_bootstrap/test_bench/session/substitute.rb +154 -0
  145. data/upstream-lib/test_bench_bootstrap/test_bench/session/trace.rb +53 -0
  146. data/upstream-lib/test_bench_bootstrap/test_bench/session.rb +22 -0
  147. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/event/metadata.rb +72 -0
  148. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/event.rb +156 -0
  149. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/event_data.rb +113 -0
  150. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/handler.rb +83 -0
  151. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/path/file.rb +39 -0
  152. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/process_id.rb +25 -0
  153. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/random.rb +11 -0
  154. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/sink.rb +35 -0
  155. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls/time.rb +104 -0
  156. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/controls.rb +16 -0
  157. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/event.rb +130 -0
  158. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/event_data/serialization.rb +85 -0
  159. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/event_data.rb +15 -0
  160. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/sink/file.rb +39 -0
  161. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/sink/handler/event_registry.rb +44 -0
  162. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/sink/handler.rb +128 -0
  163. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/sink.rb +13 -0
  164. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/substitute/sink.rb +71 -0
  165. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/substitute.rb +43 -0
  166. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry/telemetry.rb +92 -0
  167. data/upstream-lib/test_bench_bootstrap/test_bench/telemetry.rb +18 -0
  168. data/upstream-lib/test_bench_bootstrap/test_bench/test_bench.rb +72 -0
  169. data/upstream-lib/test_bench_bootstrap/test_bench.rb +4 -0
  170. metadata +353 -16
  171. data/lib/test_bench/bootstrap.rb +0 -328
@@ -0,0 +1,15 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Controls
5
+ module Telemetry
6
+ Event = TestBench::Telemetry::Controls::Event
7
+ EventData = TestBench::Telemetry::Controls::EventData
8
+ Metadata = TestBench::Telemetry::Controls::Event::Metadata
9
+ Random = TestBench::Telemetry::Controls::Random
10
+ Sink = TestBench::Telemetry::Controls::Sink
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,37 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Controls
5
+ module TelemetrySink
6
+ def self.example
7
+ Telemetry::Sink.example
8
+ end
9
+
10
+ class SetTrace
11
+ include TestBench::Telemetry::Sink
12
+
13
+ attr_accessor :trace_text
14
+
15
+ attr_reader :session
16
+
17
+ def initialize(session)
18
+ @session = session
19
+ end
20
+
21
+ def self.register(session)
22
+ instance = new(session)
23
+ session.register_telemetry_sink(instance)
24
+ instance
25
+ end
26
+
27
+ def receive(_event_data)
28
+ trace_text = session.trace.join
29
+
30
+ self.trace_text = trace_text
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Controls
5
+ module Text
6
+ def self.example
7
+ "Some text"
8
+ end
9
+
10
+ module Comment
11
+ def self.example
12
+ "Some comment"
13
+ end
14
+
15
+ def self.other_example
16
+ "Some other comment"
17
+ end
18
+ end
19
+
20
+ module Detail
21
+ def self.example
22
+ "Some detail"
23
+ end
24
+
25
+ def self.other_example
26
+ "Some other detail"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,41 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Controls
5
+ module Title
6
+ def self.example
7
+ "Some Title"
8
+ end
9
+
10
+ def self.other_example
11
+ "Some Other Title"
12
+ end
13
+
14
+ def self.random
15
+ "#{example} #{Random.string}"
16
+ end
17
+
18
+ module Context
19
+ def self.example
20
+ "Some Context"
21
+ end
22
+
23
+ def self.other_example
24
+ "Some Other Context"
25
+ end
26
+ end
27
+
28
+ module Test
29
+ def self.example
30
+ "Some test"
31
+ end
32
+
33
+ def self.other_example
34
+ "Some other test"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_bench_bootstrap/test_bench/telemetry/controls'
2
+
3
+ require 'test_bench_bootstrap/test_bench/session/controls/telemetry'
4
+
5
+ require 'test_bench_bootstrap/test_bench/session/controls/event'
6
+ require 'test_bench_bootstrap/test_bench/session/controls/metadata'
7
+ require 'test_bench_bootstrap/test_bench/session/controls/random'
8
+ require 'test_bench_bootstrap/test_bench/session/controls/result'
9
+ require 'test_bench_bootstrap/test_bench/session/controls/sequence'
10
+ require 'test_bench_bootstrap/test_bench/session/controls/status'
11
+ require 'test_bench_bootstrap/test_bench/session/controls/telemetry_sink'
12
+
13
+ require 'test_bench_bootstrap/test_bench/session/controls/path'
14
+ require 'test_bench_bootstrap/test_bench/session/controls/path/apex_directory'
15
+ require 'test_bench_bootstrap/test_bench/session/controls/path/file'
16
+ require 'test_bench_bootstrap/test_bench/session/controls/path/file/create'
17
+
18
+ require 'test_bench_bootstrap/test_bench/session/controls/exception/raise'
19
+ require 'test_bench_bootstrap/test_bench/session/controls/exception'
20
+ require 'test_bench_bootstrap/test_bench/session/controls/exception/message'
21
+
22
+ require 'test_bench_bootstrap/test_bench/session/controls/backtrace'
23
+ require 'test_bench_bootstrap/test_bench/session/controls/backtrace/location'
24
+
25
+ require 'test_bench_bootstrap/test_bench/session/controls/text'
26
+ require 'test_bench_bootstrap/test_bench/session/controls/message'
27
+ require 'test_bench_bootstrap/test_bench/session/controls/title'
28
+
29
+ require 'test_bench_bootstrap/test_bench/session/controls/comment_disposition'
30
+
31
+ require 'test_bench_bootstrap/test_bench/session/controls/events/failed'
32
+ require 'test_bench_bootstrap/test_bench/session/controls/events/aborted'
33
+ require 'test_bench_bootstrap/test_bench/session/controls/events/skipped'
34
+ require 'test_bench_bootstrap/test_bench/session/controls/events/commented'
35
+ require 'test_bench_bootstrap/test_bench/session/controls/events/detailed'
36
+ require 'test_bench_bootstrap/test_bench/session/controls/events/test_started'
37
+ require 'test_bench_bootstrap/test_bench/session/controls/events/test_finished'
38
+ require 'test_bench_bootstrap/test_bench/session/controls/events/context_started'
39
+ require 'test_bench_bootstrap/test_bench/session/controls/events/context_finished'
40
+ require 'test_bench_bootstrap/test_bench/session/controls/events/file_queued'
41
+ require 'test_bench_bootstrap/test_bench/session/controls/events/file_executed'
42
+ require 'test_bench_bootstrap/test_bench/session/controls/events/file_not_found'
43
+ require 'test_bench_bootstrap/test_bench/session/controls/events'
@@ -0,0 +1,17 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Defaults
5
+ def self.strict
6
+ disabled_value = 'off'
7
+
8
+ env_strict = ENV.fetch('TEST_BENCH_STRICT', disabled_value)
9
+
10
+ disabled = env_strict == disabled_value
11
+
12
+ !disabled
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Events
5
+ Failed = Telemetry::Event.define(:message)
6
+ Aborted = Telemetry::Event.define(:message, :location)
7
+ Skipped = Telemetry::Event.define(:message)
8
+
9
+ Commented = Telemetry::Event.define(:text, :disposition)
10
+ Detailed = Telemetry::Event.define(:text, :disposition)
11
+
12
+ TestStarted = Telemetry::Event.define(:title)
13
+ TestFinished = Telemetry::Event.define(:title, :result)
14
+
15
+ ContextStarted = Telemetry::Event.define(:title)
16
+ ContextFinished = Telemetry::Event.define(:title, :result)
17
+
18
+ FileQueued = Telemetry::Event.define(:file)
19
+ FileExecuted = Telemetry::Event.define(:file, :result)
20
+ FileNotFound = Telemetry::Event.define(:file)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Exception
5
+ class FormatBacktrace
6
+ module Substitute
7
+ def self.build
8
+ FormatBacktrace.new
9
+ end
10
+
11
+ class FormatBacktrace
12
+ attr_accessor :location
13
+ alias :set_location :location=
14
+
15
+ def exceptions
16
+ @exceptions ||= []
17
+ end
18
+
19
+ def call(exception)
20
+ exceptions << exception
21
+
22
+ location
23
+ end
24
+
25
+ def formatted?(exception)
26
+ exceptions.include?(exception)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,114 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Exception
5
+ class FormatBacktrace
6
+ def omit_patterns
7
+ @omit_patterns ||= []
8
+ end
9
+ attr_writer :omit_patterns
10
+
11
+ def apex_directory
12
+ @apex_directory ||= ::Dir.pwd
13
+ end
14
+ attr_writer :apex_directory
15
+
16
+ attr_accessor :styling
17
+ alias :styling? :styling
18
+
19
+ def self.build
20
+ instance = new
21
+
22
+ omit_patterns = Defaults.omit_patterns
23
+ instance.omit_patterns = omit_patterns
24
+
25
+ styling = Defaults.styling
26
+ instance.styling = styling
27
+
28
+ instance
29
+ end
30
+
31
+ def self.configure(receiver, attr_name: nil)
32
+ attr_name ||= :format_backtrace
33
+
34
+ instance = build
35
+ receiver.public_send(:"#{attr_name}=", instance)
36
+ end
37
+
38
+ def call(exception)
39
+ if styling?
40
+ omitted_text = "\e[2;3m*omitted*\e[23;22m"
41
+ else
42
+ omitted_text = "*omitted*"
43
+ end
44
+
45
+ backtrace = []
46
+
47
+ original_frame = exception.backtrace_locations.first.to_s
48
+ backtrace << original_frame
49
+
50
+ omitting = false
51
+
52
+ exception.backtrace_locations[1..-1].each do |backtrace_location|
53
+ if omit?(backtrace_location)
54
+ if not omitting
55
+ backtrace << omitted_text
56
+ end
57
+
58
+ omitting = true
59
+ else
60
+ omitting = false
61
+ end
62
+
63
+ if not omitting
64
+ backtrace << backtrace_location.to_s
65
+ end
66
+ end
67
+
68
+ apex_directory_prefix = ::File.join(apex_directory, '')
69
+
70
+ backtrace.each do |backtrace_location_text|
71
+ backtrace_location_text.delete_prefix!(apex_directory_prefix)
72
+ end
73
+
74
+ exception.set_backtrace(backtrace)
75
+
76
+ if exception.cause
77
+ self.(exception.cause)
78
+ end
79
+
80
+ location = exception.backtrace_locations.find do |backtrace_location|
81
+ !omit?(backtrace_location)
82
+ end
83
+
84
+ location ||= exception.backtrace_locations.first
85
+
86
+ location = "#{location.path}:#{location.lineno}"
87
+ location.delete_prefix!(apex_directory_prefix)
88
+ location
89
+ end
90
+
91
+ def omit?(backtrace_location)
92
+ backtrace_path = backtrace_location.path
93
+
94
+ omit_patterns.any? do |omit_pattern|
95
+ ::File.fnmatch?(omit_pattern, backtrace_path, ::File::FNM_EXTGLOB)
96
+ end
97
+ end
98
+
99
+ module Defaults
100
+ def self.omit_patterns
101
+ env_omit_backtrace_pattern = ENV.fetch('TEST_BENCH_OMIT_BACKTRACE_PATTERN', '')
102
+
103
+ env_omit_backtrace_pattern.split(':')
104
+ end
105
+
106
+ def self.styling
107
+ ::Exception.to_tty?
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,45 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ class Isolate
5
+ module Substitute
6
+ def self.build
7
+ Isolate.new
8
+ end
9
+
10
+ class Isolate
11
+ def file_paths
12
+ @file_paths ||= []
13
+ end
14
+ attr_writer :file_paths
15
+
16
+ def events
17
+ @events ||= []
18
+ end
19
+ attr_writer :events
20
+ alias :set_events :events=
21
+
22
+ attr_accessor :stopped
23
+ def stopped?
24
+ stopped ? true : false
25
+ end
26
+
27
+ def call(file_path, &block)
28
+ file_paths << file_path
29
+
30
+ events.each(&block)
31
+ end
32
+
33
+ def stop
34
+ self.stopped = true
35
+ end
36
+
37
+ def executed?(file_path)
38
+ file_paths.include?(file_path)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,159 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ class Isolate
5
+ def subprocess_sequence
6
+ @subprocess_sequence ||= 0
7
+ end
8
+ attr_writer :subprocess_sequence
9
+
10
+ def apex_directory
11
+ @apex_directory ||= ::Dir.pwd
12
+ end
13
+ attr_writer :apex_directory
14
+
15
+ attr_accessor :subprocess_id
16
+
17
+ attr_accessor :telemetry_reader
18
+ attr_accessor :file_path_writer
19
+
20
+ def self.build(apex_directory: nil)
21
+ instance = new
22
+ instance.apex_directory = apex_directory
23
+ instance
24
+ end
25
+
26
+ def self.configure(receiver, apex_directory: nil, attr_name: nil)
27
+ attr_name ||= :isolate
28
+
29
+ instance = build(apex_directory:)
30
+ receiver.public_send(:"#{attr_name}=", instance)
31
+ end
32
+
33
+ def call(file_path, &probe)
34
+ case status
35
+ when Status.stopping
36
+ stop
37
+ start
38
+ when Status.stopped
39
+ start
40
+ end
41
+
42
+ file_path_writer.puts(file_path)
43
+
44
+ loop do
45
+ event_data_text = telemetry_reader.gets
46
+
47
+ event_data = Telemetry::EventData.load(event_data_text)
48
+
49
+ if Isolated === event_data
50
+ executed_file_path, result = event_data.data
51
+
52
+ if executed_file_path == file_path
53
+ if result == Result.aborted
54
+ stop!
55
+ end
56
+
57
+ break
58
+ else
59
+ next
60
+ end
61
+ end
62
+
63
+ probe.(event_data)
64
+ end
65
+ end
66
+
67
+ def start
68
+ file_path_reader, file_path_writer = IO.pipe
69
+ telemetry_reader, telemetry_writer = IO.pipe
70
+
71
+ subprocess_id = fork do
72
+ file_path_writer.close
73
+ telemetry_reader.close
74
+
75
+ ::Dir.chdir(apex_directory)
76
+
77
+ session = Session.build
78
+
79
+ telemetry_sink = Telemetry::Sink::File.new(telemetry_writer)
80
+ session.register_telemetry_sink(telemetry_sink)
81
+
82
+ Session.establish(session)
83
+
84
+ while file_path = file_path_reader.gets(chomp: true)
85
+ pending_event = Isolated.build(file_path)
86
+
87
+ absolute_file_path = ::File.expand_path(file_path)
88
+
89
+ session.evaluate(pending_event) do
90
+ load(absolute_file_path)
91
+ end
92
+ end
93
+
94
+ ensure
95
+ # Ensure any exception raised by the subprocess is likely to be printed after the session's test output
96
+ one_millisecond = 0.001
97
+ sleep(one_millisecond)
98
+ end
99
+
100
+ telemetry_writer.close
101
+ file_path_reader.close
102
+
103
+ self.subprocess_id = subprocess_id
104
+ self.subprocess_sequence += 1
105
+
106
+ self.telemetry_reader = telemetry_reader
107
+ self.file_path_writer = file_path_writer
108
+
109
+ subprocess_id
110
+ end
111
+
112
+ def stop
113
+ stop!
114
+
115
+ if subprocess_id.nil?
116
+ return nil
117
+ end
118
+
119
+ subprocess_status = ::Process::Status.wait(subprocess_id)
120
+
121
+ self.subprocess_id = nil
122
+
123
+ subprocess_status.exitstatus
124
+ end
125
+
126
+ def stop!
127
+ telemetry_reader&.close
128
+ file_path_writer&.close
129
+ end
130
+
131
+ def status
132
+ if subprocess_id.nil?
133
+ Status.stopped
134
+ elsif telemetry_reader.closed? && file_path_writer.closed?
135
+ Status.stopping
136
+ else
137
+ Status.active
138
+ end
139
+ end
140
+
141
+ Isolated = Telemetry::Event.define(:file, :result)
142
+
143
+ module Status
144
+ def self.active
145
+ :active
146
+ end
147
+
148
+ def self.stopping
149
+ :stopping
150
+ end
151
+
152
+ def self.stopped
153
+ :stopped
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,44 @@
1
+ module TestBenchBootstrap
2
+ module TestBench
3
+ class Session
4
+ module Result
5
+ extend self
6
+
7
+ def self.resolve(result, strict: nil)
8
+ if strict.nil?
9
+ strict = Defaults.strict
10
+ end
11
+
12
+ case result
13
+ in "passed"
14
+ true
15
+ in "failed" | "aborted"
16
+ false
17
+ in "none" | "incomplete"
18
+ !strict
19
+ end
20
+ end
21
+
22
+ def passed
23
+ "passed"
24
+ end
25
+
26
+ def failed
27
+ "failed"
28
+ end
29
+
30
+ def none
31
+ "none"
32
+ end
33
+
34
+ def aborted
35
+ "aborted"
36
+ end
37
+
38
+ def incomplete
39
+ "incomplete"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end