assert 0.1.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/.gitignore +5 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +17 -0
- data/README.rdoc +77 -0
- data/Rakefile +7 -0
- data/assert.gemspec +21 -0
- data/examples/empty_test.rb +5 -0
- data/examples/results_test.rb +25 -0
- data/examples/single_test.rb +9 -0
- data/lib/assert.rb +8 -0
- data/lib/assert/assertions.rb +253 -0
- data/lib/assert/context.rb +196 -0
- data/lib/assert/options.rb +43 -0
- data/lib/assert/rake_tasks.rb +95 -0
- data/lib/assert/result.rb +164 -0
- data/lib/assert/result_set.rb +14 -0
- data/lib/assert/runner.rb +60 -0
- data/lib/assert/setup/autorun.rb +34 -0
- data/lib/assert/setup/helpers.rb +62 -0
- data/lib/assert/setup/suite.rb +12 -0
- data/lib/assert/setup/view.rb +11 -0
- data/lib/assert/suite.rb +128 -0
- data/lib/assert/test.rb +90 -0
- data/lib/assert/version.rb +3 -0
- data/lib/assert/view/base.rb +54 -0
- data/lib/assert/view/terminal.rb +138 -0
- data/test/assertions/assert_block_test.rb +39 -0
- data/test/assertions/assert_instance_of_test.rb +43 -0
- data/test/assertions/assert_kind_of_test.rb +43 -0
- data/test/assertions/assert_not_block_test.rb +39 -0
- data/test/assertions/assert_not_instance_of_test.rb +43 -0
- data/test/assertions/assert_not_kind_of_test.rb +43 -0
- data/test/assertions/assert_not_respond_to_test.rb +43 -0
- data/test/assertions/assert_nothing_raised_test.rb +46 -0
- data/test/assertions/assert_raises_test.rb +49 -0
- data/test/assertions/assert_respond_to_test.rb +43 -0
- data/test/assertions_test.rb +334 -0
- data/test/context/class_methods_test.rb +314 -0
- data/test/context_test.rb +288 -0
- data/test/fixtures/inherited_stuff.rb +36 -0
- data/test/fixtures/sample_context.rb +13 -0
- data/test/helper.rb +52 -0
- data/test/irb.rb +10 -0
- data/test/options_test.rb +78 -0
- data/test/result_set_test.rb +89 -0
- data/test/result_test.rb +255 -0
- data/test/runner_test.rb +33 -0
- data/test/suite_test.rb +200 -0
- data/test/test/running_test.rb +327 -0
- data/test/test_test.rb +184 -0
- data/test/view_test.rb +35 -0
- metadata +155 -0
@@ -0,0 +1,288 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class Assert::Context::BasicTest < Assert::Context
|
4
|
+
desc "Assert context"
|
5
|
+
setup do
|
6
|
+
@test = Factory.test
|
7
|
+
@context_class = @test.context_class
|
8
|
+
@context = @context_class.new(@test)
|
9
|
+
end
|
10
|
+
subject{ @context }
|
11
|
+
|
12
|
+
INSTANCE_METHODS = [
|
13
|
+
:assert, :assert_not, :refute,
|
14
|
+
:skip, :pass, :fail, :flunk, :ignore,
|
15
|
+
:subject
|
16
|
+
]
|
17
|
+
INSTANCE_METHODS.each do |method|
|
18
|
+
should "respond to the instance method ##{method}" do
|
19
|
+
assert_respond_to subject, method
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
teardown do
|
24
|
+
TEST_ASSERT_SUITE.clear
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
class SkipTest < BasicTest
|
30
|
+
desc "skip method"
|
31
|
+
setup do
|
32
|
+
@skip_msg = "I need to implement this in the future."
|
33
|
+
begin
|
34
|
+
@context.skip(@skip_msg)
|
35
|
+
rescue Exception => @exception
|
36
|
+
end
|
37
|
+
@result = Factory.skip_result("something", @exception)
|
38
|
+
end
|
39
|
+
subject{ @result }
|
40
|
+
|
41
|
+
should "raise a test skipped exception when called" do
|
42
|
+
assert_kind_of Assert::Result::TestSkipped, @exception
|
43
|
+
end
|
44
|
+
should "raise the exception with the message passed to it" do
|
45
|
+
assert_equal @skip_msg, @exception.message
|
46
|
+
end
|
47
|
+
should "set the message passed to it on the result" do
|
48
|
+
assert_equal @skip_msg, subject.message
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
class IgnoreTest < BasicTest
|
56
|
+
desc "ignore method"
|
57
|
+
setup do
|
58
|
+
@ignore_msg = "Ignore this for now, will do later."
|
59
|
+
@result = @context.ignore(@ignore_msg)
|
60
|
+
end
|
61
|
+
subject{ @result }
|
62
|
+
|
63
|
+
should "create an ignore result" do
|
64
|
+
assert_kind_of Assert::Result::Ignore, subject
|
65
|
+
end
|
66
|
+
should "set the messaged passed to it on the result" do
|
67
|
+
assert_equal @ignore_msg, subject.message
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
class PassTest < BasicTest
|
75
|
+
desc "pass method"
|
76
|
+
setup do
|
77
|
+
@pass_msg = "That's right, it works."
|
78
|
+
@result = @context.pass(@pass_msg)
|
79
|
+
end
|
80
|
+
subject{ @result }
|
81
|
+
|
82
|
+
should "create a pass result" do
|
83
|
+
assert_kind_of Assert::Result::Pass, subject
|
84
|
+
end
|
85
|
+
should "set the messaged passed to it on the result" do
|
86
|
+
assert_equal @pass_msg, subject.message
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
class FailTest < BasicTest
|
94
|
+
desc "fail method"
|
95
|
+
setup do
|
96
|
+
@result = @context.fail
|
97
|
+
end
|
98
|
+
subject{ @result }
|
99
|
+
|
100
|
+
should "create a fail result" do
|
101
|
+
assert_kind_of Assert::Result::Fail, subject
|
102
|
+
end
|
103
|
+
should "set the calling backtrace on the result" do
|
104
|
+
assert_kind_of Array, subject.backtrace
|
105
|
+
assert_match /assert\/test\/context_test\.rb/, subject.trace
|
106
|
+
end
|
107
|
+
|
108
|
+
class StringMessageTest < FailTest
|
109
|
+
desc "with a string message"
|
110
|
+
setup do
|
111
|
+
@fail_msg = "Didn't work"
|
112
|
+
@result = @context.fail(@fail_msg)
|
113
|
+
end
|
114
|
+
|
115
|
+
should "set the message passed to it on the result" do
|
116
|
+
assert_equal @fail_msg, subject.message
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
class ProcMessageTest < FailTest
|
122
|
+
desc "with a proc message"
|
123
|
+
setup do
|
124
|
+
@fail_msg = lambda{ "Still didn't work" }
|
125
|
+
@result = @context.fail(@fail_msg)
|
126
|
+
end
|
127
|
+
|
128
|
+
should "set the message passed to it on the result" do
|
129
|
+
assert_equal @fail_msg.call, subject.message
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
class FlunkTest < BasicTest
|
139
|
+
desc "flunk method"
|
140
|
+
setup do
|
141
|
+
@flunk_msg = "It flunked."
|
142
|
+
@result = @context.flunk(@flunk_msg)
|
143
|
+
end
|
144
|
+
subject{ @result }
|
145
|
+
|
146
|
+
should "create a fail result" do
|
147
|
+
assert_kind_of Assert::Result::Fail, subject
|
148
|
+
end
|
149
|
+
should "set the message passed to it on the result" do
|
150
|
+
assert_equal @flunk_msg, subject.message
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
class AssertTest < BasicTest
|
158
|
+
desc "assert method"
|
159
|
+
setup do
|
160
|
+
@fail_desc = "my fail desc"
|
161
|
+
@what_failed = "what failed"
|
162
|
+
end
|
163
|
+
|
164
|
+
class WithTruthyAssertionTest < AssertTest
|
165
|
+
desc "with a truthy assertion"
|
166
|
+
setup do
|
167
|
+
@result = @context.assert(true, @fail_desc, @what_failed)
|
168
|
+
end
|
169
|
+
subject{ @result }
|
170
|
+
|
171
|
+
should "return a pass result" do
|
172
|
+
assert_kind_of Assert::Result::Pass, subject
|
173
|
+
assert_nil subject.message
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
class WithFalseAssertionTest < AssertTest
|
179
|
+
desc "with a false assertion"
|
180
|
+
setup do
|
181
|
+
@result = @context.assert(false, @fail_desc, @what_failed)
|
182
|
+
end
|
183
|
+
subject{ @result }
|
184
|
+
|
185
|
+
should "return a fail result" do
|
186
|
+
assert_kind_of Assert::Result::Fail, subject
|
187
|
+
assert_equal "#{@what_failed}\n#{@fail_desc}", subject.message
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
# extras
|
193
|
+
|
194
|
+
should "return a pass result with a truthy (34) assertion" do
|
195
|
+
assert_kind_of Assert::Result::Pass, subject.assert(34)
|
196
|
+
end
|
197
|
+
|
198
|
+
should "return a fail result with a nil assertion" do
|
199
|
+
assert_kind_of Assert::Result::Fail, subject.assert(nil)
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
class AssertNotTest < BasicTest
|
207
|
+
desc "assert_not method"
|
208
|
+
setup do
|
209
|
+
@fail_desc = "my fail desc"
|
210
|
+
end
|
211
|
+
|
212
|
+
class WithTruthyAssertionTest < AssertNotTest
|
213
|
+
desc "with a truthy assertion"
|
214
|
+
setup do
|
215
|
+
@what_failed = "Failed assert_not: assertion was <true>."
|
216
|
+
@result = @context.assert_not(true, @fail_desc)
|
217
|
+
end
|
218
|
+
subject{ @result }
|
219
|
+
|
220
|
+
should "return a fail result" do
|
221
|
+
assert_kind_of Assert::Result::Fail, subject
|
222
|
+
assert_equal "#{@what_failed}\n#{@fail_desc}", subject.message
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
class WithFalseAssertionTest < AssertNotTest
|
228
|
+
desc "with a false assertion"
|
229
|
+
setup do
|
230
|
+
@result = @context.assert_not(false, @fail_desc)
|
231
|
+
end
|
232
|
+
subject{ @result }
|
233
|
+
|
234
|
+
should "return a pass result" do
|
235
|
+
assert_kind_of Assert::Result::Pass, subject
|
236
|
+
assert_nil subject.message
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
|
241
|
+
# extras
|
242
|
+
|
243
|
+
should "return a fail result with a truthy (34) assertion" do
|
244
|
+
assert_kind_of Assert::Result::Fail, subject.assert_not(34)
|
245
|
+
end
|
246
|
+
|
247
|
+
should "return a pass result with a nil assertion" do
|
248
|
+
assert_kind_of Assert::Result::Pass, subject.assert_not(nil)
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
class SubjectTest < BasicTest
|
256
|
+
desc "subject method"
|
257
|
+
setup do
|
258
|
+
expected = @expected = "amazing"
|
259
|
+
@context_class = Factory.context_class do
|
260
|
+
subject{ @something = expected }
|
261
|
+
end
|
262
|
+
@context = @context_class.new
|
263
|
+
@subject = @context.subject
|
264
|
+
end
|
265
|
+
subject{ @subject }
|
266
|
+
|
267
|
+
should "instance evaluate the block set with the class setup method" do
|
268
|
+
assert_equal @expected, subject
|
269
|
+
end
|
270
|
+
|
271
|
+
end
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
class InspectTest < BasicTest
|
276
|
+
desc "inspect method"
|
277
|
+
setup do
|
278
|
+
@expected = "#<#{@context.class}>"
|
279
|
+
@inspect = @context.inspect
|
280
|
+
end
|
281
|
+
subject{ @inspect }
|
282
|
+
|
283
|
+
should "just show the name of the class" do
|
284
|
+
assert_equal @expected, subject
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MixinStuff
|
2
|
+
def test_mixin_stuff
|
3
|
+
"from mixin"
|
4
|
+
end
|
5
|
+
|
6
|
+
def mixednottestmeth
|
7
|
+
"mixed in not test meth"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class SuperStuff
|
12
|
+
def superclass_stuff
|
13
|
+
"from superclass"
|
14
|
+
end
|
15
|
+
|
16
|
+
def other_stuff
|
17
|
+
"super not test meth"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class SubStuff
|
23
|
+
include MixinStuff
|
24
|
+
|
25
|
+
def test_subclass_stuff
|
26
|
+
"from subclass"
|
27
|
+
end
|
28
|
+
|
29
|
+
def nottestmeth
|
30
|
+
"not test meth"
|
31
|
+
end
|
32
|
+
|
33
|
+
def more_other_stuff
|
34
|
+
"more other stuff"
|
35
|
+
end
|
36
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# this file is automatically required in when you require 'test_belt'
|
2
|
+
# put test helpers here
|
3
|
+
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
# This is the suite intended to be used in the tests, this is seperate from Assert.suite which is
|
7
|
+
# the actual suite being used to run the tests, confused? Don't use Assert.suite in your tests,
|
8
|
+
# use TEST_ASSERT_SUITE
|
9
|
+
TEST_ASSERT_SUITE = Assert::Suite.new
|
10
|
+
|
11
|
+
# This is the test context intended to be used in the tests, and is also used in the context_class
|
12
|
+
# factory by default. This will ensure any contexts you define in your tests will not be shoved
|
13
|
+
# onto the the suite running the tests.
|
14
|
+
class TestContext < Assert::Context
|
15
|
+
def self.inherited(klass)
|
16
|
+
TEST_ASSERT_SUITE << klass
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Factory
|
21
|
+
class << self
|
22
|
+
|
23
|
+
# Generates an anonymous class inherited from whatever you pass or TextContext by default. This
|
24
|
+
# provides a common interface for all context classes to be generated in the tests.
|
25
|
+
def context_class(inherit_from = nil, &block)
|
26
|
+
inherit_from ||= TestContext
|
27
|
+
klass = Class.new(inherit_from, &block)
|
28
|
+
default = (const_name = "FactoryAssertContext").dup
|
29
|
+
while(Object.const_defined?(const_name)) do
|
30
|
+
const_name = "FactoryAssertContext#{rand(Time.now.to_i)}"
|
31
|
+
end
|
32
|
+
Object.const_set(const_name, klass)
|
33
|
+
klass
|
34
|
+
end
|
35
|
+
|
36
|
+
# Common interface for generating a new test, takes args and a block, will default everything
|
37
|
+
# if you need a no-op test.
|
38
|
+
def test(*args, &block)
|
39
|
+
name = (args[0] || "a test").to_s
|
40
|
+
context_class = args[1] || self.context_class
|
41
|
+
block ||= (args[2] || lambda{ })
|
42
|
+
|
43
|
+
Assert::Test.new(name, context_class, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Common interface for generating a new skip result
|
47
|
+
def skip_result(name, exception)
|
48
|
+
Assert::Result::Skip.new(name, exception)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/test/irb.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'test_belt'
|
2
|
+
|
3
|
+
# this file is required in when the 'irb' rake test is run.
|
4
|
+
# b/c 'test_belt' is required above, lib and test dirs will
|
5
|
+
# be added to the LOAD_PATH and the test helper will be
|
6
|
+
# required in.
|
7
|
+
|
8
|
+
# put any IRB setup code here
|
9
|
+
|
10
|
+
require 'assert'
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
require 'assert/options'
|
4
|
+
|
5
|
+
module Assert::Options
|
6
|
+
|
7
|
+
class BaseTest < Assert::Context
|
8
|
+
desc "user options class"
|
9
|
+
setup { @base = Assert::Options::Base.new }
|
10
|
+
subject { @base }
|
11
|
+
|
12
|
+
should "write single values by making a method call w/ a single arg" do
|
13
|
+
subject.a_value 1
|
14
|
+
assert_equal 1, subject.a_value
|
15
|
+
end
|
16
|
+
|
17
|
+
should "read values by making a method call w/ no args" do
|
18
|
+
assert_equal nil, subject.a_value
|
19
|
+
subject.a_value "blah"
|
20
|
+
assert_equal "blah", subject.a_value
|
21
|
+
end
|
22
|
+
|
23
|
+
should "write an array of values by making a method call w/ multiple args" do
|
24
|
+
subject.a_value [1,2,3]
|
25
|
+
subject.values 1,2,3
|
26
|
+
assert_equal subject.a_value, subject.values
|
27
|
+
end
|
28
|
+
|
29
|
+
should "write default values using the 'default_' prefix" do
|
30
|
+
assert_equal nil, subject.a_value
|
31
|
+
subject.default_a_value "def"
|
32
|
+
assert_equal "def", subject.default_a_value
|
33
|
+
assert_equal "def", subject.a_value
|
34
|
+
subject.a_value "changed"
|
35
|
+
assert_equal "def", subject.default_a_value
|
36
|
+
assert_equal "changed", subject.a_value
|
37
|
+
end
|
38
|
+
|
39
|
+
should "be provided for the terminal view" do
|
40
|
+
assert_respond_to Assert::View::Terminal, :options
|
41
|
+
assert_respond_to Assert::View::Terminal.new("suite", "io"), :options
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
class TerminalTest < BaseTest
|
47
|
+
desc "for the terminal view"
|
48
|
+
subject do
|
49
|
+
Assert::View::Terminal.options
|
50
|
+
end
|
51
|
+
|
52
|
+
should "be an Options::Base object" do
|
53
|
+
assert_kind_of Assert::Options::Base, Assert::View::Terminal.options
|
54
|
+
end
|
55
|
+
|
56
|
+
should "default the styled option" do
|
57
|
+
assert_equal false, subject.default_styled
|
58
|
+
end
|
59
|
+
|
60
|
+
should "default its result abbreviations" do
|
61
|
+
assert_equal '.', subject.default_passed_abbrev
|
62
|
+
assert_equal 'F', subject.default_failed_abbrev
|
63
|
+
assert_equal 'I', subject.default_ignored_abbrev
|
64
|
+
assert_equal 'S', subject.default_skipped_abbrev
|
65
|
+
assert_equal 'E', subject.default_errored_abbrev
|
66
|
+
end
|
67
|
+
|
68
|
+
should "default its result styles" do
|
69
|
+
assert_equal :green, subject.default_passed_styles
|
70
|
+
assert_equal [:red, :bold], subject.default_failed_styles
|
71
|
+
assert_equal :magenta, subject.default_ignored_styles
|
72
|
+
assert_equal :cyan, subject.default_skipped_styles
|
73
|
+
assert_equal [:yellow, :bold], subject.default_errored_styles
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|