GUnit 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/gunit.gemspec +3 -3
- data/lib/gunit/assertions.rb +20 -9
- data/lib/gunit/test_runner.rb +55 -28
- data/lib/gunit/test_suite.rb +7 -19
- data/samples/test/test_helper.rb +3 -4
- data/test/unit/test_runner_test.rb +52 -21
- data/test/unit/test_suite_test.rb +4 -26
- metadata +3 -3
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "GUnit"
|
8
8
|
gem.summary = %Q{XUnit Test. Gangsta style.}
|
9
|
-
gem.description = %Q{GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is
|
9
|
+
gem.description = %Q{GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is the shizzle.}
|
10
10
|
gem.email = "gsterndale@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/gsterndale/gunit"
|
12
12
|
gem.authors = ["Greg Sterndale"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/gunit.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{GUnit}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Greg Sterndale"]
|
12
|
-
s.date = %q{2010-01-
|
13
|
-
s.description = %q{GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is
|
12
|
+
s.date = %q{2010-01-30}
|
13
|
+
s.description = %q{GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is the shizzle.}
|
14
14
|
s.email = %q{gsterndale@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
data/lib/gunit/assertions.rb
CHANGED
@@ -54,18 +54,29 @@ module GUnit
|
|
54
54
|
actual = e
|
55
55
|
end
|
56
56
|
|
57
|
-
bool =
|
58
|
-
when actual.nil?
|
57
|
+
bool = if actual.nil?
|
59
58
|
false
|
60
|
-
when expected.is_a?(String)
|
61
|
-
actual.to_s == expected
|
62
|
-
when expected.is_a?(Class)
|
63
|
-
actual.is_a?(expected)
|
64
|
-
when expected.nil?
|
65
|
-
!actual.nil?
|
66
59
|
else
|
67
|
-
|
60
|
+
case expected
|
61
|
+
when String then actual.to_s == expected
|
62
|
+
when Class then actual.is_a?(expected)
|
63
|
+
when Nil then !actual.nil?
|
64
|
+
else; actual == expected
|
65
|
+
end
|
68
66
|
end
|
67
|
+
|
68
|
+
# bool = case
|
69
|
+
# when actual.nil?
|
70
|
+
# false
|
71
|
+
# when expected.is_a?(String)
|
72
|
+
# actual.to_s == expected
|
73
|
+
# when expected.is_a?(Class)
|
74
|
+
# actual.is_a?(expected)
|
75
|
+
# when expected.nil?
|
76
|
+
# !actual.nil?
|
77
|
+
# else
|
78
|
+
# actual == expected
|
79
|
+
# end
|
69
80
|
|
70
81
|
message ||= case
|
71
82
|
when !expected.nil? && !actual.nil?
|
data/lib/gunit/test_runner.rb
CHANGED
@@ -20,11 +20,16 @@ module GUnit
|
|
20
20
|
|
21
21
|
include Singleton
|
22
22
|
|
23
|
-
PASS_CHAR
|
24
|
-
FAIL_CHAR
|
25
|
-
TODO_CHAR
|
26
|
-
EXCEPTION_CHAR
|
27
|
-
|
23
|
+
PASS_CHAR = '.'
|
24
|
+
FAIL_CHAR = 'F'
|
25
|
+
TODO_CHAR = '*'
|
26
|
+
EXCEPTION_CHAR = 'E'
|
27
|
+
PASS_COLOR = "\e[0;32m"
|
28
|
+
FAIL_COLOR = "\e[0;31m"
|
29
|
+
EXCEPTION_COLOR = "\e[0;31m"
|
30
|
+
TODO_COLOR = "\e[0;33m"
|
31
|
+
DEFAULT_COLOR = "\e[0m"
|
32
|
+
|
28
33
|
DEFAULT_PATTERNS = ['test/**/*_test.rb', 'test/**/test_*.rb']
|
29
34
|
|
30
35
|
# TestSuites and/or TestCases
|
@@ -65,24 +70,25 @@ module GUnit
|
|
65
70
|
end
|
66
71
|
|
67
72
|
def run
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
response = test.run
|
77
|
-
@responses << response
|
78
|
-
@io.print self.class.response_character(response) unless self.silent
|
73
|
+
@io.puts test_case_classes.map{|klass| klass.to_s }.join(', ') unless self.silent
|
74
|
+
self.test_cases.each do |test_case|
|
75
|
+
response = test_case.run
|
76
|
+
@responses << response
|
77
|
+
unless self.silent
|
78
|
+
@io.print self.class.response_color(response)
|
79
|
+
@io.print self.class.response_character(response)
|
80
|
+
@io.print DEFAULT_COLOR
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
82
84
|
unless self.silent
|
83
85
|
@io.puts ""
|
84
86
|
@responses.each do |response|
|
85
|
-
|
87
|
+
unless response.is_a?(GUnit::PassResponse)
|
88
|
+
@io.print self.class.response_color(response)
|
89
|
+
@io.print "#{response.message} (#{response.file_name}:#{response.line_number})\n"
|
90
|
+
@io.print DEFAULT_COLOR
|
91
|
+
end
|
86
92
|
end
|
87
93
|
@io.puts "#{@responses.length} verifications: #{passes.length} passed, #{fails.length} failed, #{exceptions.length} exceptions, #{to_dos.length} to-dos"
|
88
94
|
end
|
@@ -105,20 +111,41 @@ module GUnit
|
|
105
111
|
end
|
106
112
|
|
107
113
|
protected
|
108
|
-
|
114
|
+
|
115
|
+
# Flatten array of TestSuites and TestCases into a single dimensional array of TestCases
|
116
|
+
def test_cases(a=self.tests)
|
117
|
+
a.map do |test|
|
118
|
+
case test
|
119
|
+
when GUnit::TestSuite
|
120
|
+
test_cases(test.tests)
|
121
|
+
when GUnit::TestCase
|
122
|
+
test
|
123
|
+
end
|
124
|
+
end.flatten
|
125
|
+
end
|
126
|
+
|
127
|
+
# Unique TestCase subclasses
|
128
|
+
def test_case_classes
|
129
|
+
test_cases.map{|test| test.class }.uniq
|
130
|
+
end
|
131
|
+
|
109
132
|
def self.response_character(response)
|
110
|
-
case
|
111
|
-
when
|
112
|
-
|
113
|
-
when
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
133
|
+
case response
|
134
|
+
when PassResponse then PASS_CHAR
|
135
|
+
when FailResponse then FAIL_CHAR
|
136
|
+
when ExceptionResponse then EXCEPTION_CHAR
|
137
|
+
when ToDoResponse then TODO_CHAR
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.response_color(response)
|
142
|
+
case response
|
143
|
+
when PassResponse then PASS_COLOR
|
144
|
+
when FailResponse then FAIL_COLOR
|
145
|
+
when ExceptionResponse then EXCEPTION_COLOR
|
146
|
+
when ToDoResponse then TODO_COLOR
|
119
147
|
end
|
120
148
|
end
|
121
|
-
|
122
149
|
end
|
123
150
|
|
124
151
|
end
|
data/lib/gunit/test_suite.rb
CHANGED
@@ -1,29 +1,17 @@
|
|
1
1
|
module GUnit
|
2
|
-
|
2
|
+
|
3
3
|
class TestSuite
|
4
|
-
|
5
|
-
# TestCases
|
4
|
+
|
5
|
+
# TestCases and/or TestSuites
|
6
6
|
attr_writer :tests
|
7
|
-
|
7
|
+
|
8
8
|
def initialize()
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def tests
|
12
12
|
@tests ||= []
|
13
13
|
end
|
14
|
-
|
15
|
-
def run(&blk)
|
16
|
-
self.tests.each do |test|
|
17
|
-
case
|
18
|
-
when test.is_a?(TestSuite)
|
19
|
-
test.run{|response| blk.call(response) if blk }
|
20
|
-
when test.is_a?(TestCase)
|
21
|
-
response = test.run
|
22
|
-
blk.call(response) if blk
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
14
|
+
|
27
15
|
end
|
28
|
-
|
16
|
+
|
29
17
|
end
|
data/samples/test/test_helper.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'ruby-debug'
|
3
3
|
require File.join(File.dirname(__FILE__), '..', 'martini')
|
4
|
-
require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'gunit')
|
5
4
|
|
6
|
-
#
|
7
|
-
|
8
|
-
# require '
|
5
|
+
# Let's use this version of GUnit, instead of whatever may be install via Gem
|
6
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'gunit')
|
7
|
+
# require 'GUnit'
|
@@ -77,8 +77,10 @@ class GUnit::TestRunnerTest < Test::Unit::TestCase
|
|
77
77
|
patterns = [ 'test/**/*_MY_test.rb', 'test/**/MY_test_*.rb' ]
|
78
78
|
@test_runner.patterns = patterns
|
79
79
|
test_response1 = GUnit::PassResponse.new
|
80
|
+
test_case = GUnit::TestCase.new
|
81
|
+
test_case.expects(:run).returns(test_response1)
|
80
82
|
test_suite = GUnit::TestSuite.new
|
81
|
-
test_suite.expects(:
|
83
|
+
test_suite.expects(:tests).returns([test_case]).at_least(1)
|
82
84
|
@test_runner.tests = [test_suite]
|
83
85
|
@test_runner.autorun = false
|
84
86
|
@test_runner.run
|
@@ -130,9 +132,11 @@ class GUnit::TestRunnerTest < Test::Unit::TestCase
|
|
130
132
|
def test_run_silent
|
131
133
|
@test_runner.io = mock() # fails if any methods on io are called
|
132
134
|
@test_runner.silent = true
|
133
|
-
test_response1 = GUnit::PassResponse.new
|
135
|
+
test_response1 = GUnit::PassResponse.new
|
136
|
+
test_case = GUnit::TestCase.new
|
137
|
+
test_case.expects(:run).returns(test_response1)
|
134
138
|
test_suite = GUnit::TestSuite.new
|
135
|
-
test_suite.
|
139
|
+
test_suite.tests = [test_case]
|
136
140
|
@test_runner.tests = [test_suite]
|
137
141
|
@test_runner.run
|
138
142
|
end
|
@@ -140,15 +144,16 @@ class GUnit::TestRunnerTest < Test::Unit::TestCase
|
|
140
144
|
def test_run_bang
|
141
145
|
@test_runner.io = mock() # fails if any methods on io are called
|
142
146
|
@test_runner.silent = true
|
143
|
-
|
147
|
+
test_case = GUnit::TestCase.new
|
144
148
|
test_suite = GUnit::TestSuite.new
|
149
|
+
test_suite.tests = [test_case]
|
145
150
|
@test_runner.tests = [test_suite]
|
146
|
-
|
147
|
-
test_suite.expects(:run).times(0)
|
151
|
+
test_case.expects(:run).times(0)
|
148
152
|
@test_runner.autorun = false
|
149
153
|
@test_runner.run!
|
150
|
-
|
151
|
-
|
154
|
+
|
155
|
+
test_response1 = GUnit::PassResponse.new
|
156
|
+
test_case.expects(:run).times(1).returns(test_response1)
|
152
157
|
@test_runner.autorun = true
|
153
158
|
@test_runner.run!
|
154
159
|
end
|
@@ -158,29 +163,49 @@ class GUnit::TestRunnerTest < Test::Unit::TestCase
|
|
158
163
|
fail_response_message = "Whoops. Failed."
|
159
164
|
fail_line_number = 63
|
160
165
|
fail_file_name = 'my_test.rb'
|
161
|
-
backtrace =
|
162
166
|
test_response2 = GUnit::FailResponse.new(fail_response_message, ["samples/#{fail_file_name}:#{fail_line_number}:in `my_method'"])
|
163
167
|
exception_response_message = "Exceptional"
|
164
168
|
exception_line_number = 72
|
165
169
|
exception_file_name = 'my_other_test.rb'
|
166
170
|
test_response3 = GUnit::ExceptionResponse.new(exception_response_message, ["samples/#{exception_file_name}:#{exception_line_number}:in `my_method'"])
|
167
|
-
|
171
|
+
to_do_response_message = "Not dun yet"
|
172
|
+
test_response4 = GUnit::ToDoResponse.new(to_do_response_message)
|
168
173
|
@test_runner.silent = false
|
169
174
|
io = mock
|
170
175
|
io.expects(:print).with(GUnit::TestRunner::PASS_CHAR).at_least(1)
|
171
176
|
io.expects(:print).with(GUnit::TestRunner::FAIL_CHAR).at_least(1)
|
172
177
|
io.expects(:print).with(GUnit::TestRunner::EXCEPTION_CHAR).at_least(1)
|
173
178
|
io.expects(:print).with(GUnit::TestRunner::TODO_CHAR).at_least(1)
|
179
|
+
|
180
|
+
io.expects(:print).with(GUnit::TestRunner::PASS_COLOR).at_least(1)
|
181
|
+
# One call to print with each color for every response char and every failing message
|
182
|
+
io.expects(:print).with(GUnit::TestRunner::FAIL_COLOR).at_least(4)
|
183
|
+
# FAIL_COLOR and EXCEPTION_COLOR are the same. Setting two identical expectations causes a failure
|
184
|
+
# io.expects(:print).with(GUnit::TestRunner::EXCEPTION_COLOR).at_least(2)
|
185
|
+
io.expects(:print).with(GUnit::TestRunner::TODO_COLOR).at_least(2)
|
186
|
+
|
187
|
+
io.expects(:print).with(GUnit::TestRunner::DEFAULT_COLOR).at_least(7)
|
188
|
+
|
174
189
|
io.stubs(:puts)
|
175
|
-
io.expects(:
|
176
|
-
io.expects(:
|
190
|
+
io.expects(:print).with() { |value| value =~ /#{fail_response_message}/ && value =~ /#{fail_file_name}/ && value =~ /#{fail_line_number}/ }.at_least(1)
|
191
|
+
io.expects(:print).with() { |value| value =~ /#{exception_response_message}/ && value =~ /#{exception_file_name}/ && value =~ /#{exception_line_number}/ }.at_least(1)
|
192
|
+
io.expects(:print).with() { |value| value =~ /#{to_do_response_message}/ }.at_least(1)
|
177
193
|
@test_runner.io = io
|
178
|
-
|
194
|
+
|
195
|
+
test_case1 = GUnit::TestCase.new
|
196
|
+
test_case1.expects(:run).returns(test_response1)
|
197
|
+
test_case2 = GUnit::TestCase.new
|
198
|
+
test_case2.expects(:run).returns(test_response2)
|
199
|
+
test_case3 = GUnit::TestCase.new
|
200
|
+
test_case3.expects(:run).returns(test_response3)
|
201
|
+
test_case4 = GUnit::TestCase.new
|
202
|
+
test_case4.expects(:run).returns(test_response4)
|
203
|
+
|
179
204
|
test_suite = GUnit::TestSuite.new
|
180
|
-
test_suite.
|
181
|
-
|
182
|
-
|
183
|
-
|
205
|
+
test_suite.tests = [test_case1, test_case2, test_case4]
|
206
|
+
@test_runner.tests = [test_suite, test_case3]
|
207
|
+
|
208
|
+
io.expects(:puts).with(test_case1.class.to_s).at_least(1)
|
184
209
|
|
185
210
|
@test_runner.run
|
186
211
|
end
|
@@ -190,11 +215,17 @@ class GUnit::TestRunnerTest < Test::Unit::TestCase
|
|
190
215
|
test_response2 = GUnit::FailResponse.new
|
191
216
|
test_response3 = GUnit::ExceptionResponse.new
|
192
217
|
test_response4 = GUnit::ToDoResponse.new
|
218
|
+
test_case1 = GUnit::TestCase.new
|
219
|
+
test_case1.expects(:run).returns(test_response1)
|
220
|
+
test_case2 = GUnit::TestCase.new
|
221
|
+
test_case2.expects(:run).returns(test_response2)
|
222
|
+
test_case3 = GUnit::TestCase.new
|
223
|
+
test_case3.expects(:run).returns(test_response3)
|
224
|
+
test_case4 = GUnit::TestCase.new
|
225
|
+
test_case4.expects(:run).returns(test_response4)
|
193
226
|
test_suite = GUnit::TestSuite.new
|
194
|
-
test_suite.
|
195
|
-
|
196
|
-
test_case.expects(:run).returns(test_response3)
|
197
|
-
@test_runner.tests = [test_suite, test_case]
|
227
|
+
test_suite.tests = [test_case1, test_case2, test_case4]
|
228
|
+
@test_runner.tests = [test_suite, test_case3]
|
198
229
|
|
199
230
|
@test_runner.run
|
200
231
|
|
@@ -1,48 +1,26 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
2
|
|
3
3
|
class GUnit::TestSuiteTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
def setup
|
6
6
|
@test_suite = GUnit::TestSuite.new
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def test_it_is_a_test_suite
|
10
10
|
assert @test_suite.is_a?(GUnit::TestSuite)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def test_tests_getter_setter
|
14
14
|
tests = [GUnit::TestSuite.new, GUnit::TestCase.new]
|
15
15
|
assert @test_suite.tests != tests
|
16
16
|
@test_suite.tests = tests
|
17
17
|
assert @test_suite.tests == tests
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def test_tests_set_nil_has_empty_tests
|
21
21
|
@test_suite.tests = nil
|
22
22
|
assert @test_suite.tests.empty?
|
23
23
|
assert @test_suite.tests.is_a?(Enumerable)
|
24
24
|
end
|
25
|
-
|
26
|
-
def test_run_runs_all_tests_saves_responses
|
27
|
-
test_response1 = GUnit::PassResponse.new
|
28
|
-
test_response2 = GUnit::FailResponse.new
|
29
|
-
test_response3 = GUnit::ExceptionResponse.new
|
30
25
|
|
31
|
-
test_suite = GUnit::TestSuite.new
|
32
|
-
test_suite.expects(:run).multiple_yields(test_response1, test_response2)
|
33
|
-
|
34
|
-
test_case = GUnit::TestCase.new
|
35
|
-
test_case.expects(:run).returns(test_response3)
|
36
|
-
|
37
|
-
@test_suite.tests = [test_suite, test_case]
|
38
|
-
|
39
|
-
responses = []
|
40
|
-
@test_suite.run{|r| responses << r }
|
41
|
-
|
42
|
-
assert responses.include?(test_response1)
|
43
|
-
assert responses.include?(test_response2)
|
44
|
-
assert responses.include?(test_response3)
|
45
|
-
assert responses.length == 3
|
46
|
-
end
|
47
|
-
|
48
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: GUnit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Sterndale
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-30 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is
|
16
|
+
description: GUnit is a fresh new XUnit Test implementation, poppin' a cap in the ass of TestUnit. Just playin'. TestUnit is the shizzle.
|
17
17
|
email: gsterndale@gmail.com
|
18
18
|
executables: []
|
19
19
|
|