aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/test_unit
diff options
context:
space:
mode:
authorArthur Neves <arthurnn@gmail.com>2015-01-23 16:05:31 -0500
committerYves Senn <yves.senn@gmail.com>2015-03-18 09:52:16 +0100
commitff0a7611cf912ce7ae32966cc42da5dbdff3a0bc (patch)
treee24e2b7786c251e89a15bedc5d918a2ca123fa9f /railties/lib/rails/test_unit
parentc5532e06d9ef8b75f7443019aa1f34a3b697efdc (diff)
downloadrails-ff0a7611cf912ce7ae32966cc42da5dbdff3a0bc.tar.gz
rails-ff0a7611cf912ce7ae32966cc42da5dbdff3a0bc.tar.bz2
rails-ff0a7611cf912ce7ae32966cc42da5dbdff3a0bc.zip
Add test run by line, and report error by line
Diffstat (limited to 'railties/lib/rails/test_unit')
-rw-r--r--railties/lib/rails/test_unit/reporter.rb22
-rw-r--r--railties/lib/rails/test_unit/runner.rb27
2 files changed, 49 insertions, 0 deletions
diff --git a/railties/lib/rails/test_unit/reporter.rb b/railties/lib/rails/test_unit/reporter.rb
new file mode 100644
index 0000000000..bd4d455589
--- /dev/null
+++ b/railties/lib/rails/test_unit/reporter.rb
@@ -0,0 +1,22 @@
+require "minitest"
+
+module Rails
+ class TestUnitReporter < Minitest::StatisticsReporter
+ def report
+ io.puts
+ io.puts "Failed test:"
+ io.puts
+ io.puts aggregated_results
+ end
+
+ def aggregated_results # :nodoc:
+ filtered_results = results.dup
+ filtered_results.reject!(&:skipped?) unless options[:verbose]
+ filtered_results.map do |result|
+ result.failures.map { |failure|
+ "bin/rails test #{failure.location}\n"
+ }.join "\n"
+ end.join
+ end
+ end
+end
diff --git a/railties/lib/rails/test_unit/runner.rb b/railties/lib/rails/test_unit/runner.rb
index 25f30f6b80..6f9fdab68a 100644
--- a/railties/lib/rails/test_unit/runner.rb
+++ b/railties/lib/rails/test_unit/runner.rb
@@ -1,6 +1,7 @@
require "ostruct"
require "optparse"
require "rake/file_list"
+require "method_source"
module Rails
class TestRunner
@@ -53,6 +54,14 @@ module Rails
run_tests
end
+ def find_method
+ return if @line.blank?
+ method = test_methods.find do |test_method, start_line, end_line|
+ (start_line..end_line).include?(@line.to_i)
+ end
+ method.first if method
+ end
+
private
def run_tests
test_files.to_a.each do |file|
@@ -66,6 +75,10 @@ module Rails
def test_files
if @options[:pattern]
pattern = NAMED_PATTERNS[@options[:pattern]]
+ unless pattern
+ filename, @line = @options[:pattern].split(':')
+ return [filename] if filename
+ end
else
pattern = "test/**/*_test.rb"
end
@@ -79,5 +92,19 @@ module Rails
def filter_tests_by_name
ARGV.push("-n", @options[:name])
end
+
+ def test_methods
+ methods_map = []
+ suites = Minitest::Runnable.runnables.shuffle
+ suites.each do |suite_class|
+ suite_class.runnable_methods.each do |test_method|
+ method = suite_class.instance_method(test_method)
+ start_line = method.source_location.last
+ end_line = method.source.split("\n").size + start_line - 1
+ methods_map << [test_method, start_line, end_line]
+ end
+ end
+ methods_map
+ end
end
end