test_bench-session 2.1.3.2 → 3.0.0.0.pre.2

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench/session/controls/backtrace/location.rb +46 -0
  3. data/lib/test_bench/session/controls/backtrace.rb +81 -0
  4. data/lib/test_bench/session/controls/comment_disposition.rb +15 -0
  5. data/lib/test_bench/session/controls/event.rb +27 -1
  6. data/lib/test_bench/session/controls/events/aborted.rb +49 -0
  7. data/lib/test_bench/session/controls/events/commented.rb +26 -76
  8. data/lib/test_bench/session/controls/events/context_finished.rb +68 -28
  9. data/lib/test_bench/session/controls/events/context_started.rb +17 -32
  10. data/lib/test_bench/session/controls/events/detailed.rb +26 -76
  11. data/lib/test_bench/session/controls/events/failed.rb +16 -24
  12. data/lib/test_bench/session/controls/events/file_executed.rb +99 -0
  13. data/lib/test_bench/session/controls/events/file_not_found.rb +39 -0
  14. data/lib/test_bench/session/controls/events/file_queued.rb +39 -0
  15. data/lib/test_bench/session/controls/events/skipped.rb +49 -0
  16. data/lib/test_bench/session/controls/events/test_finished.rb +48 -28
  17. data/lib/test_bench/session/controls/events/test_started.rb +17 -32
  18. data/lib/test_bench/session/controls/events.rb +19 -19
  19. data/lib/test_bench/session/controls/exception/message.rb +21 -0
  20. data/lib/test_bench/session/controls/exception/raise.rb +50 -0
  21. data/lib/test_bench/session/controls/exception.rb +55 -21
  22. data/lib/test_bench/session/controls/message.rb +41 -0
  23. data/lib/test_bench/session/controls/{time.rb → metadata.rb} +1 -1
  24. data/lib/test_bench/session/controls/path/apex_directory.rb +74 -0
  25. data/lib/test_bench/session/controls/path/file/create.rb +111 -0
  26. data/lib/test_bench/session/controls/path/file.rb +40 -0
  27. data/lib/test_bench/session/controls/path.rb +85 -0
  28. data/lib/test_bench/session/controls/random.rb +1 -1
  29. data/lib/test_bench/session/controls/result.rb +3 -11
  30. data/lib/test_bench/session/controls/{events/event_data.rb → sequence.rb} +4 -2
  31. data/lib/test_bench/session/controls/status.rb +90 -0
  32. data/lib/test_bench/session/controls/telemetry.rb +13 -0
  33. data/lib/test_bench/session/controls/telemetry_sink.rb +29 -1
  34. data/lib/test_bench/session/controls/text.rb +31 -0
  35. data/lib/test_bench/session/controls/title.rb +12 -12
  36. data/lib/test_bench/session/controls.rb +31 -26
  37. data/lib/test_bench/session/defaults.rb +15 -0
  38. data/lib/test_bench/session/events.rb +12 -15
  39. data/lib/test_bench/session/exception/format_backtrace/substitute.rb +32 -0
  40. data/lib/test_bench/session/exception/format_backtrace.rb +112 -0
  41. data/lib/test_bench/session/isolate/substitute.rb +43 -0
  42. data/lib/test_bench/session/isolate.rb +157 -0
  43. data/lib/test_bench/session/result.rb +42 -0
  44. data/lib/test_bench/session/session.rb +137 -164
  45. data/lib/test_bench/session/status.rb +58 -0
  46. data/lib/test_bench/session/substitute/sink.rb +30 -45
  47. data/lib/test_bench/session/substitute.rb +91 -52
  48. data/lib/test_bench/session/trace.rb +51 -0
  49. data/lib/test_bench/session.rb +15 -15
  50. metadata +53 -45
  51. data/lib/test_bench/session/controls/comment.rb +0 -105
  52. data/lib/test_bench/session/controls/detail.rb +0 -91
  53. data/lib/test_bench/session/controls/events/context_skipped.rb +0 -47
  54. data/lib/test_bench/session/controls/events/fixture_finished.rb +0 -53
  55. data/lib/test_bench/session/controls/events/fixture_started.rb +0 -47
  56. data/lib/test_bench/session/controls/events/test_skipped.rb +0 -47
  57. data/lib/test_bench/session/controls/failure.rb +0 -19
  58. data/lib/test_bench/session/controls/fixture.rb +0 -19
  59. data/lib/test_bench/session/controls/output/detail.rb +0 -29
  60. data/lib/test_bench/session/controls/output.rb +0 -55
  61. data/lib/test_bench/session/controls/process_id.rb +0 -7
  62. data/lib/test_bench/session/controls/substitute/path.rb +0 -33
  63. data/lib/test_bench/session/output/get.rb +0 -27
  64. data/lib/test_bench/session/output/writer/buffer/interactive/viewport.rb +0 -165
  65. data/lib/test_bench/session/output/writer/buffer/interactive.rb +0 -139
  66. data/lib/test_bench/session/output/writer/buffer.rb +0 -27
  67. data/lib/test_bench/session/output/writer/defaults.rb +0 -17
  68. data/lib/test_bench/session/output/writer/substitute.rb +0 -17
  69. data/lib/test_bench/session/output/writer.rb +0 -95
  70. data/lib/test_bench/session/output.rb +0 -384
  71. data/lib/test_bench/session/projection.rb +0 -28
  72. data/lib/test_bench/session/store.rb +0 -59
  73. data/lib/test_bench/session/substitute/path.rb +0 -63
@@ -1,53 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module FixtureFinished
6
- extend EventData
7
-
8
- def self.example(name: nil, result: nil, process_id: nil, time: nil)
9
- name ||= self.name
10
- result = self.result if result.nil?
11
- process_id ||= self.process_id
12
- time ||= self.time
13
-
14
- Session::Events::FixtureFinished.build(name, result, process_id:, time:)
15
- end
16
-
17
- def self.random
18
- Random.example
19
- end
20
-
21
- def self.name
22
- Fixture::Name.example
23
- end
24
-
25
- def self.result
26
- Result.example
27
- end
28
-
29
- def self.process_id
30
- ProcessID.example
31
- end
32
-
33
- def self.time
34
- Time.example
35
- end
36
-
37
- module Random
38
- extend EventData
39
-
40
- def self.example(name: nil, result: nil, process_id: nil, time: nil)
41
- name ||= Fixture::Name.random
42
- result = Result.random if result.nil?
43
- process_id ||= ProcessID.random
44
- time ||= Time.random
45
-
46
- FixtureFinished.example(name:, result:, process_id:, time:)
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,47 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module FixtureStarted
6
- extend EventData
7
-
8
- def self.example(name: nil, process_id: nil, time: nil)
9
- name ||= self.name
10
- process_id ||= self.process_id
11
- time ||= self.time
12
-
13
- Session::Events::FixtureStarted.build(name, process_id:, time:)
14
- end
15
-
16
- def self.random
17
- Random.example
18
- end
19
-
20
- def self.name
21
- Fixture::Name.example
22
- end
23
-
24
- def self.process_id
25
- ProcessID.example
26
- end
27
-
28
- def self.time
29
- Time.example
30
- end
31
-
32
- module Random
33
- extend EventData
34
-
35
- def self.example(name: nil, process_id: nil, time: nil)
36
- name ||= Fixture::Name.random
37
- process_id ||= ProcessID.random
38
- time ||= Time.random
39
-
40
- FixtureStarted.example(name:, process_id:, time:)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,47 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module TestSkipped
6
- extend EventData
7
-
8
- def self.example(title: nil, process_id: nil, time: nil)
9
- title ||= self.title
10
- process_id ||= self.process_id
11
- time ||= self.time
12
-
13
- Session::Events::TestSkipped.build(title, process_id:, time:)
14
- end
15
-
16
- def self.random
17
- Random.example
18
- end
19
-
20
- def self.title
21
- Title::Test.example
22
- end
23
-
24
- def self.process_id
25
- ProcessID.example
26
- end
27
-
28
- def self.time
29
- Time.example
30
- end
31
-
32
- module Random
33
- extend EventData
34
-
35
- def self.example(title: nil, process_id: nil, time: nil)
36
- process_id ||= ProcessID.random
37
- time ||= Time.random
38
- title ||= Title::Test.random
39
-
40
- TestSkipped.example(title:, process_id:, time:)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,19 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Failure
5
- module Message
6
- def self.example
7
- "Some failure message"
8
- end
9
-
10
- def self.random
11
- suffix = Random.string
12
-
13
- "#{example} #{suffix}"
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Fixture
5
- module Name
6
- def self.example
7
- "SomeNamespace::SomeFixture"
8
- end
9
-
10
- def self.random
11
- suffix = Random.string
12
-
13
- "#{example}_#{suffix}"
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Output
5
- module Detail
6
- def self.example
7
- Session::Output::Detail.on
8
- end
9
-
10
- def self.other_example
11
- Session::Output::Detail.off
12
- end
13
-
14
- def self.random
15
- details = [
16
- Session::Output::Detail.on,
17
- Session::Output::Detail.off,
18
- Session::Output::Detail.failure
19
- ]
20
-
21
- index = Random.integer % details.count
22
-
23
- details[index]
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,55 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Output
5
- Device = TestBench::Output::Controls::Device
6
- Data = TestBench::Output::Controls::Data
7
- Styling = TestBench::Output::Controls::Styling
8
- Style = TestBench::Output::Controls::Style
9
- Text = TestBench::Output::Controls::Text
10
-
11
- def self.example(details: nil, styling: nil, mode: nil)
12
- styling ||= false
13
-
14
- output = Session::Output.new
15
-
16
- if details == true
17
- output.detail_policy = Session::Output::Detail.on
18
- elsif details == false
19
- output.detail_policy = Session::Output::Detail.off
20
- else
21
- output.detail_policy = Session::Output::Detail.failure
22
- end
23
-
24
- if styling
25
- output.writer.styling!
26
- end
27
-
28
- if not mode.nil?
29
- output.mode = mode
30
- end
31
-
32
- output
33
- end
34
-
35
- module Styling
36
- def self.example
37
- Output.example(styling:)
38
- end
39
-
40
- def self.styling
41
- true
42
- end
43
- end
44
-
45
- module Pending
46
- def self.example
47
- output = Styling.example
48
- output.pending_writer.buffer.limit = nil
49
- output
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,7 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- ProcessID = TestBench::Telemetry::Controls::ProcessID
5
- end
6
- end
7
- end
@@ -1,33 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Substitute
5
- module Path
6
- def self.example(segments=nil)
7
- segments ||= Segment.examples
8
-
9
- segments = segments.dup
10
-
11
- path = TestBench::Session::Substitute::Path.new
12
- path.segments = segments
13
- path
14
- end
15
-
16
- module Segment
17
- def self.examples
18
- [example, Context.other_example, Test.example]
19
- end
20
-
21
- def self.example
22
- Context.example
23
- end
24
-
25
- Test = Title::Test
26
-
27
- Context = Title::Context
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,27 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- module Get
5
- def self.call(substitute_session, styling: nil)
6
- styling = true if styling.nil?
7
-
8
- session_sink = substitute_session.sink
9
-
10
- output = Output.new
11
-
12
- if styling
13
- output.writer.styling!
14
- end
15
-
16
- session_sink.records.each do |record|
17
- event_data = record.event_data
18
-
19
- output.receive(event_data)
20
- end
21
-
22
- output.writer.written_text
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,165 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer
5
- module Buffer
6
- class Interactive
7
- Viewport = Struct.new(:width, :height, :row, :column, :scroll_rows, :rows_scrolled) do
8
- def self.build(width, height, row, column, scroll_rows=nil)
9
- scroll_rows ||= 0
10
-
11
- rows_scrolled = 0
12
-
13
- new(width, height, row, column, scroll_rows, rows_scrolled)
14
- end
15
-
16
- def self.null
17
- build(0, 0, 0, 0)
18
- end
19
-
20
- def self.get
21
- width, height, row, column = nil
22
-
23
- Kernel.require 'io/console'
24
- STDIN.raw do |stdin|
25
- height, width = stdin.winsize
26
-
27
- row, column = stdin.cursor
28
- end
29
-
30
- scroll_rows = row
31
-
32
- build(width, height, row, column, scroll_rows)
33
- end
34
-
35
- def write(text)
36
- bytes_written = 0
37
-
38
- escape_sequence_pattern = self.class.escape_sequence_pattern
39
-
40
- until text.empty?
41
- write_text, escape_sequence, text = text.partition(escape_sequence_pattern)
42
-
43
- bytes_written += write!(write_text)
44
- bytes_written += escape_sequence.bytesize
45
- end
46
-
47
- bytes_written
48
- end
49
-
50
- def write!(text)
51
- newline = text.end_with?("\n")
52
-
53
- if newline
54
- text = text[0...-1]
55
- end
56
-
57
- bytes_written = write_text(text)
58
-
59
- if newline
60
- bytes_written += write_newline
61
- end
62
-
63
- bytes_written
64
- end
65
-
66
- def write_text(text)
67
- if text.start_with?("\e")
68
- return text.bytesize
69
- end
70
-
71
- written_text = text[0...capacity]
72
-
73
- bytes_written = written_text.bytesize
74
-
75
- row = self.row
76
- column = self.column
77
-
78
- text_rows, text_columns = bytes_written.divmod(width)
79
-
80
- row += text_rows
81
-
82
- columns_remaining = width - column
83
- if columns_remaining > text_columns
84
- column += text_columns
85
- else
86
- row += 1
87
- column = text_columns - columns_remaining
88
- end
89
-
90
- if row >= height
91
- final_row = height - 1
92
-
93
- scroll_rows = row - final_row
94
- self.rows_scrolled += scroll_rows
95
-
96
- row = final_row
97
- end
98
-
99
- self.row = row
100
- self.column = column
101
-
102
- bytes_written
103
- end
104
-
105
- def write_newline
106
- if bottom_row?
107
- if scroll_rows_remaining.zero?
108
- return 0
109
- end
110
-
111
- self.rows_scrolled += 1
112
- else
113
- self.row += 1
114
- end
115
-
116
- self.column = 0
117
-
118
- 1
119
- end
120
-
121
- def capacity?
122
- if scroll_rows_remaining > 0
123
- true
124
- else
125
- not bottom_row?
126
- end
127
- end
128
-
129
- def capacity
130
- capacity = 0
131
-
132
- rows_remaining = height + scroll_rows_remaining - row - 1
133
-
134
- if rows_remaining > 0
135
- capacity += (rows_remaining - 1) * width
136
-
137
- final_row = width - column
138
- capacity += final_row
139
- end
140
-
141
- capacity
142
- end
143
-
144
- def scroll_rows_remaining
145
- scroll_rows - rows_scrolled
146
- end
147
-
148
- def bottom_row?
149
- row == height - 1
150
- end
151
-
152
- def self.escape_sequence_pattern
153
- initiator = %r{\e\[}
154
- terminator = %r{[[:alpha:]]}
155
- sequence = %r{[[:digit:]]+(?:;[[:digit:]]+)*}
156
-
157
- %r{#{initiator}#{sequence}?#{terminator}}
158
- end
159
- end
160
- end
161
- end
162
- end
163
- end
164
- end
165
- end
@@ -1,139 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer
5
- module Buffer
6
- class Interactive
7
- attr_accessor :viewport
8
-
9
- attr_accessor :raw_stderr
10
-
11
- attr_accessor :stderr_pipe
12
-
13
- def stderr_buffer
14
- @stderr_buffer ||= String.new
15
- end
16
-
17
- def device
18
- @device ||= TestBench::Output::Device::Substitute.build
19
- end
20
- attr_writer :device
21
-
22
- attr_accessor :buffering
23
- def buffering? = !!buffering
24
-
25
- def self.build(device=nil)
26
- device ||= Defaults.device
27
-
28
- instance = new
29
- instance.device = device
30
- instance
31
- end
32
-
33
- def self.configure(receiver, device: nil, attr_name: nil)
34
- attr_name ||= :buffer
35
-
36
- instance = build(device)
37
- receiver.public_send(:"#{attr_name}=", instance)
38
- end
39
-
40
- def receive(text)
41
- if not cursor_saved?
42
- save_cursor
43
- end
44
-
45
- bytes_written = viewport.write(text)
46
-
47
- write_text = text.byteslice(0, bytes_written)
48
- device.write(write_text)
49
-
50
- if not viewport.capacity?
51
- if not buffering?
52
- buffering_message = "Output is buffering"
53
-
54
- device.write("\e[0G\e[2m#{buffering_message}\e[22m")
55
-
56
- self.buffering = true
57
- end
58
- end
59
-
60
- update_stderr_buffer
61
-
62
- bytes_written
63
- end
64
-
65
- def flush(*_devices)
66
- if cursor_saved?
67
- update_stderr_buffer
68
- restore_cursor
69
- end
70
- end
71
-
72
- def save_cursor
73
- self.viewport = Viewport.get
74
-
75
- self.raw_stderr = STDERR.dup
76
-
77
- reader, writer = IO.pipe
78
-
79
- new_stderr = writer
80
- STDERR.reopen(new_stderr)
81
-
82
- stderr_buffer.clear
83
-
84
- self.stderr_pipe = reader
85
-
86
- device.write("\e[s")
87
- end
88
-
89
- def restore_cursor
90
- stderr_pipe.close
91
-
92
- device.write("\e[u")
93
-
94
- rows_scrolled = viewport.rows_scrolled
95
-
96
- if not rows_scrolled.zero?
97
- upward_movements = rows_scrolled
98
- device.write("\e[#{upward_movements}F")
99
- end
100
-
101
- stderr_buffer.each_line do |line|
102
- raw_stderr.write("\e[0K")
103
- raw_stderr.write(line)
104
- end
105
-
106
- STDERR.reopen(raw_stderr)
107
- self.raw_stderr = nil
108
-
109
- self.viewport = nil
110
- end
111
-
112
- def update_stderr_buffer
113
- loop do
114
- stderr_text = stderr_pipe.read_nonblock(4096, exception: false)
115
-
116
- if stderr_text == :wait_readable
117
- break
118
- end
119
-
120
- viewport.write(stderr_text)
121
-
122
- if not buffering?
123
- raw_stderr.write(stderr_text)
124
- end
125
-
126
- self.stderr_buffer << stderr_text
127
- end
128
- end
129
-
130
- def viewport?
131
- !viewport.nil?
132
- end
133
- alias :cursor_saved? :viewport?
134
- end
135
- end
136
- end
137
- end
138
- end
139
- end
@@ -1,27 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer
5
- module Buffer
6
- def self.configure(receiver, device: nil, experimental_output: nil, attr_name: nil)
7
- device ||= Defaults.device
8
- experimental_output ||= Defaults.experimental_output
9
- attr_name ||= :buffer
10
-
11
- if experimental_output
12
- interactive = device.tty?
13
- else
14
- interactive = false
15
- end
16
-
17
- if interactive
18
- Buffer::Interactive.configure(receiver, device:, attr_name:)
19
- else
20
- TestBench::Output::Writer::Buffer.configure(receiver, attr_name:)
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,17 +0,0 @@
1
- module TestBench
2
- class Session
3
- class Output
4
- class Writer
5
- module Defaults
6
- def self.device
7
- TestBench::Output::Writer::Defaults.device
8
- end
9
-
10
- def self.experimental_output
11
- ENV.fetch('TEST_BENCH_EXPERIMENTAL_OUTPUT', 'off') == 'on'
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end