[Groonga-commit] groonga/grntest [master] Create TestSuiteRunner

Back to archive index

null+****@clear***** null+****@clear*****
2012年 7月 13日 (金) 22:36:01 JST


Kouhei Sutou	2012-07-13 22:36:01 +0900 (Fri, 13 Jul 2012)

  New Revision: 6317f9ef78c8f494ebfc73b5e022a3f4f6e3ab2c
  https://github.com/groonga/grntest/commit/6317f9ef78c8f494ebfc73b5e022a3f4f6e3ab2c

  Log:
    Create TestSuiteRunner

  Modified files:
    lib/groonga/tester.rb

  Modified: lib/groonga/tester.rb (+53 -41)
===================================================================
--- lib/groonga/tester.rb    2012-06-15 12:16:49 +0900 (dcb5644)
+++ lib/groonga/tester.rb    2012-07-13 22:36:01 +0900 (8883653)
@@ -149,23 +149,8 @@ module Groonga
       succeeded = true
       return succeeded if targets.empty?
 
-      reporter = Reporter.new(self)
-      reporter.start
-      catch do |tag|
-        targets.each do |target|
-          target_path = Pathname(target)
-          next unless target_path.exist?
-          if target_path.directory?
-            unless run_tests_in_directory(target_path, reporter, tag)
-              succeeded = false
-            end
-          else
-            succeeded = false unless run_test(target_path, reporter, tag)
-          end
-        end
-      end
-      reporter.finish
-      succeeded
+      test_suites = load_tests(*targets)
+      run_test_suites(test_suites)
     end
 
     def keep_database?
@@ -173,34 +158,34 @@ module Groonga
     end
 
     private
-    def collect_test_files(test_directory)
-      test_files = Pathname.glob(test_directory + "**" + "*.test")
-      grouped_test_files = test_files.group_by do |test_file|
-        test_file.dirname.relative_path_from(test_directory)
-      end
-      grouped_test_files.sort_by do |directory, _|
-        directory.to_s
+    def load_tests(*targets)
+      default_group_name = "."
+      tests = {default_group_name => []}
+      targets.each do |target|
+        target_path = Pathname(target)
+        next unless target_path.exist?
+        if target_path.directory?
+          load_tests_under_directory(tests, target_path)
+        else
+          tests[default_group_name] << target_path
+        end
       end
+      tests
     end
 
-    def run_tests_in_directory(test_directory, reporter, tag)
-      succeeded = true
-      collect_test_files(test_directory).each do |directory, test_files|
-        suite_name = directory.to_s
-        reporter.start_suite(suite_name)
-        test_files.sort.each do |test_file|
-          succeeded = false unless run_test(test_file, reporter, tag)
-        end
-        reporter.finish_suite(suite_name)
+    def load_tests_under_directory(tests, test_directory_path)
+      test_file_paths = Pathname.glob(test_directory_path + "**" + "*.test")
+      test_file_paths.each do |test_file_path|
+        directory_path = test_file_path.dirname
+        directory = directory_path.relative_path_from(test_directory_path).to_s
+        tests[directory] ||= []
+        tests[directory] << test_file_path
       end
-      succeeded
     end
 
-    def run_test(test_script_path, reporter, tag)
-      runner = Runner.new(self, test_script_path)
-      succeeded = runner.run(reporter)
-      throw(tag) if runner.interrupted?
-      succeeded
+    def run_test_suites(test_suites)
+      runner = SequentialTestSuitesRunner.new(self)
+      runner.run(test_suites)
     end
 
     def detect_suitable_diff
@@ -226,7 +211,34 @@ module Groonga
       false
     end
 
-    class Runner
+    class TestSuitesRunner
+      def initialize(tester)
+        @tester = tester
+      end
+    end
+
+    class SequentialTestSuitesRunner < TestSuitesRunner
+      def run(test_suites)
+        succeeded = true
+        reporter = StreamReporter.new(@tester)
+        reporter.start
+        catch do |tag|
+          test_suites.each do |suite_name, test_script_paths|
+            reporter.start_suite(suite_name)
+            test_script_paths.each do |test_script_path|
+              runner = TestRunner.new(@tester, test_script_path)
+              succeeded = false unless runner.run(reporter)
+              throw(tag) if runner.interrupted?
+            end
+            reporter.finish_suite(suite_name)
+          end
+        end
+        reporter.finish
+        succeeded
+      end
+    end
+
+    class TestRunner
       MAX_N_COLUMNS = 79
 
       def initialize(tester, test_script_path)
@@ -968,7 +980,7 @@ EOF
       end
     end
 
-    class Reporter
+    class StreamReporter
       def initialize(tester)
         @tester = tester
         @term_width = guess_term_width
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
下载 



Groonga-commit メーリングリストの案内
Back to archive index