diff options
author | Kasper Timm Hansen <kaspth@gmail.com> | 2016-01-10 18:25:54 +0100 |
---|---|---|
committer | Kasper Timm Hansen <kaspth@gmail.com> | 2016-01-10 18:25:54 +0100 |
commit | efa445c7b5fe17b4f1a2aeb6ad5dcac464dbe9d6 (patch) | |
tree | b67b589f6e9fcdcb9663f8789e664cf052777f7c /railties | |
parent | 56c93bba2fe79df0952c2e587dbbc3c2dd332534 (diff) | |
parent | 78b5a01252bccdb326f94e6fd293f1454596c1f8 (diff) | |
download | rails-efa445c7b5fe17b4f1a2aeb6ad5dcac464dbe9d6.tar.gz rails-efa445c7b5fe17b4f1a2aeb6ad5dcac464dbe9d6.tar.bz2 rails-efa445c7b5fe17b4f1a2aeb6ad5dcac464dbe9d6.zip |
Merge pull request #22833 from sivagollapalli/test_runner_with_multiple_lines
Running tests with multiple line numbers
Diffstat (limited to 'railties')
-rw-r--r-- | railties/lib/rails/test_unit/line_filtering.rb | 11 | ||||
-rw-r--r-- | railties/lib/rails/test_unit/test_requirer.rb | 2 | ||||
-rw-r--r-- | railties/test/application/test_runner_test.rb | 78 |
3 files changed, 87 insertions, 4 deletions
diff --git a/railties/lib/rails/test_unit/line_filtering.rb b/railties/lib/rails/test_unit/line_filtering.rb index fb5ff231e4..dab4d3631d 100644 --- a/railties/lib/rails/test_unit/line_filtering.rb +++ b/railties/lib/rails/test_unit/line_filtering.rb @@ -30,9 +30,14 @@ module Rails end def derive_line_filters(patterns) - patterns.map do |file_and_line| - file, line = file_and_line.split(':') - Filter.new(@runnable, file, line) if file + patterns.flat_map do |file_and_line| + file, *lines = file_and_line.split(':') + + if lines.empty? + Filter.new(@runnable, file, nil) if file + else + lines.map { |line| Filter.new(@runnable, file, line) } + end end end end diff --git a/railties/lib/rails/test_unit/test_requirer.rb b/railties/lib/rails/test_unit/test_requirer.rb index 83d2c55ffd..8b9933bed4 100644 --- a/railties/lib/rails/test_unit/test_requirer.rb +++ b/railties/lib/rails/test_unit/test_requirer.rb @@ -15,7 +15,7 @@ module Rails private def expand_patterns(patterns) patterns.map do |arg| - arg = arg.gsub(/:(\d+)?$/, '') + arg = arg.gsub(/(:\d*)+?$/, '') if Dir.exist?(arg) "#{arg}/**/*_test.rb" else diff --git a/railties/test/application/test_runner_test.rb b/railties/test/application/test_runner_test.rb index 868153762d..ae8a73842c 100644 --- a/railties/test/application/test_runner_test.rb +++ b/railties/test/application/test_runner_test.rb @@ -294,6 +294,84 @@ module ApplicationTests end end + def test_more_than_one_line_filter + app_file 'test/models/post_test.rb', <<-RUBY + require 'test_helper' + + class PostTest < ActiveSupport::TestCase + test "first filter" do + puts 'PostTest:FirstFilter' + assert true + end + + test "second filter" do + puts 'PostTest:SecondFilter' + assert true + end + + test "test line filter does not run this" do + assert true + end + end + RUBY + + run_test_command('test/models/post_test.rb:4:9').tap do |output| + assert_match 'PostTest:FirstFilter', output + assert_match 'PostTest:SecondFilter', output + assert_match '2 runs, 2 assertions', output + end + end + + def test_more_than_one_line_filter_with_multiple_files + app_file 'test/models/account_test.rb', <<-RUBY + require 'test_helper' + + class AccountTest < ActiveSupport::TestCase + test "first filter" do + puts 'AccountTest:FirstFilter' + assert true + end + + test "second filter" do + puts 'AccountTest:SecondFilter' + assert true + end + + test "line filter does not run this" do + assert true + end + end + RUBY + + app_file 'test/models/post_test.rb', <<-RUBY + require 'test_helper' + + class PostTest < ActiveSupport::TestCase + test "first filter" do + puts 'PostTest:FirstFilter' + assert true + end + + test "second filter" do + puts 'PostTest:SecondFilter' + assert true + end + + test "line filter does not run this" do + assert true + end + end + RUBY + + run_test_command('test/models/account_test.rb:4:9 test/models/post_test:4:9').tap do |output| + assert_match 'AccountTest:FirstFilter', output + assert_match 'AccountTest:SecondFilter', output + assert_match 'PostTest:FirstFilter', output + assert_match 'PostTest:SecondFilter', output + assert_match '4 runs, 4 assertions', output + end + end + def test_multiple_line_filters create_test_file :models, 'account' create_test_file :models, 'post' |