test_bench-telemetry 2.0.0.1 → 2.1.0.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench/telemetry/controls/event/event_data.rb +15 -0
  3. data/lib/test_bench/telemetry/controls/event/metadata.rb +70 -0
  4. data/lib/test_bench/telemetry/controls/event.rb +112 -51
  5. data/lib/test_bench/telemetry/controls/event_data.rb +129 -0
  6. data/lib/test_bench/telemetry/controls/file.rb +84 -0
  7. data/lib/test_bench/telemetry/controls/handler.rb +48 -43
  8. data/lib/test_bench/telemetry/controls/{detail_level.rb → process_id.rb} +7 -3
  9. data/lib/test_bench/telemetry/controls/projection/receiver.rb +31 -0
  10. data/lib/test_bench/telemetry/controls/projection.rb +84 -0
  11. data/lib/test_bench/telemetry/controls/random.rb +1 -1
  12. data/lib/test_bench/telemetry/controls/sink.rb +23 -1
  13. data/lib/test_bench/telemetry/controls/time.rb +49 -2
  14. data/lib/test_bench/telemetry/controls.rb +10 -33
  15. data/lib/test_bench/telemetry/event.rb +74 -13
  16. data/lib/test_bench/telemetry/{event → event_data}/serialization.rb +78 -53
  17. data/lib/test_bench/telemetry/event_data.rb +13 -0
  18. data/lib/test_bench/telemetry/sink/file.rb +3 -3
  19. data/lib/test_bench/telemetry/sink/handler/event_registry.rb +42 -0
  20. data/lib/test_bench/telemetry/sink/handler.rb +54 -30
  21. data/lib/test_bench/telemetry/sink/projection.rb +132 -0
  22. data/lib/test_bench/telemetry/sink.rb +11 -0
  23. data/lib/test_bench/telemetry/substitute/sink.rb +83 -0
  24. data/lib/test_bench/telemetry/substitute.rb +13 -54
  25. data/lib/test_bench/telemetry/telemetry.rb +60 -19
  26. data/lib/test_bench/telemetry.rb +8 -10
  27. metadata +17 -40
  28. data/lib/test_bench/telemetry/controls/capture_sink/path.rb +0 -30
  29. data/lib/test_bench/telemetry/controls/capture_sink/record.rb +0 -21
  30. data/lib/test_bench/telemetry/controls/comment.rb +0 -19
  31. data/lib/test_bench/telemetry/controls/error.rb +0 -36
  32. data/lib/test_bench/telemetry/controls/events/asserted.rb +0 -32
  33. data/lib/test_bench/telemetry/controls/events/commented.rb +0 -26
  34. data/lib/test_bench/telemetry/controls/events/context_entered.rb +0 -31
  35. data/lib/test_bench/telemetry/controls/events/context_exited.rb +0 -34
  36. data/lib/test_bench/telemetry/controls/events/context_skipped.rb +0 -31
  37. data/lib/test_bench/telemetry/controls/events/detail_decreased.rb +0 -23
  38. data/lib/test_bench/telemetry/controls/events/detail_increased.rb +0 -23
  39. data/lib/test_bench/telemetry/controls/events/error_raised.rb +0 -26
  40. data/lib/test_bench/telemetry/controls/events/file_entered.rb +0 -29
  41. data/lib/test_bench/telemetry/controls/events/file_exited.rb +0 -32
  42. data/lib/test_bench/telemetry/controls/events/fixture_finished.rb +0 -29
  43. data/lib/test_bench/telemetry/controls/events/fixture_started.rb +0 -26
  44. data/lib/test_bench/telemetry/controls/events/run_aborted.rb +0 -29
  45. data/lib/test_bench/telemetry/controls/events/run_finished.rb +0 -32
  46. data/lib/test_bench/telemetry/controls/events/run_started.rb +0 -29
  47. data/lib/test_bench/telemetry/controls/events/test_finished.rb +0 -34
  48. data/lib/test_bench/telemetry/controls/events/test_skipped.rb +0 -31
  49. data/lib/test_bench/telemetry/controls/events/test_started.rb +0 -31
  50. data/lib/test_bench/telemetry/controls/events.rb +0 -27
  51. data/lib/test_bench/telemetry/controls/fixture_name.rb +0 -19
  52. data/lib/test_bench/telemetry/controls/line_number.rb +0 -10
  53. data/lib/test_bench/telemetry/controls/path.rb +0 -87
  54. data/lib/test_bench/telemetry/controls/result.rb +0 -12
  55. data/lib/test_bench/telemetry/controls/title.rb +0 -43
  56. data/lib/test_bench/telemetry/event/events.rb +0 -35
  57. data/lib/test_bench/telemetry/event/type.rb +0 -27
  58. data/lib/test_bench/telemetry/sink/capture/path.rb +0 -69
  59. data/lib/test_bench/telemetry/sink/capture/record/generate.rb +0 -49
  60. data/lib/test_bench/telemetry/sink/capture/record.rb +0 -73
  61. data/lib/test_bench/telemetry/sink/capture.rb +0 -55
@@ -1,19 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module FixtureName
5
- def self.example(suffix=nil)
6
- suffix = "_#{suffix}" if not suffix.nil?
7
-
8
- "SomeProject::Fixtures::SomeFixture#{suffix}"
9
- end
10
-
11
- def self.random
12
- suffix = example(Random.string)
13
-
14
- example(suffix)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,10 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module LineNumber
5
- def self.example = 11
6
- def self.random = Random.integer
7
- end
8
- end
9
- end
10
- end
@@ -1,87 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Path
5
- def self.example(suffix=nil)
6
- suffix = "_#{suffix}" if not suffix.nil?
7
-
8
- "path/to/some_file#{suffix}.rb"
9
- end
10
-
11
- module Random
12
- def random = example(Controls::Random.string)
13
- end
14
- extend Random
15
-
16
- module Temporary
17
- def self.example(suffix=nil, basename: nil, extension: nil)
18
- basename ||= self.basename
19
- extension ||= self.extension
20
-
21
- suffix = "-#{suffix}" if not suffix.nil?
22
-
23
- filename = "#{basename}#{suffix}#{extension}"
24
-
25
- File.join('tmp', filename)
26
- end
27
-
28
- def self.random(basename: nil, extension: nil)
29
- suffix = Controls::Random.string
30
-
31
- example(suffix, basename:, extension:)
32
- end
33
-
34
- def self.basename
35
- 'some-file'
36
- end
37
-
38
- def self.extension
39
- '.some-ext'
40
- end
41
- end
42
-
43
- module Absolute
44
- extend Random
45
-
46
- def self.example(suffix=nil)
47
- path = Path.example(suffix)
48
-
49
- File.join('/', path)
50
- end
51
-
52
- module Local
53
- extend Random
54
-
55
- def self.example(suffix=nil)
56
- path = Path.example(suffix)
57
-
58
- File.join(current_dir, path)
59
- end
60
-
61
- def self.current_dir
62
- File.join('/home', 'some-user', 'some-working-dir')
63
- end
64
-
65
- module Gem
66
- extend Random
67
-
68
- def self.example(path=nil)
69
- path ||= Path.example
70
-
71
- path = File.join(gems_path, path)
72
-
73
- Local.example(path)
74
- end
75
-
76
- def self.gems_path
77
- ruby_version = RbConfig::CONFIG['ruby_version']
78
-
79
- "gems/ruby/#{ruby_version}/gems"
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,12 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Result
5
- def self.example = pass
6
- def self.random = Random.boolean
7
- def self.pass = true
8
- def self.failure = false
9
- end
10
- end
11
- end
12
- end
@@ -1,43 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Title
5
- def self.example(suffix=nil, text: nil)
6
- suffix = " #{suffix}" if not suffix.nil?
7
- text ||= self.text
8
-
9
- "#{text}#{suffix}"
10
- end
11
-
12
- def self.text = "Some Title"
13
-
14
- module Random
15
- def random = example(Controls::Random.string)
16
- end
17
- extend Random
18
-
19
- module Test
20
- extend Random
21
-
22
- def self.example(suffix=nil)
23
- Title.example(suffix, text: example_text)
24
- end
25
- def self.example_text = "Some test"
26
-
27
- def self.other_example = "Some other test"
28
- end
29
-
30
- module Context
31
- extend Random
32
-
33
- def self.example(suffix=nil)
34
- Title.example(suffix, text: example_text)
35
- end
36
- def self.example_text = "Some Context"
37
-
38
- def self.other_example = "Some Other Context"
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,35 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Event
4
- module Events
5
- Asserted = Event.define(:result, :path, :line_number)
6
-
7
- ErrorRaised = Event.define(:error_text)
8
-
9
- TestStarted = Event.define(:title)
10
- TestFinished = Event.define(:result, :title)
11
- TestSkipped = Event.define(:title)
12
-
13
- ContextEntered = Event.define(:title)
14
- ContextExited = Event.define(:result, :title)
15
- ContextSkipped = Event.define(:title)
16
-
17
- Commented = Event.define(:comment)
18
-
19
- DetailIncreased = Event.define
20
- DetailDecreased = Event.define
21
-
22
- RunStarted = Event.define(:random_seed, :executors)
23
- RunFinished = Event.define(:result, :random_seed, :executors)
24
- RunAborted = Event.define(:random_seed, :executors)
25
-
26
- FileEntered = Event.define(:path, :executor)
27
- FileExited = Event.define(:result, :path, :executor)
28
-
29
- FixtureStarted = Event.define(:name)
30
- FixtureFinished = Event.define(:result, :name)
31
- end
32
- include Events
33
- end
34
- end
35
- end
@@ -1,27 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Event
4
- module Type
5
- def self.get(class_name)
6
- *, constant_name = class_name.split('::')
7
-
8
- constant_name.to_sym
9
- end
10
-
11
- def self.method_cased(event_type)
12
- pascal_cased = event_type.to_s
13
-
14
- underscore_cased = pascal_cased.gsub(%r{(?:\A|[a-z])[A-Z]+}) do |match_text|
15
- if ('a'..'z').include?(match_text[0])
16
- match_text.insert(1, '_')
17
- end
18
- match_text.downcase!
19
- match_text
20
- end
21
-
22
- underscore_cased.to_sym
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,69 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Sink
4
- class Capture
5
- class Path
6
- def segments
7
- @segments ||= []
8
- end
9
- attr_writer :segments
10
-
11
- def match?(*segments, segment)
12
- if not segment == self.segments.last
13
- return false
14
- end
15
-
16
- segment_iterator = self.segments.to_enum
17
-
18
- control_segments = [*segments, segment]
19
-
20
- control_segments.all? do |control_segment|
21
- begin
22
- next_segment = segment_iterator.next
23
- end until next_segment == control_segment
24
- true
25
-
26
- rescue StopIteration
27
- false
28
- end
29
- end
30
-
31
- def push_segment(segment)
32
- segments << segment
33
- end
34
- alias :push :push_segment
35
- alias :<< :push
36
-
37
- def pop_segment(compare_segment=nil)
38
- segments.pop
39
- end
40
- alias :pop :pop_segment
41
-
42
- def copy(receiver)
43
- path = self.class.new
44
-
45
- segments.each do |segment|
46
- path << segment
47
- end
48
-
49
- receiver.path = path
50
- path
51
- end
52
-
53
- def copy?(compare_path)
54
- eql?(compare_path) && !equal?(compare_path)
55
- end
56
-
57
- def eql?(compare)
58
- if compare.is_a?(self.class)
59
- segments == compare.segments
60
- else
61
- false
62
- end
63
- end
64
- alias :== :eql?
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,49 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Sink
4
- class Capture
5
- class Record
6
- class Generate
7
- include Event::Events
8
-
9
- def path
10
- @path ||= Path.new
11
- end
12
- attr_writer :path
13
-
14
- def detail_level
15
- @detail_level ||= 0
16
- end
17
- attr_writer :detail_level
18
-
19
- def call(event)
20
- case event
21
- when TestStarted, ContextEntered
22
- path.push(event.title)
23
- when TestFinished, ContextExited
24
- path.pop(event.title)
25
- when DetailIncreased
26
- self.detail_level += 1
27
- when DetailDecreased
28
- self.detail_level -= 1
29
- end
30
-
31
- record = Record.build(event, path, detail_level)
32
-
33
- case event
34
- when TestFinished, ContextExited
35
- title = event.title
36
- record.path.push(title)
37
- when Commented
38
- comment = event.comment
39
- record.path.push(comment)
40
- end
41
-
42
- record
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,73 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Sink
4
- class Capture
5
- Record = Struct.new(:event, :path, :detail_level) do
6
- def self.build(event, path, detail_level)
7
- instance = new
8
- instance.event = event
9
- instance.detail_level = detail_level
10
-
11
- path.copy(instance)
12
-
13
- instance
14
- end
15
-
16
- def match?(*path_segments, detail: nil, detail_level: nil, &block)
17
- if not path_segments?(*path_segments)
18
- false
19
- elsif not detail?(detail)
20
- false
21
- elsif not detail_level?(detail_level)
22
- false
23
- elsif not block?(&block)
24
- false
25
- else
26
- true
27
- end
28
- end
29
-
30
- def detail_match?(match)
31
- if match.nil?
32
- true
33
- elsif match
34
- detail_level > 0
35
- else
36
- detail_level.zero?
37
- end
38
- end
39
- alias :detail? :detail_match?
40
-
41
- def detail_level_match?(detail_level)
42
- if detail_level.nil?
43
- true
44
- else
45
- detail_level == self.detail_level
46
- end
47
- end
48
- alias :detail_level? :detail_level_match?
49
-
50
- def path_segments_match?(*segments)
51
- if segments.empty?
52
- true
53
- else
54
- path.match?(*segments)
55
- end
56
- end
57
- alias :path_segments? :path_segments_match?
58
-
59
- def block_match?(&block)
60
- if block.nil?
61
- true
62
- elsif block.(event.event_type, *event.values)
63
- true
64
- else
65
- false
66
- end
67
- end
68
- alias :block? :block_match?
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,55 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Sink
4
- class Capture
5
- include Sink
6
-
7
- MatchError = Class.new(RuntimeError)
8
-
9
- def raw_records
10
- @raw_records ||= []
11
- end
12
-
13
- def generate_record
14
- @generate_record ||= Record::Generate.new
15
- end
16
- attr_writer :generate_record
17
-
18
- def call(event)
19
- record = generate_record.(event)
20
-
21
- raw_records.push(record)
22
-
23
- record
24
- end
25
-
26
- def one_record?(...)
27
- record = one_record(...)
28
-
29
- !record.nil?
30
- end
31
-
32
- def one_record(...)
33
- records = records(...)
34
-
35
- if records.count > 1
36
- raise MatchError, "More than one record matches (Matching Records: #{records.count})"
37
- end
38
-
39
- records.first
40
- end
41
-
42
- def any_record?(...)
43
- records(...).any?
44
- end
45
- alias :record? :any_record?
46
-
47
- def records(...)
48
- raw_records.select do |record|
49
- record.match?(...)
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end