diff options
Diffstat (limited to 'tooling/lib/tooling/test_file_finder.rb')
-rw-r--r-- | tooling/lib/tooling/test_file_finder.rb | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/tooling/lib/tooling/test_file_finder.rb b/tooling/lib/tooling/test_file_finder.rb index 4cf7ad35922..cf5de190c4a 100644 --- a/tooling/lib/tooling/test_file_finder.rb +++ b/tooling/lib/tooling/test_file_finder.rb @@ -12,7 +12,7 @@ module Tooling end def test_files - impacted_tests = ee_impact | non_ee_impact + impacted_tests = ee_impact | non_ee_impact | either_impact impacted_tests.impact(@file) end @@ -23,20 +23,22 @@ module Tooling class ImpactedTestFile attr_reader :pattern_matchers - def initialize + def initialize(prefix: nil) @pattern_matchers = {} + @prefix = prefix yield self if block_given? end def associate(pattern, &block) - @pattern_matchers[pattern] = block + @pattern_matchers[%r{^#{@prefix}#{pattern}}] = block end def impact(file) @pattern_matchers.each_with_object(Set.new) do |(pattern, block), result| if (match = pattern.match(file)) - result << block.call(match) + test_files = block.call(match) + result.merge(Array(test_files)) end end.to_a end @@ -54,24 +56,38 @@ module Tooling end def ee_impact - ImpactedTestFile.new do |impact| + ImpactedTestFile.new(prefix: EE_PREFIX) do |impact| unless foss_test_only - impact.associate(%r{^#{EE_PREFIX}app/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/#{match[1]}_spec.rb" } - impact.associate(%r{^#{EE_PREFIX}app/(.*/)ee/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/#{match[1]}#{match[2]}_spec.rb" } - impact.associate(%r{^#{EE_PREFIX}lib/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/lib/#{match[1]}_spec.rb" } - impact.associate(%r{^#{EE_PREFIX}spec/(.+)_spec.rb$}) { |match| match[0] } + impact.associate(%r{app/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/#{match[1]}_spec.rb" } + impact.associate(%r{app/(.*/)ee/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/#{match[1]}#{match[2]}_spec.rb" } + impact.associate(%r{lib/(.+)\.rb$}) { |match| "#{EE_PREFIX}spec/lib/#{match[1]}_spec.rb" } end - impact.associate(%r{^#{EE_PREFIX}(?!spec)(.*/)ee/(.+)\.rb$}) { |match| "spec/#{match[1]}#{match[2]}_spec.rb" } - impact.associate(%r{^#{EE_PREFIX}spec/(.*/)ee/(.+)\.rb$}) { |match| "spec/#{match[1]}#{match[2]}.rb" } + impact.associate(%r{(?!spec)(.*/)ee/(.+)\.rb$}) { |match| "spec/#{match[1]}#{match[2]}_spec.rb" } + impact.associate(%r{spec/(.*/)ee/(.+)\.rb$}) { |match| "spec/#{match[1]}#{match[2]}.rb" } end end def non_ee_impact ImpactedTestFile.new do |impact| - impact.associate(%r{^app/(.+)\.rb$}) { |match| "spec/#{match[1]}_spec.rb" } - impact.associate(%r{^(tooling/)?lib/(.+)\.rb$}) { |match| "spec/#{match[1]}lib/#{match[2]}_spec.rb" } - impact.associate(%r{^spec/(.+)_spec.rb$}) { |match| match[0] } + impact.associate(%r{app/(.+)\.rb$}) { |match| "spec/#{match[1]}_spec.rb" } + impact.associate(%r{(tooling/)?lib/(.+)\.rb$}) { |match| "spec/#{match[1]}lib/#{match[2]}_spec.rb" } + impact.associate(%r{config/initializers/(.+)\.rb$}) { |match| "spec/initializers/#{match[1]}_spec.rb" } + impact.associate('db/structure.sql') { 'spec/db/schema_spec.rb' } + impact.associate(%r{db/(?:post_)?migrate/([0-9]+)_(.+)\.rb$}) do |match| + [ + "spec/migrations/#{match[2]}_spec.rb", + "spec/migrations/#{match[1]}_#{match[2]}_spec.rb" + ] + end + end + end + + def either_impact + ImpactedTestFile.new(prefix: %r{^(?<prefix>#{EE_PREFIX})?}) do |impact| + impact.associate(%r{app/views/(?<view>.+)\.haml$}) { |match| "#{match[:prefix]}spec/views/#{match[:view]}.haml_spec.rb" } + impact.associate(%r{spec/(.+)_spec\.rb$}) { |match| match[0] } + impact.associate(%r{spec/factories/.+\.rb$}) { 'spec/factories_spec.rb' } end end end |