flakey_spec_catcher 0.10.0 → 0.11.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9894969be42fdb7dfafa961942ce16b1313ca3cffdc746d9613ebe1398d39069
4
- data.tar.gz: 75238a79f25ddb8cec6fd60064e9f06d5f5651b8bb3c27e423f317f653f65774
3
+ metadata.gz: 1be370079a94e8f578e03be6e8683cd76ff8d1f5656422427c8ca3920856b38c
4
+ data.tar.gz: 6dddff4adf5e7f452a366bff7b67a50e8e4a04e64a9165c80e9318235afcae33
5
5
  SHA512:
6
- metadata.gz: d3698a10fd2c5d4ae75f3fe0250d7578a82906eb6ad478c759756911501b8f53125a63f1ced325e51c6115a9f76c7ac2264ae28a42c8b65273376186e8e7aa34
7
- data.tar.gz: 440e5ef180775556f3292548330cf9572db13d82394921fbbca6053b37ed4c088aa5c37b9dcb06ab2fb4049879c7fe2a093a60cf05da649abb950bf01d0af6cf
6
+ metadata.gz: b49520ad8fe8a9115ae04bf90c93159694c0bcbbae087acaa9953aac26927b61efb68e3531d9097ea86b5b60d8bf6f84df685baf6798c95bcd0f5e560c752af5
7
+ data.tar.gz: 927b24f3283dfdd8575c3210a560c21a63f315bc98ada713390b15ac1d3dea0773534d761bf51ca5216eaee03567f7602e50615dc85fdab52620ab78ea456070
@@ -8,7 +8,7 @@ module FlakeySpecCatcher
8
8
  # A ChangeCapsule object will represent the changes made to a block of code. It
9
9
  # accomplishes this using ChangeContext and ChangeSummary objects.
10
10
  class ChangeCapsule
11
- attr_reader :file_name, :change_summary, :change_contexts
11
+ attr_reader :file_name, :change_summary, :change_contexts, :spec_tree
12
12
  SCOPE_SPECIFIERS = %w[it context describe scenario].freeze
13
13
  SHARED_EXAMPLES = %w[include_examples it_behaves_like it_should_behave_like matching].freeze
14
14
 
@@ -16,6 +16,7 @@ module FlakeySpecCatcher
16
16
  @file_name = file_name
17
17
  @change_summary = change_summary
18
18
  @change_contexts = []
19
+ @spec_tree = {}
19
20
  handle_initial_change_contexts(change_contexts)
20
21
  end
21
22
 
@@ -112,6 +113,20 @@ module FlakeySpecCatcher
112
113
 
113
114
  change_context_stack.push(change_context) unless
114
115
  change_context_stack.any? { |c| c == change_context }
116
+
117
+ build_spec_tree(change_context_stack)
118
+ end
119
+
120
+ def build_spec_tree(change_contexts)
121
+ return unless change_contexts.count > 1
122
+
123
+ current_scope = change_contexts[-1].rerun_info
124
+ parent_scope = change_contexts[-2].rerun_info
125
+ @spec_tree[parent_scope] = if @spec_tree[parent_scope]
126
+ @spec_tree[parent_scope] << current_scope
127
+ else
128
+ [current_scope]
129
+ end
115
130
  end
116
131
  end
117
132
  end
@@ -9,6 +9,7 @@ module FlakeySpecCatcher
9
9
  class CliOverride
10
10
  attr_reader :rerun_patterns, :rerun_usage, :repeat_factor, :enable_runs, :excluded_tags, :use_parent, :dry_run
11
11
  attr_reader :output_file, :split_nodes, :split_index, :verbose, :test_options, :break_on_first_failure
12
+ attr_reader :list_child_specs
12
13
 
13
14
  def initialize
14
15
  @dry_run = false
@@ -60,6 +61,10 @@ module FlakeySpecCatcher
60
61
  @break_on_first_failure = break_on_first_failure
61
62
  end
62
63
 
64
+ opts.on('--list-child-specs', 'List Child Specs (Verbose Spec Listing') do |list_child_specs|
65
+ @list_child_specs = list_child_specs
66
+ end
67
+
63
68
  opts.on('-e', '--excluded-tags=EXCLUDED_TAGS',
64
69
  'Specify tags to exclude in a comma separated list') do |tags|
65
70
  @excluded_tags = parse_tags(tags)
@@ -39,6 +39,7 @@ module FlakeySpecCatcher
39
39
  else
40
40
  all_non_example_groups - identify_tag_excluded_reruns
41
41
  end
42
+ tests = transform_parent_specs(tests).flatten if @user_config.list_child_specs
42
43
  filter_reruns_by_ignore_files(tests)
43
44
  end
44
45
 
@@ -171,5 +172,23 @@ module FlakeySpecCatcher
171
172
  @rerun_capsules.push(FlakeySpecCatcher::RerunCapsule.new(testcase: testcase, usage: usage))
172
173
  end
173
174
  end
175
+
176
+ def transform_parent_specs(tests)
177
+ transformed_tests = []
178
+ tests.each do |test|
179
+ capsule = @git_controller.capsule_manager.change_capsules.find { |c| c.file_name == test.split(':')[0] }
180
+ spec_tree = capsule.spec_tree
181
+ # If test is a key in the spec_tree, it's an example group, so we queue up its descendant examples
182
+ if spec_tree[test]
183
+ spec_tree[test].each do |child|
184
+ transformed_tests << transform_parent_specs([child]).flatten
185
+ end
186
+ # Else test is just an example
187
+ else
188
+ transformed_tests << test
189
+ end
190
+ end
191
+ transformed_tests
192
+ end
174
193
  end
175
194
  end
@@ -12,11 +12,11 @@ module FlakeySpecCatcher
12
12
  attr_reader :manual_rerun_patterns, :manual_rerun_usage
13
13
  attr_reader :enable_runs, :output_file, :use_parent, :dry_run
14
14
  attr_reader :split_nodes, :split_index, :verbose, :test_options
15
- attr_reader :break_on_first_failure
15
+ attr_reader :break_on_first_failure, :list_child_specs
16
16
 
17
17
  USER_CONFIG_ENV_VARS = %w[FSC_REPEAT_FACTOR FSC_IGNORE_FILES FSC_IGNORE_BRANCHES
18
18
  FSC_SILENT_MODE FSC_RERUN_FILE_ONLY FSC_USAGE_PATTERNS
19
- FSC_EXCLUDED_TAGS FSC_OUTPUT_FILE].freeze
19
+ FSC_EXCLUDED_TAGS FSC_OUTPUT_FILE FSC_LIST_CHILD_SPECS].freeze
20
20
 
21
21
  def initialize(cli_override: CliOverride.new)
22
22
  apply_env_var_settings
@@ -33,6 +33,7 @@ module FlakeySpecCatcher
33
33
  @ignore_branches = env_var_string_to_array(ENV['FSC_IGNORE_BRANCHES'])
34
34
  @silent_mode = env_var_string_to_bool(ENV['FSC_SILENT_MODE'])
35
35
  @rerun_file_only = env_var_string_to_bool(ENV['FSC_RERUN_FILE_ONLY'])
36
+ @list_child_specs = env_var_string_to_bool(ENV['FSC_LIST_CHILD_SPECS'])
36
37
  @rspec_usage_patterns = env_var_string_to_pairs(ENV['FSC_USAGE_PATTERNS'])
37
38
  @excluded_tags = env_var_string_to_tags(ENV['FSC_EXCLUDED_TAGS'])
38
39
  @output_file = ENV['FSC_OUTPUT_FILE']
@@ -46,6 +47,7 @@ module FlakeySpecCatcher
46
47
  @use_parent = @cli_override.use_parent
47
48
  @repeat_factor = @cli_override.repeat_factor if @cli_override.repeat_factor.to_i.positive?
48
49
  @break_on_first_failure = @cli_override.break_on_first_failure
50
+ @list_child_specs = @cli_override.list_child_specs unless @cli_override.list_child_specs.nil?
49
51
  @enable_runs = @cli_override.enable_runs
50
52
  @dry_run = @cli_override.dry_run
51
53
  @split_nodes = @cli_override.split_nodes unless @cli_override.split_nodes.nil?
@@ -170,7 +172,7 @@ module FlakeySpecCatcher
170
172
  end
171
173
  end
172
174
 
173
- # rubocop:disable Metrics/CyclomaticComplexity
175
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength
174
176
  def override_user_config(env_var, env_value)
175
177
  case env_var
176
178
  when 'FSC_REPEAT_FACTOR'
@@ -183,6 +185,8 @@ module FlakeySpecCatcher
183
185
  @silent_mode = env_var_string_to_bool(env_value)
184
186
  when 'FSC_RERUN_FILE_ONLY'
185
187
  @rerun_file_only = env_var_string_to_bool(env_value)
188
+ when 'FSC_LIST_CHILD_SPECS'
189
+ @list_child_specs = env_var_string_to_bool(env_value)
186
190
  when 'FSC_USAGE_PATTERNS'
187
191
  @rspec_usage_patterns = env_var_string_to_pairs(env_value)
188
192
  when 'FSC_EXCLUDED_TAGS'
@@ -191,6 +195,6 @@ module FlakeySpecCatcher
191
195
  @output_file = env_value
192
196
  end
193
197
  end
194
- # rubocop:enable Metrics/CyclomaticComplexity
198
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength
195
199
  end
196
200
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FlakeySpecCatcher
4
- VERSION = '0.10.0'
4
+ VERSION = '0.11.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flakey_spec_catcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Watson
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-07-28 00:00:00.000000000 Z
13
+ date: 2021-10-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec