~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestrunner.rb

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#--
 
2
#
 
3
# Author:: Nathaniel Talbott.
 
4
# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
 
5
# License:: Ruby license.
 
6
#
 
7
# Extended to support SharpDevelop
 
8
 
 
9
require 'test/unit/ui/testrunnermediator'
 
10
require 'test/unit/ui/testrunnerutilities'
 
11
require 'sdtestresultwriter'
 
12
require 'sdtestresult'
 
13
 
 
14
module Test
 
15
  module Unit
 
16
    module UI
 
17
      module SharpDevelopConsole
 
18
 
 
19
        # Runs a Test::Unit::TestSuite on the console.
 
20
        class TestRunner
 
21
          extend TestRunnerUtilities
 
22
 
 
23
          # Creates a new TestRunner for running the passed
 
24
          # suite. If quiet_mode is true, the output while
 
25
          # running is limited to progress dots, errors and
 
26
          # failures, and the final result. io specifies
 
27
          # where runner output should go to; defaults to
 
28
          # STDOUT.
 
29
          def initialize(suite, output_level=NORMAL, io=STDOUT)
 
30
            if (suite.respond_to?(:suite))
 
31
              @suite = suite.suite
 
32
            else
 
33
              @suite = suite
 
34
            end
 
35
            @output_level = output_level
 
36
            @io = io
 
37
            @already_outputted = false
 
38
            @faults = []
 
39
            
 
40
            resultsfile = ARGV[0]
 
41
            @test_result_writer = SharpDevelopTestResultWriter.new(resultsfile)
 
42
          end
 
43
 
 
44
          # Begins the test run.
 
45
          def start
 
46
            setup_mediator
 
47
            attach_to_mediator
 
48
            return start_mediator
 
49
          end
 
50
 
 
51
          private
 
52
          def setup_mediator
 
53
            @mediator = create_mediator(@suite)
 
54
            suite_name = @suite.to_s
 
55
            if ( @suite.kind_of?(Module) )
 
56
              suite_name = @suite.name
 
57
            end
 
58
            output("Loaded suite #{suite_name}")
 
59
          end
 
60
          
 
61
          def create_mediator(suite)
 
62
            return TestRunnerMediator.new(suite)
 
63
          end
 
64
          
 
65
          def attach_to_mediator
 
66
            @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
 
67
            @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
 
68
            @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
 
69
            @mediator.add_listener(TestCase::STARTED, &method(:test_started))
 
70
            @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
 
71
          end
 
72
          
 
73
          def start_mediator
 
74
            return @mediator.run_suite
 
75
          end
 
76
          
 
77
          def add_fault(fault)
 
78
            @test_result.update_fault(fault)
 
79
            @faults << fault
 
80
            output_single(fault.single_character_display, PROGRESS_ONLY)
 
81
            @already_outputted = true
 
82
          end
 
83
          
 
84
          def started(result)
 
85
            @result = result
 
86
            output("Started")
 
87
          end
 
88
          
 
89
          def finished(elapsed_time)
 
90
            nl
 
91
            output("Finished in #{elapsed_time} seconds.")
 
92
            @faults.each_with_index do |fault, index|
 
93
              nl
 
94
              output("%3d) %s" % [index + 1, fault.long_display])
 
95
            end
 
96
            nl
 
97
            output(@result)
 
98
          end
 
99
          
 
100
          def test_started(name)
 
101
            create_test_result(name)
 
102
            output_single(name + ": ", VERBOSE)
 
103
          end
 
104
          
 
105
          def create_test_result(name)
 
106
            @test_result = SharpDevelopTestResult.new(name)
 
107
          end
 
108
          
 
109
          def test_finished(name)
 
110
            write_test_result()
 
111
            output_single(".", PROGRESS_ONLY) unless (@already_outputted)
 
112
            nl(VERBOSE)
 
113
            @already_outputted = false
 
114
          end
 
115
          
 
116
          def nl(level=NORMAL)
 
117
            output("", level)
 
118
          end
 
119
          
 
120
          def output(something, level=NORMAL)
 
121
            @io.puts(something) if (output?(level))
 
122
            @io.flush
 
123
          end
 
124
          
 
125
          def output_single(something, level=NORMAL)
 
126
            @io.write(something) if (output?(level))
 
127
            @io.flush
 
128
          end
 
129
          
 
130
          def output?(level)
 
131
            level <= @output_level
 
132
          end
 
133
          
 
134
          def write_test_result()
 
135
            @test_result_writer.write_test_result(@test_result)
 
136
          end
 
137
        end
 
138
      end
 
139
    end
 
140
  end
 
141
end
 
142
 
 
143
if __FILE__ == $0
 
144
  Test::Unit::UI::SharpDevelopConsole::TestRunner.start_command_line_test
 
145
end