assert 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/Gemfile.lock +3 -1
  2. data/README.rdoc +6 -6
  3. data/Rakefile +2 -3
  4. data/assert.gemspec +1 -0
  5. data/lib/assert/assertions.rb +30 -30
  6. data/lib/assert/context.rb +71 -66
  7. data/lib/assert/macro.rb +14 -0
  8. data/lib/assert/macros/methods.rb +52 -0
  9. data/lib/assert/rake_tasks.rb +31 -13
  10. data/lib/assert/result.rb +12 -4
  11. data/lib/assert/result_set.rb +2 -2
  12. data/lib/assert/runner.rb +2 -6
  13. data/lib/assert/setup/autorun.rb +0 -1
  14. data/lib/assert/suite.rb +19 -15
  15. data/lib/assert/test.rb +6 -17
  16. data/lib/assert/version.rb +1 -1
  17. data/lib/assert/view/base.rb +1 -1
  18. data/lib/assert/view/terminal.rb +8 -30
  19. data/test/assertions/assert_block_test.rb +1 -1
  20. data/test/assertions/assert_empty_test.rb +43 -0
  21. data/test/assertions/assert_equal_test.rb +43 -0
  22. data/test/assertions/assert_includes_test.rb +44 -0
  23. data/test/assertions/assert_instance_of_test.rb +4 -4
  24. data/test/assertions/assert_kind_of_test.rb +3 -3
  25. data/test/assertions/assert_match_test.rb +43 -0
  26. data/test/assertions/assert_nil_test.rb +43 -0
  27. data/test/assertions/assert_not_block_test.rb +1 -1
  28. data/test/assertions/assert_not_empty_test.rb +43 -0
  29. data/test/assertions/assert_not_equal_test.rb +43 -0
  30. data/test/assertions/assert_not_included_test.rb +44 -0
  31. data/test/assertions/assert_not_instance_of_test.rb +4 -4
  32. data/test/assertions/assert_not_kind_of_test.rb +2 -2
  33. data/test/assertions/assert_not_match_test.rb +43 -0
  34. data/test/assertions/assert_not_nil_test.rb +43 -0
  35. data/test/assertions/assert_not_respond_to_test.rb +6 -6
  36. data/test/assertions/assert_not_same_test.rb +45 -0
  37. data/test/assertions/assert_respond_to_test.rb +6 -6
  38. data/test/assertions/assert_same_test.rb +45 -0
  39. data/test/assertions_test.rb +21 -298
  40. data/test/context/class_methods_test.rb +81 -112
  41. data/test/context_test.rb +35 -40
  42. data/test/helper.rb +5 -2
  43. data/test/irb.rb +2 -5
  44. data/test/macro_test.rb +99 -0
  45. data/test/options_test.rb +2 -2
  46. data/test/result_set_test.rb +47 -54
  47. data/test/result_test.rb +4 -17
  48. data/test/runner_test.rb +2 -10
  49. data/test/suite_test.rb +85 -13
  50. data/test/test/running_test.rb +19 -28
  51. data/test/test_test.rb +130 -128
  52. data/test/view_test.rb +3 -17
  53. metadata +50 -7
data/test/helper.rb CHANGED
@@ -3,6 +3,9 @@
3
3
 
4
4
  require 'stringio'
5
5
 
6
+ # test/.. (root dir for gem)
7
+ $LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
8
+
6
9
  # This is the suite intended to be used in the tests, this is seperate from Assert.suite which is
7
10
  # the actual suite being used to run the tests, confused? Don't use Assert.suite in your tests,
8
11
  # use TEST_ASSERT_SUITE
@@ -38,9 +41,9 @@ module Factory
38
41
  def test(*args, &block)
39
42
  name = (args[0] || "a test").to_s
40
43
  context_class = args[1] || self.context_class
41
- block ||= (args[2] || lambda{ })
44
+ test_block = (block || args[2] || ::Proc.new{})
42
45
 
43
- Assert::Test.new(name, context_class, &block)
46
+ Assert::Test.new(name, context_class, &test_block)
44
47
  end
45
48
 
46
49
  # Common interface for generating a new skip result
data/test/irb.rb CHANGED
@@ -1,10 +1,7 @@
1
- require 'test_belt'
1
+ require 'assert'
2
2
 
3
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
4
+ # b/c 'assert' is required above, the test helper will be
6
5
  # required in.
7
6
 
8
7
  # put any IRB setup code here
9
-
10
- require 'assert'
@@ -0,0 +1,99 @@
1
+ require 'assert'
2
+
3
+ require 'assert/macro'
4
+
5
+ class Assert::Macro
6
+
7
+ class BaseTest < Assert::Context
8
+ desc "a macro"
9
+ subject { Assert::Macro.new {} }
10
+
11
+ should "be a Proc" do
12
+ assert_kind_of ::Proc, subject
13
+ end
14
+
15
+ should "complain if you create a macro without a block" do
16
+ assert_raises ArgumentError do
17
+ Assert::Macro.new
18
+ end
19
+ end
20
+ end
21
+
22
+ class InstanceMethodsTest < Assert::Context
23
+ desc "a class with instance methods"
24
+ subject do
25
+ class ::InstExample
26
+ (1..6).each {|i| define_method("method_#{i}") {}}
27
+ end
28
+ ::InstExample.new
29
+ end
30
+
31
+ should have_instance_method :method_1
32
+ should have_instance_method :method_2, :method_3
33
+ should have_instance_methods :method_4
34
+ should have_instance_methods :method_5, :method_6
35
+ end
36
+
37
+ class ClassMethodsTest < Assert::Context
38
+ desc "a class with class methods"
39
+ subject do
40
+ class ::ClassExample
41
+ class << self
42
+ (1..6).each {|i| define_method("method_#{i}") {}}
43
+ end
44
+ end
45
+ ::ClassExample.new
46
+ end
47
+
48
+ should have_class_method :method_1
49
+ should have_class_method :method_2, :method_3
50
+ should have_class_methods :method_4
51
+ should have_class_methods :method_5, :method_6
52
+ end
53
+
54
+ class ReadersTest < Assert::Context
55
+ desc "a class with readers"
56
+ subject do
57
+ class ::ReaderExample
58
+ (1..6).each {|i| attr_reader "method_#{i}"}
59
+ end
60
+ ::ReaderExample.new
61
+ end
62
+
63
+ should have_reader :method_1
64
+ should have_reader :method_2, :method_3
65
+ should have_readers :method_4
66
+ should have_readers :method_5, :method_6
67
+ end
68
+
69
+ class WritersTest < Assert::Context
70
+ desc "a class with writers"
71
+ subject do
72
+ class ::WriterExample
73
+ (1..6).each {|i| attr_writer "method_#{i}"}
74
+ end
75
+ ::WriterExample.new
76
+ end
77
+
78
+ should have_writer :method_1
79
+ should have_writer :method_2, :method_3
80
+ should have_writers :method_4
81
+ should have_writers :method_5, :method_6
82
+ end
83
+
84
+ class AccessorsTest < Assert::Context
85
+ desc "a class with accessors"
86
+ subject do
87
+ class ::AccessorExample
88
+ (1..6).each {|i| attr_accessor "method_#{i}"}
89
+ end
90
+ ::AccessorExample.new
91
+ end
92
+
93
+ should have_accessor :method_1
94
+ should have_accessor :method_2, :method_3
95
+ should have_accessors :method_4
96
+ should have_accessors :method_5, :method_6
97
+ end
98
+
99
+ end
data/test/options_test.rb CHANGED
@@ -37,8 +37,8 @@ module Assert::Options
37
37
  end
38
38
 
39
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
40
+ assert_respond_to :options, Assert::View::Terminal
41
+ assert_respond_to :options, Assert::View::Terminal.new("suite", "io")
42
42
  end
43
43
 
44
44
  end
@@ -12,13 +12,14 @@ class FakeView < Assert::View::Base
12
12
  self.printed = []
13
13
  end
14
14
 
15
- def print_runtime_result(result)
15
+ def handle_runtime_result(result)
16
16
  self.printed.push(result)
17
17
  end
18
18
 
19
19
  end
20
20
 
21
21
  class Assert::ResultSet
22
+
22
23
  class BasicTest < Assert::Context
23
24
  desc "Assert result set"
24
25
  setup do
@@ -26,64 +27,56 @@ class Assert::ResultSet
26
27
  end
27
28
  subject { @result_set }
28
29
 
29
- INSTANCE_METHODS = [
30
- :view, :view=
31
- ]
32
- INSTANCE_METHODS.each do |method|
33
- should "respond to the instance method ##{method}" do
34
- assert_respond_to subject, method
35
- end
36
- end
37
-
38
-
30
+ should have_accessor :view
31
+ end
39
32
 
40
- class ViewTest < BasicTest
41
- desc "view"
42
- setup do
43
- @view_s = ""
44
- @view = @result_set.view = FakeView.new(nil, StringIO.new(@view_s, "w+"))
45
33
 
46
- @pass_result = Assert::Result::Pass.new("test", "pass", [])
47
- @result_set << @pass_result
48
- @fail_result = Assert::Result::Fail.new("test", "fail", [])
49
- @result_set << @fail_result
50
- @skip_result = Assert::Result::Skip.new("test", RuntimeError.new)
51
- @result_set << @skip_result
52
- @error_result = Assert::Result::Error.new("test", RuntimeError.new)
53
- @result_set << @error_result
54
- end
55
- subject{ @view }
34
+ class ViewTest < BasicTest
35
+ desc "view"
36
+ setup do
37
+ @view_s = ""
38
+ @view = @result_set.view = FakeView.new(nil, StringIO.new(@view_s, "w+"))
56
39
 
57
- should "have 'printed' 1 pass result" do
58
- pass_results = @view.printed.reject{|r| !r.pass? }
59
- assert_equal 1, pass_results.size
60
- assert_kind_of Assert::Result::Pass, pass_results.first
61
- assert_equal @pass_result.test_name, pass_results.first.test_name
62
- assert_equal @pass_result.message, pass_results.first.message
63
- end
64
- should "have 'printed' 1 fail result" do
65
- fail_results = @view.printed.reject{|r| !r.fail? }
66
- assert_equal 1, fail_results.size
67
- assert_kind_of Assert::Result::Fail, fail_results.first
68
- assert_equal @fail_result.test_name, fail_results.first.test_name
69
- assert_equal @fail_result.message, fail_results.first.message
70
- end
71
- should "have 'printed' 1 skip result" do
72
- skip_results = @view.printed.reject{|r| !r.skip? }
73
- assert_equal 1, skip_results.size
74
- assert_kind_of Assert::Result::Skip, skip_results.first
75
- assert_equal @skip_result.test_name, skip_results.first.test_name
76
- assert_equal @skip_result.message, skip_results.first.message
77
- end
78
- should "have 'printed' 1 error result" do
79
- error_results = @view.printed.reject{|r| !r.error? }
80
- assert_equal 1, error_results.size
81
- assert_kind_of Assert::Result::Error, error_results.first
82
- assert_equal @error_result.test_name, error_results.first.test_name
83
- assert_equal @error_result.message, error_results.first.message
84
- end
40
+ @pass_result = Assert::Result::Pass.new("test", "pass", [])
41
+ @result_set << @pass_result
42
+ @fail_result = Assert::Result::Fail.new("test", "fail", [])
43
+ @result_set << @fail_result
44
+ @skip_result = Assert::Result::Skip.new("test", RuntimeError.new)
45
+ @result_set << @skip_result
46
+ @error_result = Assert::Result::Error.new("test", RuntimeError.new)
47
+ @result_set << @error_result
48
+ end
49
+ subject{ @view }
85
50
 
51
+ should "have 'printed' 1 pass result" do
52
+ pass_results = @view.printed.reject{|r| !r.pass? }
53
+ assert_equal 1, pass_results.size
54
+ assert_kind_of Assert::Result::Pass, pass_results.first
55
+ assert_equal @pass_result.test_name, pass_results.first.test_name
56
+ assert_equal @pass_result.message, pass_results.first.message
57
+ end
58
+ should "have 'printed' 1 fail result" do
59
+ fail_results = @view.printed.reject{|r| !r.fail? }
60
+ assert_equal 1, fail_results.size
61
+ assert_kind_of Assert::Result::Fail, fail_results.first
62
+ assert_equal @fail_result.test_name, fail_results.first.test_name
63
+ assert_equal @fail_result.message, fail_results.first.message
64
+ end
65
+ should "have 'printed' 1 skip result" do
66
+ skip_results = @view.printed.reject{|r| !r.skip? }
67
+ assert_equal 1, skip_results.size
68
+ assert_kind_of Assert::Result::Skip, skip_results.first
69
+ assert_equal @skip_result.test_name, skip_results.first.test_name
70
+ assert_equal @skip_result.message, skip_results.first.message
71
+ end
72
+ should "have 'printed' 1 error result" do
73
+ error_results = @view.printed.reject{|r| !r.error? }
74
+ assert_equal 1, error_results.size
75
+ assert_kind_of Assert::Result::Error, error_results.first
76
+ assert_equal @error_result.test_name, error_results.first.test_name
77
+ assert_equal @error_result.message, error_results.first.message
86
78
  end
87
79
 
88
80
  end
81
+
89
82
  end
data/test/result_test.rb CHANGED
@@ -9,14 +9,7 @@ module Assert::Result
9
9
  setup{ @backtrace = Backtrace.new(caller) }
10
10
  subject { @backtrace }
11
11
 
12
- INSTANCE_METHODS = [
13
- :to_s, :filtered
14
- ]
15
- INSTANCE_METHODS.each do |method|
16
- should "respond to the instance method ##{method}" do
17
- assert_respond_to subject, method
18
- end
19
- end
12
+ should have_instance_methods :to_s, :filtered
20
13
 
21
14
  should "be an Array" do
22
15
  assert_kind_of ::Array, subject
@@ -42,18 +35,12 @@ module Assert::Result
42
35
  end
43
36
  subject{ @result }
44
37
 
45
- INSTANCE_METHODS = [
46
- :test_name, :message, :backtrace, :to_sym, :to_s, :trace
47
- ]
48
- INSTANCE_METHODS.each do |method|
49
- should "respond to the instance method ##{method}" do
50
- assert_respond_to subject, method
51
- end
52
- end
38
+ should have_readers :test_name, :message, :backtrace
39
+ should have_instance_methods :to_sym, :to_s, :trace
53
40
 
54
41
  Assert::Result.types.keys.each do |type|
55
42
  should "respond to the instance method ##{type}?" do
56
- assert_respond_to subject, "#{type}?"
43
+ assert_respond_to "#{type}?", subject
57
44
  end
58
45
 
59
46
  should "not be #{type}" do
data/test/runner_test.rb CHANGED
@@ -11,18 +11,10 @@ class Assert::Runner
11
11
  setup do
12
12
  @suite = Assert::Suite.new
13
13
  @view = Assert::View::Base.new(@suite, StringIO.new("", "w+"))
14
- @runner = Assert::Runner.new(@suite, @view)
15
14
  end
16
- subject { @runner }
15
+ subject { Assert::Runner.new(@suite, @view) }
17
16
 
18
- INSTANCE_METHODS = [
19
- :run, :count
20
- ]
21
- INSTANCE_METHODS.each do |method|
22
- should "respond to the instance method ##{method}" do
23
- assert_respond_to subject, method
24
- end
25
- end
17
+ should have_instance_methods :run, :count
26
18
 
27
19
  should "return an integer exit code" do
28
20
  assert_equal 0, subject.run
data/test/suite_test.rb CHANGED
@@ -16,18 +16,11 @@ class Assert::Suite
16
16
  end
17
17
  subject { @suite }
18
18
 
19
- INSTANCE_METHODS = [
20
- :start_time, :end_time, :start_time=, :end_time=,
21
- :<<,
22
- :contexts, :tests, :ordered_tests, :ordered_results,
23
- :count, :test_count, :result_count,
24
- :run_time
25
- ]
26
- INSTANCE_METHODS.each do |method|
27
- should "respond to the instance method ##{method}" do
28
- assert_respond_to subject, method
29
- end
30
- end
19
+ should have_accessors :start_time, :end_time
20
+ should have_instance_method :<<
21
+ should have_instance_methods :contexts, :tests, :ordered_tests, :ordered_results
22
+ should have_instance_methods :count, :test_count, :result_count
23
+ should have_instance_method :run_time
31
24
 
32
25
  should "be a hash" do
33
26
  assert_kind_of ::Hash, subject
@@ -43,7 +36,7 @@ class Assert::Suite
43
36
  should "determine a klass' local public test methods" do
44
37
  assert_equal(
45
38
  ["test_subclass_stuff", "test_mixin_stuff"].sort,
46
- subject.send(:local_public_test_methods, SubStuff).sort
39
+ subject.send(:local_public_test_methods, SubStuff).sort.collect(&:to_s)
47
40
  )
48
41
  end
49
42
 
@@ -197,4 +190,83 @@ class Assert::Suite
197
190
 
198
191
  end
199
192
 
193
+
194
+
195
+ class SetupTest < Assert::Context
196
+ desc "a suite with a setup"
197
+ setup do
198
+ @setup_status = nil
199
+ @suite = Assert::Suite.new
200
+ @setup_blocks = []
201
+ @setup_blocks << ::Proc.new{ @setup_status = "setup" }
202
+ @setup_blocks << ::Proc.new{ @setup_status += " has been run" }
203
+ @setup_blocks.each do |setup_block|
204
+ @suite.setup(&setup_block)
205
+ end
206
+ @expected = "setup has been run"
207
+ end
208
+ subject{ @setup_status }
209
+
210
+ should "set the setup status to the correct message" do
211
+ @suite.setup
212
+ assert_equal @expected, subject
213
+ end
214
+
215
+ end
216
+
217
+
218
+
219
+ class SetupsTest < SetupTest
220
+ desc "when calling the setups method"
221
+ setup do
222
+ @setups = @suite.send(:setups)
223
+ end
224
+ subject{ @setups }
225
+
226
+ should "include the setup we defined on the suite" do
227
+ @setup_blocks.each do |setup_block|
228
+ assert_includes setup_block, subject
229
+ end
230
+ end
231
+ end
232
+
233
+
234
+
235
+ class TeardownTest < Assert::Context
236
+ desc "a suite with a teardown"
237
+ setup do
238
+ @teardown_status = nil
239
+ @suite = Assert::Suite.new
240
+ @teardown_blocks = []
241
+ @teardown_blocks << ::Proc.new{ @teardown_status += " has been run" }
242
+ @teardown_blocks << ::Proc.new{ @teardown_status = "teardown" }
243
+ @teardown_blocks.each do |teardown_block|
244
+ @suite.teardown(&teardown_block)
245
+ end
246
+ @expected = "teardown has been run"
247
+ end
248
+
249
+ should "set the teardown status to the correct message" do
250
+ @suite.teardown
251
+ assert_equal "teardown has been run", @teardown_status
252
+ end
253
+
254
+ end
255
+
256
+
257
+
258
+ class TeardownsTest < TeardownTest
259
+ desc "when calling the teardowns method"
260
+ setup do
261
+ @teardowns = @suite.send(:teardowns)
262
+ end
263
+ subject{ @teardowns }
264
+
265
+ should "include the teardown we defined on the suite" do
266
+ @teardown_blocks.each do |teardown_block|
267
+ assert_includes teardown_block, subject
268
+ end
269
+ end
270
+ end
271
+
200
272
  end