Fix mixing line filters with Minitest's -n filter.

Previous commit accidentally broke mixing line filters with string -n filter.

Fix by checking if it is a string and returning it.

We also need to ensure the -n filter carry forward into any other composite filters.

Fix by letting the named filter be extractable, so we'll keep this for the next runnable's
run.
This commit is contained in:
Kasper Timm Hansen 2016-02-04 23:06:33 +01:00
parent d666a5a5cf
commit 84b72a812f
2 changed files with 36 additions and 4 deletions

@ -13,9 +13,12 @@ def run(reporter, options = {})
end
class CompositeFilter # :nodoc:
attr_reader :named_filter
def initialize(runnable, filter, patterns)
@runnable = runnable
@filters = [ derive_regexp(filter), *derive_line_filters(patterns) ].compact
@named_filter = derive_named_filter(filter)
@filters = [ @named_filter, *derive_line_filters(patterns) ].compact
end
# Minitest uses === to find matching filters.
@ -24,9 +27,14 @@ def ===(method)
end
private
def derive_regexp(filter)
# Regexp filtering copied from Minitest.
Regexp.new $1 if filter =~ %r%/(.*)/%
def derive_named_filter(filter)
if filter.respond_to?(:named_filter)
filter.named_filter
elsif filter =~ %r%/(.*)/% # Regexp filtering copied from Minitest.
Regexp.new $1
elsif filter.is_a?(String)
filter
end
end
def derive_line_filters(patterns)

@ -406,6 +406,30 @@ class SecondPostTest < ActiveSupport::TestCase
end
end
def test_line_filter_with_minitest_string_filter
app_file 'test/models/post_test.rb', <<-RUBY
require 'test_helper'
class PostTest < ActiveSupport::TestCase
test 'by line' do
puts 'by line'
assert true
end
test 'by name' do
puts 'by name'
assert true
end
end
RUBY
run_test_command('test/models/post_test.rb:4 -n test_by_name').tap do |output|
assert_match 'by line', output
assert_match 'by name', output
assert_match '2 runs, 2 assertions', output
end
end
def test_shows_filtered_backtrace_by_default
create_backtrace_test