turn 0.7.0 → 0.8.0
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.
- data/History.txt +8 -0
- data/README.txt +4 -8
- data/Rakefile +13 -4
- data/Release.txt +30 -47
- data/Version.txt +1 -0
- data/bin/turn +2 -2
- data/demo/test_autorun_minitest.rb +26 -0
- data/demo/test_autorun_testunit.rb +26 -0
- data/demo/test_sample.rb +35 -0
- data/lib/turn/autorun/minitest.rb +155 -0
- data/lib/turn/autorun/testunit.rb +102 -0
- data/lib/turn/bin.rb +4 -0
- data/lib/turn/colorize.rb +44 -8
- data/lib/turn/command.rb +192 -147
- data/lib/turn/components/case.rb +7 -1
- data/lib/turn/components/method.rb +18 -8
- data/lib/turn/components/suite.rb +16 -13
- data/lib/turn/controller.rb +69 -16
- data/lib/turn/core_ext.rb +31 -0
- data/lib/turn/reporter.rb +19 -6
- data/lib/turn/reporters/cue_reporter.rb +167 -0
- data/lib/turn/reporters/dot_reporter.rb +27 -12
- data/lib/turn/reporters/marshal_reporter.rb +1 -48
- data/lib/turn/reporters/outline_reporter.rb +70 -12
- data/lib/turn/reporters/pretty_reporter.rb +184 -0
- data/lib/turn/reporters/progress_reporter.rb +2 -3
- data/lib/turn/runners/crossrunner.rb +8 -6
- data/lib/turn/runners/isorunner.rb +38 -11
- data/lib/turn/runners/minirunner.rb +189 -0
- data/lib/turn/runners/testrunner.rb +23 -16
- data/lib/turn.rb +15 -98
- data/test/helper.rb +97 -0
- data/test/runner +2 -0
- data/test/test_framework.rb +131 -0
- data/test/test_reporters.rb +44 -0
- data/test/test_runners.rb +45 -0
- metadata +70 -37
- data/.meta/package +0 -1
- data/.meta/ruby +0 -1
- data/.meta/version +0 -1
- data/test/test_example.rb +0 -15
- data/test/test_sample.rb +0 -15
@@ -1,5 +1,7 @@
|
|
1
1
|
module Turn
|
2
2
|
require 'turn/colorize'
|
3
|
+
require 'yaml'
|
4
|
+
require 'open3'
|
3
5
|
|
4
6
|
# = IsoRunner
|
5
7
|
#
|
@@ -24,6 +26,7 @@ module Turn
|
|
24
26
|
@loadpath = controller.loadpath
|
25
27
|
@requires = controller.requires
|
26
28
|
@live = controller.live?
|
29
|
+
@minitest = controller.framework == :minitest
|
27
30
|
end
|
28
31
|
|
29
32
|
public
|
@@ -34,7 +37,8 @@ module Turn
|
|
34
37
|
def start
|
35
38
|
suite = TestSuite.new
|
36
39
|
testruns = @controller.files.collect do |file|
|
37
|
-
|
40
|
+
name = file.sub(Dir.pwd+'/','')
|
41
|
+
suite.new_case(name, file)
|
38
42
|
end
|
39
43
|
test_loop_runner(suite)
|
40
44
|
end
|
@@ -52,20 +56,37 @@ module Turn
|
|
52
56
|
suite.each_with_index do |kase, index|
|
53
57
|
reporter.start_case(kase)
|
54
58
|
|
59
|
+
turn_path = File.expand_path(File.dirname(__FILE__) + '/../bin.rb')
|
60
|
+
|
61
|
+
files = kase.files.map{ |f| f.sub(Dir.pwd+'/', '') }
|
62
|
+
|
55
63
|
# FRACKING GENIUS RIGHT HERE !!!!!!!!!!!!
|
56
64
|
cmd = []
|
57
|
-
cmd <<
|
58
|
-
cmd <<
|
59
|
-
cmd <<
|
60
|
-
cmd <<
|
61
|
-
cmd <<
|
62
|
-
cmd <<
|
65
|
+
cmd << "ruby"
|
66
|
+
cmd << "-I#{@loadpath.join(':')}" unless @loadpath.empty?
|
67
|
+
cmd << "-r#{@requires.join(':')}" unless @requires.empty?
|
68
|
+
cmd << "--"
|
69
|
+
cmd << turn_path
|
70
|
+
cmd << "--marshal"
|
71
|
+
cmd << %[--loadpath="#{@loadpath.join(':')}"] unless @loadpath.empty?
|
72
|
+
cmd << %[--requires="#{@requires.join(':')}"] unless @requires.empty?
|
73
|
+
cmd << "--live" if @live
|
74
|
+
cmd << "--minitest" if @minitest
|
75
|
+
cmd << files.join(' ')
|
63
76
|
cmd = cmd.join(' ')
|
64
|
-
|
77
|
+
|
78
|
+
#out = `#{cmd}`
|
79
|
+
|
80
|
+
out, err = nil, nil
|
81
|
+
Open3.popen3(cmd) do |stdin, stdout, stderr|
|
82
|
+
stdin.close
|
83
|
+
out = stdout.read.chomp
|
84
|
+
err = stderr.read.chomp
|
85
|
+
end
|
65
86
|
|
66
87
|
files = kase.files
|
67
88
|
|
68
|
-
head, yaml = *
|
89
|
+
head, yaml = *out.split('---')
|
69
90
|
sub_suite = YAML.load(yaml)
|
70
91
|
|
71
92
|
# TODO: How to handle pairs?
|
@@ -95,8 +116,14 @@ module Turn
|
|
95
116
|
|
96
117
|
reporter.finish_suite(suite)
|
97
118
|
|
98
|
-
# shutdown
|
99
|
-
|
119
|
+
# shutdown auto runner
|
120
|
+
if @minitest
|
121
|
+
|
122
|
+
else
|
123
|
+
::Test::Unit.run=true rescue nil
|
124
|
+
end
|
125
|
+
|
126
|
+
suite
|
100
127
|
end
|
101
128
|
|
102
129
|
#
|
@@ -0,0 +1,189 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
# Becuase of some wierdness in MiniTest
|
4
|
+
debug, $DEBUG = $DEBUG, false
|
5
|
+
require 'minitest/unit'
|
6
|
+
$DEBUG = debug
|
7
|
+
|
8
|
+
Test = MiniTest
|
9
|
+
|
10
|
+
module Turn
|
11
|
+
|
12
|
+
# = MiniTest TestRunner
|
13
|
+
#
|
14
|
+
class MiniRunner < ::MiniTest::Unit
|
15
|
+
|
16
|
+
#
|
17
|
+
def initialize(controller)
|
18
|
+
|
19
|
+
controller.loadpath.each{ |path| $: << path } unless controller.live?
|
20
|
+
controller.requires.each{ |path| require(path) }
|
21
|
+
|
22
|
+
[controller.files].flatten.each{ |path| require(path) }
|
23
|
+
|
24
|
+
files = [controller.files].flatten
|
25
|
+
files.each{ |path| require(path) }
|
26
|
+
|
27
|
+
# TODO: Better name ?
|
28
|
+
@turn_suite_name = files.map{ |path| File.dirname(path).sub(Dir.pwd+'/','') }.uniq.join(',')
|
29
|
+
|
30
|
+
#sub_suites = []
|
31
|
+
#ObjectSpace.each_object(Class) do |klass|
|
32
|
+
# if(Test::Unit::TestCase > klass)
|
33
|
+
# sub_suites << klass.suite
|
34
|
+
# end
|
35
|
+
#end
|
36
|
+
#suite = Test::Unit::TestSuite.new('') # FIXME: Name?
|
37
|
+
#sub_suites.sort_by{|s|s.name}.each{|s| suite << s}
|
38
|
+
|
39
|
+
#suite.tests.each do |c|
|
40
|
+
# pattern = controller.pattern
|
41
|
+
# c.tests.reject! { |t| pattern !~ t.method_name }
|
42
|
+
#end
|
43
|
+
|
44
|
+
@turn_logger = controller.reporter
|
45
|
+
|
46
|
+
super()
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
def start(args=[])
|
51
|
+
run(args)
|
52
|
+
return @turn_suite
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
def run(args = [])
|
57
|
+
@verbose = true
|
58
|
+
|
59
|
+
filter = if args.first =~ /^(-n|--name)$/ then
|
60
|
+
args.shift
|
61
|
+
arg = args.shift
|
62
|
+
arg =~ /\/(.*)\// ? Regexp.new($1) : arg
|
63
|
+
else
|
64
|
+
/./ # anything - ^test_ already filtered by #tests
|
65
|
+
end
|
66
|
+
|
67
|
+
#@@out.puts "Loaded suite #{$0.sub(/\.rb$/, '')}\nStarted"
|
68
|
+
|
69
|
+
start = Time.now
|
70
|
+
|
71
|
+
run_test_suites(filter)
|
72
|
+
|
73
|
+
return failures + errors if @test_count > 0 # or return nil...
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
def run_test_suites(filter = /./)
|
78
|
+
@test_count, @assertion_count = 0, 0
|
79
|
+
old_sync, @@out.sync = @@out.sync, true if @@out.respond_to? :sync=
|
80
|
+
|
81
|
+
@turn_suite = Turn::TestSuite.new(@turn_suite_name)
|
82
|
+
@turn_suite.size = ::MiniTest::Unit::TestCase.test_suites.size
|
83
|
+
@turn_logger.start_suite(@turn_suite)
|
84
|
+
|
85
|
+
::MiniTest::Unit::TestCase.test_suites.each do |kase|
|
86
|
+
|
87
|
+
test_cases = kase.test_methods.grep(filter)
|
88
|
+
|
89
|
+
@turn_case = @turn_suite.new_case(kase.name)
|
90
|
+
|
91
|
+
turn_cases = test_cases.map do |test|
|
92
|
+
@turn_case.new_test(test)
|
93
|
+
end
|
94
|
+
|
95
|
+
@turn_logger.start_case(@turn_case)
|
96
|
+
|
97
|
+
turn_cases.each do |test|
|
98
|
+
#methname, tcase = name.scan(%r/^([^\(]+)\(([^\)]+)\)/o).flatten!
|
99
|
+
@turn_test = test #@turn_case.new_test(test)
|
100
|
+
@turn_logger.start_test(@turn_test)
|
101
|
+
|
102
|
+
inst = kase.new(test.name)
|
103
|
+
inst._assertions = 0
|
104
|
+
|
105
|
+
result = inst.run(self)
|
106
|
+
report = @report.last
|
107
|
+
|
108
|
+
case result
|
109
|
+
when :pass
|
110
|
+
@turn_logger.pass
|
111
|
+
when :error
|
112
|
+
#trace = ::MiniTest::filter_backtrace(report[:exception].backtrace).first
|
113
|
+
@turn_test.error!(report)
|
114
|
+
@turn_logger.error(report)
|
115
|
+
when :fail
|
116
|
+
#trace = ::MiniTest::filter_backtrace(report[:exception].backtrace).first
|
117
|
+
@turn_test.fail!(report)
|
118
|
+
@turn_logger.fail(report)
|
119
|
+
when :skip
|
120
|
+
@turn_test.skip! #(report)
|
121
|
+
@turn_logger.skip #(report)
|
122
|
+
end
|
123
|
+
|
124
|
+
@turn_logger.finish_test(@turn_test)
|
125
|
+
|
126
|
+
@test_count += 1
|
127
|
+
@assertion_count += inst._assertions
|
128
|
+
end
|
129
|
+
@turn_case.count_assertions = @assertion_count # for lack of a better appraoch
|
130
|
+
@turn_logger.finish_case(@turn_case)
|
131
|
+
end
|
132
|
+
@turn_logger.finish_suite(@turn_suite)
|
133
|
+
@@out.sync = old_sync if @@out.respond_to? :sync=
|
134
|
+
[@test_count, @assertion_count]
|
135
|
+
end
|
136
|
+
|
137
|
+
# Overwrite #puke method so that is stores a hash
|
138
|
+
# with :message and :exception keys.
|
139
|
+
def puke(klass, meth, e)
|
140
|
+
result = nil
|
141
|
+
msg = case e
|
142
|
+
when ::MiniTest::Skip
|
143
|
+
@skips += 1
|
144
|
+
result = :skip
|
145
|
+
e.message
|
146
|
+
when ::MiniTest::Assertion
|
147
|
+
@failures += 1
|
148
|
+
result = :fail
|
149
|
+
e.message
|
150
|
+
else
|
151
|
+
@errors += 1
|
152
|
+
result = :error
|
153
|
+
"#{e.class}: #{e.message}\n"
|
154
|
+
end
|
155
|
+
|
156
|
+
@report << e #{:message => msg, :exception => e}
|
157
|
+
result
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
class ::MiniTest::Unit::TestCase
|
165
|
+
old_verbose, $VERBOSE = $VERBOSE, false
|
166
|
+
# Overwrite #run method so that is uses symbols
|
167
|
+
# as return values rather than characters.
|
168
|
+
def run(runner)
|
169
|
+
result = :pass
|
170
|
+
begin
|
171
|
+
@passed = nil
|
172
|
+
self.setup
|
173
|
+
self.__send__(self.__name__.to_s)
|
174
|
+
@passed = true
|
175
|
+
rescue Exception => e
|
176
|
+
@passed = false
|
177
|
+
result = runner.puke(self.class, self.__name__.to_s, e)
|
178
|
+
ensure
|
179
|
+
begin
|
180
|
+
self.teardown
|
181
|
+
rescue Exception => e
|
182
|
+
result = runner.puke(self.class, self.__name__.to_s, e)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
result
|
186
|
+
end
|
187
|
+
$VERBOSE = old_verbose
|
188
|
+
end
|
189
|
+
|
@@ -8,13 +8,14 @@ require 'test/unit/ui/console/testrunner'
|
|
8
8
|
#require 'turn/reporters/outline_reporter.rb'
|
9
9
|
#require 'turn/reporters/progress_reporter.rb'
|
10
10
|
|
11
|
+
class Test::Unit::Failure
|
12
|
+
alias_method :backtrace, :location
|
13
|
+
end
|
14
|
+
|
11
15
|
module Turn
|
12
16
|
|
13
17
|
# = TestUnit TestRunner
|
14
18
|
#
|
15
|
-
#--
|
16
|
-
# TODO: Add minitest runner.
|
17
|
-
#++
|
18
19
|
class TestRunner < ::Test::Unit::UI::Console::TestRunner
|
19
20
|
|
20
21
|
def initialize(controller)
|
@@ -23,7 +24,11 @@ module Turn
|
|
23
24
|
controller.loadpath.each{ |path| $: << path } unless controller.live?
|
24
25
|
controller.requires.each{ |path| require(path) }
|
25
26
|
|
26
|
-
[controller.files].flatten
|
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(',')
|
27
32
|
|
28
33
|
sub_suites = []
|
29
34
|
ObjectSpace.each_object(Class) do |klass|
|
@@ -31,7 +36,8 @@ module Turn
|
|
31
36
|
sub_suites << klass.suite
|
32
37
|
end
|
33
38
|
end
|
34
|
-
suite = Test::Unit::TestSuite.new(
|
39
|
+
suite = Test::Unit::TestSuite.new(name)
|
40
|
+
|
35
41
|
sub_suites.sort_by{|s|s.name}.each{|s| suite << s}
|
36
42
|
|
37
43
|
suite.tests.each do |c|
|
@@ -61,6 +67,8 @@ module Turn
|
|
61
67
|
@t_result = nil
|
62
68
|
@t_fault = nil
|
63
69
|
|
70
|
+
@not_first_case = nil
|
71
|
+
|
64
72
|
@t_previous_run_count = 0
|
65
73
|
@t_previous_error_count = 0
|
66
74
|
@t_previous_failure_count = 0
|
@@ -68,7 +76,7 @@ module Turn
|
|
68
76
|
end
|
69
77
|
|
70
78
|
def t_started(result)
|
71
|
-
@t_suite = Turn::TestSuite.new
|
79
|
+
@t_suite = Turn::TestSuite.new(@suite.name)
|
72
80
|
@t_suite.size = @suite.size
|
73
81
|
@t_result = result
|
74
82
|
@t_reporter.start_suite(@t_suite)
|
@@ -92,16 +100,16 @@ module Turn
|
|
92
100
|
def t_fault(fault)
|
93
101
|
case fault
|
94
102
|
when ::Test::Unit::Error
|
95
|
-
msg = ""
|
96
|
-
msg << fault.to_s.split("\n")[2..-1].join("\n")
|
97
|
-
@t_test.error!(
|
98
|
-
@t_reporter.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)
|
99
107
|
when ::Test::Unit::Failure
|
100
|
-
msg = ""
|
101
|
-
msg << fault.location[0] << "\n"
|
102
|
-
msg << fault.message #.gsub("\n","\n")
|
103
|
-
@t_test.fail!(
|
104
|
-
@t_reporter.fail(
|
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)
|
105
113
|
end
|
106
114
|
end
|
107
115
|
|
@@ -118,7 +126,6 @@ module Turn
|
|
118
126
|
#f = @t_result.failure_count - @t_previous_failure_count
|
119
127
|
#e = @t_result.error_count - @t_previous_error_count
|
120
128
|
a = @t_result.assertion_count - @t_previous_assertion_count
|
121
|
-
|
122
129
|
#@t_case.counts(t,a,f,e)
|
123
130
|
|
124
131
|
@t_case.count_assertions = a
|
data/lib/turn.rb
CHANGED
@@ -1,102 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
module Console
|
7
|
-
class TestRunner
|
8
|
-
include Turn::Colorize
|
9
|
-
|
10
|
-
# 1.x of test/unut used @io, where as 2.x uses @output.
|
11
|
-
def turn_out
|
12
|
-
@turn_out ||= (@io || @output)
|
13
|
-
end
|
14
|
-
|
15
|
-
alias :t_attach_to_mediator :attach_to_mediator
|
16
|
-
def attach_to_mediator
|
17
|
-
@mediator.add_listener(TestRunnerMediator::STARTED, &method(:t_started))
|
18
|
-
@mediator.add_listener(TestRunnerMediator::FINISHED, &method(:t_finished))
|
19
|
-
@mediator.add_listener(TestCase::STARTED, &method(:t_test_started))
|
20
|
-
@mediator.add_listener(TestCase::FINISHED, &method(:t_test_finished))
|
21
|
-
@mediator.add_listener(TestResult::FAULT, &method(:t_fault))
|
22
|
-
turn_out.sync = true
|
23
|
-
@t_cur_file, @t_fault = nil
|
24
|
-
end
|
25
|
-
|
26
|
-
def t_started( result )
|
27
|
-
@t_result = result
|
28
|
-
end
|
29
|
-
|
30
|
-
def t_finished( elapsed_time )
|
31
|
-
failure = @t_result.failure_count
|
32
|
-
error = @t_result.error_count
|
33
|
-
total = @t_result.run_count
|
34
|
-
pass = total - failure - error
|
35
|
-
|
36
|
-
bar = '=' * 78
|
37
|
-
if COLORIZE
|
38
|
-
bar = if pass == total then ::ANSI::Code.green bar
|
39
|
-
else ::ANSI::Code.red bar end
|
40
|
-
end
|
41
|
-
|
42
|
-
turn_out.puts bar
|
43
|
-
turn_out.puts " pass: %d, fail: %d, error: %d" % [pass, failure, error]
|
44
|
-
turn_out.puts " total: %d tests with %d assertions in #{elapsed_time} seconds" % [total, @t_result.assertion_count]
|
45
|
-
turn_out.puts bar
|
46
|
-
end
|
47
|
-
|
48
|
-
def t_test_started( name )
|
49
|
-
method, file = name.scan(%r/^([^\(]+)\(([^\)]+)\)/o).flatten!
|
50
|
-
if @t_cur_file != file
|
51
|
-
@t_cur_file = file
|
52
|
-
file = COLORIZE ? ::ANSI::Code.yellow(file) : file
|
53
|
-
turn_out.puts file
|
54
|
-
end
|
55
|
-
turn_out.print " %-69s" % method
|
56
|
-
end
|
57
|
-
|
58
|
-
def t_test_finished( name )
|
59
|
-
turn_out.puts " #{PASS}" unless @t_fault
|
60
|
-
@t_fault = false
|
61
|
-
end
|
62
|
-
|
63
|
-
def t_fault( fault )
|
64
|
-
@t_fault = true
|
65
|
-
msg = "\t"
|
66
|
-
|
67
|
-
case fault
|
68
|
-
when ::Test::Unit::Error
|
69
|
-
turn_out.puts ERROR
|
70
|
-
msg << fault.to_s.split("\n")[2..-1].join("\n\t")
|
71
|
-
when ::Test::Unit::Failure
|
72
|
-
turn_out.puts " #{FAIL}"
|
73
|
-
msg << fault.location[0].to_s << "\n\t"
|
74
|
-
msg << fault.message.gsub("\n","\n\t")
|
75
|
-
end
|
76
|
-
|
77
|
-
msg = ::ANSI::Code.magenta msg if COLORIZE
|
78
|
-
turn_out.puts msg
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
def setup_mediator
|
83
|
-
@mediator = create_mediator(@suite)
|
84
|
-
suite_name = @suite.to_s
|
85
|
-
if ( @suite.kind_of?(Module) )
|
86
|
-
suite_name = @suite.name
|
87
|
-
end
|
88
|
-
msg = rails? ? "\n" : "Loaded suite #{suite_name}" #always same in rails so scrap it
|
89
|
-
output(msg)
|
90
|
-
end
|
91
|
-
|
92
|
-
def rails?
|
93
|
-
$:.to_s.include? "rails"
|
94
|
-
end
|
95
|
-
|
96
|
-
|
1
|
+
module Turn
|
2
|
+
# Returns +true+ if the ruby version supports minitest.
|
3
|
+
# Otherwise, +false+ is returned.
|
4
|
+
def self.minitest?
|
5
|
+
RUBY_VERSION >= '1.9'
|
97
6
|
end
|
98
7
|
end
|
99
|
-
|
8
|
+
|
9
|
+
unless defined?(Turn::Command)
|
10
|
+
if Turn.minitest?
|
11
|
+
require 'turn/autorun/minitest'
|
12
|
+
MiniTest::Unit.autorun
|
13
|
+
else
|
14
|
+
require 'turn/autorun/testunit'
|
15
|
+
end
|
16
|
+
#autoload :Test, 'turn/autorun/testunit'
|
17
|
+
#autoload :MiniTest, 'turn/autorun/minitest'
|
100
18
|
end
|
101
19
|
|
102
|
-
# EOF
|
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