openlogic-turn 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ module Turn
2
+ require 'turn/runners/isorunner'
3
+
4
+ class SoloRunner < IsoRunner
5
+ end
6
+
7
+ end
8
+
@@ -0,0 +1,166 @@
1
+ #require 'test/unit'; Test::Unit.run = false
2
+ require 'test/unit/ui/console/testrunner'
3
+
4
+ #require 'turn/colorize'
5
+ #require 'turn/components/suite.rb'
6
+ #require 'turn/components/case.rb'
7
+ #require 'turn/components/method.rb'
8
+ #require 'turn/reporters/outline_reporter.rb'
9
+ #require 'turn/reporters/progress_reporter.rb'
10
+
11
+ class Test::Unit::Failure
12
+ alias_method :backtrace, :location
13
+ end
14
+
15
+ module Turn
16
+
17
+ # = TestUnit TestRunner
18
+ #
19
+ class TestRunner < ::Test::Unit::UI::Console::TestRunner
20
+
21
+ def initialize(controller)
22
+ output_level = 2 # 2-NORMAL 3-VERBOSE
23
+
24
+ controller.loadpath.each{ |path| $: << path } unless controller.live?
25
+ controller.requires.each{ |path| require(path) }
26
+
27
+ files = [controller.files].flatten
28
+ files.each{ |path| require(path) }
29
+
30
+ # TODO: Better name ?
31
+ name = files.map{ |path| File.dirname(path).sub(Dir.pwd+'/','') }.uniq.join(',')
32
+
33
+ sub_suites = []
34
+ ObjectSpace.each_object(Class) do |klass|
35
+ if(Test::Unit::TestCase > klass)
36
+ sub_suites << klass.suite
37
+ end
38
+ end
39
+ suite = Test::Unit::TestSuite.new(name)
40
+
41
+ sub_suites.sort_by{|s|s.name}.each{|s| suite << s}
42
+
43
+ suite.tests.each do |c|
44
+ pattern = controller.pattern
45
+ c.tests.reject! { |t| pattern !~ t.method_name }
46
+ end
47
+
48
+ @t_reporter = controller.reporter
49
+
50
+ super(suite, output_level, $stdout)
51
+ end
52
+
53
+ # Is this needed?
54
+ alias :t_attach_to_mediator :attach_to_mediator
55
+
56
+ def attach_to_mediator
57
+ @mediator.add_listener(::Test::Unit::UI::TestRunnerMediator::STARTED, &method(:t_started))
58
+ @mediator.add_listener(::Test::Unit::UI::TestRunnerMediator::FINISHED, &method(:t_finished))
59
+ @mediator.add_listener(::Test::Unit::TestSuite::STARTED, &method(:t_case_started))
60
+ @mediator.add_listener(::Test::Unit::TestSuite::FINISHED, &method(:t_case_finished))
61
+ @mediator.add_listener(::Test::Unit::TestCase::STARTED, &method(:t_test_started))
62
+ @mediator.add_listener(::Test::Unit::TestCase::FINISHED, &method(:t_test_finished))
63
+ @mediator.add_listener(::Test::Unit::TestResult::FAULT, &method(:t_fault))
64
+
65
+ @io.sync = true
66
+
67
+ @t_result = nil
68
+ @t_fault = nil
69
+
70
+ @not_first_case = nil
71
+
72
+ @t_previous_run_count = 0
73
+ @t_previous_error_count = 0
74
+ @t_previous_failure_count = 0
75
+ @t_previous_assertion_count = 0
76
+ end
77
+
78
+ def t_started(result)
79
+ @t_suite = Turn::TestSuite.new(@suite.name)
80
+ @t_suite.size = @suite.size
81
+ @t_result = result
82
+ @t_reporter.start_suite(@t_suite)
83
+ end
84
+
85
+ def t_case_started(name)
86
+ # Err.. why is testunit running this on the suite?
87
+ (@not_first_case = true; return) unless @not_first_case
88
+ @t_case = @t_suite.new_case(name)
89
+ @t_reporter.start_case(@t_case)
90
+ end
91
+
92
+ def t_test_started(name)
93
+ methname, tcase = name.scan(%r/^([^\(]+)\(([^\)]+)\)/o).flatten!
94
+ @t_test = @t_case.new_test(methname)
95
+ #@t_test.file = tcase
96
+ #@t_test.name = method
97
+ @t_reporter.start_test(@t_test)
98
+ end
99
+
100
+ def t_fault(fault)
101
+ case fault
102
+ when ::Test::Unit::Error
103
+ #msg = ""
104
+ #msg << fault.to_s.split("\n")[2..-1].join("\n")
105
+ @t_test.error!(fault.exception)
106
+ @t_reporter.error(fault.exception)
107
+ when ::Test::Unit::Failure
108
+ #msg = ""
109
+ #msg << fault.location[0] << "\n"
110
+ #msg << fault.message #.gsub("\n","\n")
111
+ @t_test.fail!(fault)
112
+ @t_reporter.fail(fault)
113
+ end
114
+ end
115
+
116
+ def t_test_finished(name)
117
+ @t_reporter.pass if @t_test.pass?
118
+ @t_reporter.finish_test(@t_test)
119
+ end
120
+
121
+ def t_case_finished(name)
122
+ # Err.. why is testunit running this on the suite?
123
+ return if name=='' # FIXME skip suite call
124
+
125
+ #t = @t_result.run_count - @t_previous_run_count
126
+ #f = @t_result.failure_count - @t_previous_failure_count
127
+ #e = @t_result.error_count - @t_previous_error_count
128
+ a = @t_result.assertion_count - @t_previous_assertion_count
129
+ #@t_case.counts(t,a,f,e)
130
+
131
+ @t_case.count_assertions = a
132
+
133
+ #@t_previous_run_count = @t_result.run_count.to_i
134
+ #@t_previous_failure_count = @t_result.failure_count.to_i
135
+ #@t_previous_error_count = @t_result.error_count.to_i
136
+ @t_previous_assertion_count = @t_result.assertion_count.to_i
137
+
138
+ @t_reporter.finish_case(@t_case)
139
+ end
140
+
141
+ def t_finished(elapsed_time)
142
+ #@t_suite.count_tests = @t_result.run_count
143
+ #@t_suite.count_failures = @t_result.failure_count
144
+ #@t_suite.count_errors = @t_result.error_count
145
+ #@t_suite.count_passes = @t_result.run_count - @t_result.failure_count - @t_result.error_count
146
+ @t_suite.count_assertions = @t_result.assertion_count
147
+
148
+ @t_reporter.finish_suite(@t_suite)
149
+ end
150
+
151
+ # This is copied verbatim from test/unit/ui/console/testrunner.rb.
152
+ # It is here for one simple reason: to supress testunits output of
153
+ # "Loaded Suite".
154
+ def setup_mediator
155
+ @mediator = create_mediator(@suite)
156
+ suite_name = @suite.to_s
157
+ if ( @suite.kind_of?(Module) )
158
+ suite_name = @suite.name
159
+ end
160
+ #output("Loaded suite #{suite_name}")
161
+ end
162
+
163
+ end#class TestRunner
164
+
165
+ end#module Turn
166
+
data/test/helper.rb ADDED
@@ -0,0 +1,97 @@
1
+ require 'fileutils'
2
+
3
+ if RUBY_VERSION < "1.9"
4
+ require 'test/unit'
5
+ else
6
+ require 'minitest/unit'
7
+ end
8
+
9
+ #
10
+ def turn(*args)
11
+ `ruby -Ilib bin/turn -Ilib #{args.join(' ')} 2>&1`
12
+ end
13
+
14
+ #
15
+ def turn2(*args)
16
+ `ruby -Ilib bin/turn -Ilib #{args.join(' ')}`
17
+ end
18
+
19
+ #
20
+ def setup_test(framework, required=false, name=nil)
21
+ text = ''
22
+ text << "require '#{required}'\n" if required
23
+ text << <<-HERE
24
+ class TestTest < #{framework}::Unit::TestCase
25
+ #{standard_test_body}
26
+ end
27
+ HERE
28
+ #name = framwwork.downcase
29
+ #name = name + '_required' if requires
30
+ save_test(text, name)
31
+ end
32
+
33
+ #
34
+ def save_test(text, name=nil)
35
+ file = File.join('tmp', name || 'test.rb')
36
+ FileUtils.mkdir_p('tmp')
37
+ File.open(file, 'w'){ |f| f << text }
38
+ return file
39
+ end
40
+
41
+ #
42
+ def standard_test_body
43
+ <<-HERE
44
+ def test_pass
45
+ assert_equal(1,1)
46
+ end
47
+ HERE
48
+ end
49
+
50
+ #
51
+ def guanlent_test_body
52
+ <<-HERE
53
+ def test_pass
54
+ assert_equal(1,1)
55
+ end
56
+
57
+ def test_fail
58
+ assert_equal(1,2)
59
+ end
60
+
61
+ def test_error
62
+ raise
63
+ end
64
+ HERE
65
+ end
66
+
67
+ #
68
+ def setup_outline_test
69
+ text = <<-HERE
70
+ class OutlineTest < Test::Unit::TestCase
71
+ def test_sample_pass
72
+ puts "You should not see me"
73
+ assert_equal(1,1)
74
+ end
75
+ def test_sample_fail
76
+ puts "You should see me"
77
+ assert_equal(1,2)
78
+ end
79
+ end
80
+ HERE
81
+ save_test(text, 'outline_test.rb')
82
+ end
83
+
84
+ #
85
+ def setup_minitest_autorun
86
+ text = <<-HERE
87
+ require 'minitest/unit'
88
+ MiniTest::Unit.autorun
89
+ class TestTest < MiniTest::Unit::TestCase
90
+ def test_sample_pass
91
+ assert_equal(1,1)
92
+ end
93
+ end
94
+ HERE
95
+ save_test(text, 'minitest_autorun_test.rb')
96
+ end
97
+
data/test/runner ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env sh
2
+ ruby -Ilib bin/turn -Ilib test/*.rb
@@ -0,0 +1,131 @@
1
+ require File.dirname(__FILE__) + '/helper.rb'
2
+
3
+ # Test on Ruby 1.9+
4
+ if RUBY_VERSION >= '1.9'
5
+
6
+ class TestRuby19Framework < MiniTest::Unit::TestCase
7
+
8
+ def test_ruby19_minitest
9
+ setup_test('MiniTest')
10
+ result = turn 'tmp/test.rb'
11
+ assert result.index('PASS')
12
+ end
13
+
14
+ def test_ruby19_minitest_force
15
+ setup_test('MiniTest')
16
+ result = turn '--minitest tmp/test.rb'
17
+ assert result.index('PASS')
18
+ end
19
+
20
+ def test_ruby19_minitest_required
21
+ setup_test('MiniTest', 'minitest/unit')
22
+ result = turn 'tmp/test.rb'
23
+ assert result.index('PASS')
24
+ end
25
+
26
+ def test_ruby19_minitest_required_force
27
+ setup_test('MiniTest', 'minitest/unit')
28
+ result = turn '--minitest tmp/test.rb'
29
+ assert result.index('PASS')
30
+ end
31
+
32
+ def test_ruby19_minitest_mocking
33
+ setup_test('Test')
34
+ result = turn 'tmp/test.rb'
35
+ assert result.index('PASS')
36
+ end
37
+
38
+ def test_ruby19_minitest_mocking_force
39
+ setup_test('Test')
40
+ result = turn '--minitest tmp/test.rb'
41
+ assert result.index('PASS')
42
+ end
43
+
44
+ def test_ruby19_minitest_mocking_required
45
+ setup_test('Test', 'minitest/unit')
46
+ result = turn 'tmp/test.rb'
47
+ assert result.index('PASS')
48
+ end
49
+
50
+ def test_ruby19_minitest_mocking_required_force
51
+ setup_test('Test', 'minitest/unit')
52
+ result = turn '--minitest tmp/test.rb'
53
+ assert result.index('PASS')
54
+ end
55
+
56
+ # Ruby 1.9 users must remove ++require 'test/unit'++ from their tests.
57
+ #def test_ruby19_testunit_required
58
+ # setup_test('Test', 'test/unit')
59
+ # result = turn 'turn tmp/test.rb'
60
+ # assert result.index('PASS')
61
+ #end
62
+
63
+ # Turn does not support Test::Unit 2.0+.
64
+ #def test_ruby19_testunit_force
65
+ # setup_test('Test')
66
+ # result = turn '--testunit tmp/test.rb'
67
+ # assert result.index('PASS')
68
+ #end
69
+
70
+ # Turn does not support Test::Unit 2.0+.
71
+ #def test_ruby19_testunit_required_force
72
+ # setup_test('Test', 'test/unit')
73
+ # result = turn '--testunit tmp/test.rb'
74
+ # assert result.index('PASS')
75
+ #end
76
+
77
+ end
78
+
79
+ else
80
+
81
+ class TestRuby18Framework < Test::Unit::TestCase
82
+
83
+ def test_ruby18_testunit
84
+ setup_test('Test')
85
+ result = turn 'tmp/test.rb'
86
+ assert result.index('PASS')
87
+ end
88
+
89
+ def test_ruby18_testunit_required
90
+ setup_test('Test', 'test/unit')
91
+ result = turn 'tmp/test.rb'
92
+ assert result.index('PASS')
93
+ end
94
+
95
+ def test_ruby18_minitest
96
+ setup_test('MiniTest')
97
+ result = turn '--minitest tmp/test.rb'
98
+ assert result.index('PASS')
99
+ end
100
+
101
+ def test_ruby18_minitest_mocking_testunit
102
+ setup_test('Test')
103
+ result = turn '--minitest tmp/test.rb'
104
+ assert result.index('PASS')
105
+ end
106
+
107
+ # You can't use minitest and have ++require 'test/unit'++ in your tests.
108
+ #def test_ruby18_minitest_mocking_testunit_required
109
+ # setup_test('Test', 'test/unit')
110
+ # result = turn '--minitest tmp/test.rb'
111
+ # assert result.index('PASS')
112
+ #end
113
+
114
+ # If you want to use minitest with Ruby 1.8 you have to use force option.
115
+ # TODO: add turn configuration to automatically do this.
116
+ #def test_ruby18_minitest_required
117
+ # setup_test('MiniTest', 'minitest/unit')
118
+ # result = turn 'tmp/test.rb'
119
+ # assert result.index('PASS')
120
+ #end
121
+
122
+ def test_ruby18_minitest_required_force
123
+ setup_test('MiniTest', 'minitest/unit')
124
+ result = turn '--minitest tmp/test.rb'
125
+ assert result.index('PASS')
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/helper.rb'
2
+
3
+ class TestReporters < Test::Unit::TestCase
4
+
5
+ begin
6
+ require 'ansi'
7
+ def test_progress
8
+ file = setup_test('Test')
9
+ result = turn '--progress', file
10
+ assert(result.index('PASS'), result)
11
+ end
12
+ rescue LoadError
13
+ end
14
+
15
+ def test_dotted
16
+ file = setup_test('Test')
17
+ result = turn '--dotted', file
18
+ assert result.index('0 failures')
19
+ assert result.index('0 errors')
20
+ end
21
+
22
+ def test_marshal
23
+ file = setup_test('Test')
24
+ result = turn '--marshal', file
25
+ assert !result.index('error: true')
26
+ assert !result.index('fail: true')
27
+ end
28
+
29
+ def test_outline
30
+ file = setup_outline_test
31
+ result = turn '--outline', file
32
+ assert result.index('You should see me')
33
+ assert !result.index('You should not see me')
34
+ end
35
+
36
+ def test_pretty
37
+ file = setup_test('Test')
38
+ result = turn '--pretty', file
39
+ assert result.index('0 errors')
40
+ assert result.index('0 failures')
41
+ end
42
+
43
+ end
44
+