Kouhei Sutou
null+****@clear*****
Mon Aug 12 12:33:23 JST 2013
Kouhei Sutou 2013-08-12 12:33:23 +0900 (Mon, 12 Aug 2013) New Revision: a041cc4fa46e968379543d6311884fe0148a2053 https://github.com/groonga/grntest/commit/a041cc4fa46e968379543d6311884fe0148a2053 Message: Extract test suites runner Added files: lib/grntest/test-suites-runner.rb Modified files: lib/grntest/tester.rb Added: lib/grntest/test-suites-runner.rb (+139 -0) 100644 =================================================================== --- /dev/null +++ lib/grntest/test-suites-runner.rb 2013-08-12 12:33:23 +0900 (ee58a23) @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2013 Kouhei Sutou <kou �� clear-code.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +require "grntest/reporters" +require "grntest/worker" +require "grntest/base-result" + +module Grntest + class TestSuitesResult < BaseResult + attr_accessor :workers + attr_accessor :n_total_tests + def initialize + super + @workers = [] + @n_total_tests = 0 + end + + def pass_ratio + n_target_tests = n_tests - n_not_checked_tests + if n_target_tests.zero? + 0 + else + (n_passed_tests / n_target_tests.to_f) * 100 + end + end + + def n_tests + collect_count(:n_tests) + end + + def n_passed_tests + collect_count(:n_passed_tests) + end + + def n_failed_tests + collect_count(:n_failed_tests) + end + + def n_leaked_tests + collect_count(:n_leaked_tests) + end + + def n_omitted_tests + collect_count(:n_omitted_tests) + end + + def n_not_checked_tests + collect_count(:n_not_checked_tests) + end + + private + def collect_count(item) + counts =****@worke***** do |worker| + worker.result.send(item) + end + counts.inject(&:+) + end + end + + class TestSuitesRunner + def initialize(tester) + @tester = tester + @reporter = create_reporter + @result = TestSuitesResult.new + end + + def run(test_suites) + succeeded = true + + @result.measure do + succeeded = run_test_suites(test_suites) + end + @reporter.on_finish(@result) + + succeeded + end + + private + def run_test_suites(test_suites) + queue = Queue.new + test_suites.each do |suite_name, test_script_paths| + next unles****@teste*****_test_suite?(suite_name) + test_script_paths.each do |test_script_path| + test_name = test_script_path.basename(".*").to_s + next unles****@teste*****_test?(test_name) + queue << [suite_name, test_script_path, test_name] + @result.n_total_tests += 1 + end + end + @tester.n_workers.times do + queue << nil + end + + workers = [] + @tester.n_workers.times do |i| + workers << Worker.new(i, @tester, @result, @reporter) + end + @result.workers = workers + @reporter.on_start(@result) + + succeeded = true + worker_threads = [] + @tester.n_workers.times do |i| + worker = workers[i] + worker_threads << Thread.new do + succeeded = false unless worker.run(queue) + end + end + + begin + worker_threads.each(&:join) + rescue Interrupt + workers.each do |worker| + worker.interrupt + end + end + + succeeded + end + + def create_reporter + Grntest::Reporters.create_repoter(@tester) + end + end +end Modified: lib/grntest/tester.rb (+1 -123) =================================================================== --- lib/grntest/tester.rb 2013-08-12 12:31:42 +0900 (790bc5e) +++ lib/grntest/tester.rb 2013-08-12 12:33:23 +0900 (7035a55) @@ -15,16 +15,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -require "English" require "optparse" require "pathname" require "grntest/version" -require "grntest/error" -require "grntest/reporters" -require "grntest/executors" -require "grntest/worker" -require "grntest/base-result" +require "grntest/test-suites-runner" module Grntest class Tester @@ -366,122 +361,5 @@ module Grntest false end end - - class TestSuitesResult < BaseResult - attr_accessor :workers - attr_accessor :n_total_tests - def initialize - super - @workers = [] - @n_total_tests = 0 - end - - def pass_ratio - n_target_tests = n_tests - n_not_checked_tests - if n_target_tests.zero? - 0 - else - (n_passed_tests / n_target_tests.to_f) * 100 - end - end - - def n_tests - collect_count(:n_tests) - end - - def n_passed_tests - collect_count(:n_passed_tests) - end - - def n_failed_tests - collect_count(:n_failed_tests) - end - - def n_leaked_tests - collect_count(:n_leaked_tests) - end - - def n_omitted_tests - collect_count(:n_omitted_tests) - end - - def n_not_checked_tests - collect_count(:n_not_checked_tests) - end - - private - def collect_count(item) - counts =****@worke***** do |worker| - worker.result.send(item) - end - counts.inject(&:+) - end - end - - class TestSuitesRunner - def initialize(tester) - @tester = tester - @reporter = create_reporter - @result = TestSuitesResult.new - end - - def run(test_suites) - succeeded = true - - @result.measure do - succeeded = run_test_suites(test_suites) - end - @reporter.on_finish(@result) - - succeeded - end - - private - def run_test_suites(test_suites) - queue = Queue.new - test_suites.each do |suite_name, test_script_paths| - next unles****@teste*****_test_suite?(suite_name) - test_script_paths.each do |test_script_path| - test_name = test_script_path.basename(".*").to_s - next unles****@teste*****_test?(test_name) - queue << [suite_name, test_script_path, test_name] - @result.n_total_tests += 1 - end - end - @tester.n_workers.times do - queue << nil - end - - workers = [] - @tester.n_workers.times do |i| - workers << Worker.new(i, @tester, @result, @reporter) - end - @result.workers = workers - @reporter.on_start(@result) - - succeeded = true - worker_threads = [] - @tester.n_workers.times do |i| - worker = workers[i] - worker_threads << Thread.new do - succeeded = false unless worker.run(queue) - end - end - - begin - worker_threads.each(&:join) - rescue Interrupt - workers.each do |worker| - worker.interrupt - end - end - - succeeded - end - - def create_reporter - Grntest::Reporters.create_repoter(@tester) - end - end end end -------------- next part -------------- HTML����������������������������...Download