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:
parent
d666a5a5cf
commit
84b72a812f
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user