openlogic-turn 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+