From 072cb0bdd75dc4d875c2f54e7d22f68fb205d4a6 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Fri, 13 Jul 2012 23:23:52 +0900 Subject: [PATCH] Add inplace reporter --- lib/groonga/tester.rb | 65 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/lib/groonga/tester.rb b/lib/groonga/tester.rb index 8883653..72f64fc 100755 --- a/lib/groonga/tester.rb +++ b/lib/groonga/tester.rb @@ -107,6 +107,15 @@ def create_option_parser(tester, tag) diff_option_is_specified = true end + available_reporters = [:stream, :inplace] + available_reporter_labels = available_reporters.join(", ") + parser.on("--reporter=REPORTER", available_reporters, + "Report test result by REPORTER", + "[#{available_reporter_labels}]", + "(#{tester.reporter})") do |reporter| + tester.reporter = reporter + end + parser.on("--gdb[=COMMAND]", "Run groonga on gdb and use COMMAND as gdb", "(#{tester.default_gdb})") do |command| @@ -131,7 +140,7 @@ def create_option_parser(tester, tag) attr_accessor :groonga, :groonga_httpd, :groonga_suggest_create_dataset attr_accessor :protocol, :testee - attr_accessor :base_directory, :diff, :diff_options + attr_accessor :base_directory, :diff, :diff_options, :reporter attr_accessor :gdb, :default_gdb attr_writer :keep_database def initialize @@ -141,6 +150,7 @@ def initialize @protocol = :gqtp @testee = "groonga" @base_directory = "." + @reporter = :stream detect_suitable_diff initialize_debuggers end @@ -215,12 +225,22 @@ class TestSuitesRunner def initialize(tester) @tester = tester end + + private + def create_reporter + case @tester.reporter + when :stream + StreamReporter.new(@tester) + when :inplace + InplaceReporter.new(@tester) + end + end end class SequentialTestSuitesRunner < TestSuitesRunner def run(test_suites) succeeded = true - reporter = StreamReporter.new(@tester) + reporter = create_reporter reporter.start catch do |tag| test_suites.each do |suite_name, test_script_paths| @@ -1008,11 +1028,13 @@ def start_test(test_name) def pass_test report_test_result("pass") + clear_line @n_passed_tests += 1 end def fail_test(expected, actual) report_test_result("fail") + puts puts("=" * @term_width) report_diff(expected, actual) puts("=" * @term_width) @@ -1021,6 +1043,7 @@ def fail_test(expected, actual) def no_check_test(result) report_test_result("not checked") + puts puts(result) @n_not_checked_tests += 1 end @@ -1050,17 +1073,26 @@ def finish def print(message) @current_column += message.to_s.size @output.print(message) + @output.flush end def puts(*messages) - @current_column = 0 + reset_current_column @output.puts(*messages) end + def reset_current_column + @current_column = 0 + end + + def clear_line + puts + end + def report_test_result(label) message = " [#{label}]" message = message.rjust(@term_width - @current_column) if @term_width > 0 - puts(message) + print(message) end def report_diff(expected, actual) @@ -1087,5 +1119,30 @@ def guess_term_width 0 end end + + class InplaceReporter < StreamReporter + def finish_suite(suite_name) + print("\e[1A" * n_using_lines) + clear_line + end + + def finish + n_using_lines.times do + puts + end + puts + super + end + + private + def clear_line + print("\r") + reset_current_column + end + + def n_using_lines + 2 + end + end end end