assert 2.0.0.rc.1 → 2.0.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.
Files changed (71) hide show
  1. data/Gemfile +1 -1
  2. data/{LICENSE → LICENSE.txt} +0 -0
  3. data/Rakefile +1 -3
  4. data/assert.gemspec +15 -15
  5. data/lib/assert.rb +1 -2
  6. data/lib/assert/assert_runner.rb +2 -1
  7. data/lib/assert/assertions.rb +153 -189
  8. data/lib/assert/version.rb +1 -1
  9. data/test/helper.rb +74 -51
  10. data/test/{fixtures → support}/inherited_stuff.rb +0 -0
  11. data/test/{test → system}/running_tests.rb +16 -43
  12. data/test/{assert_test.rb → unit/assert_tests.rb} +0 -0
  13. data/test/unit/assertions/assert_block_tests.rb +57 -0
  14. data/test/unit/assertions/assert_empty_tests.rb +58 -0
  15. data/test/unit/assertions/assert_equal_tests.rb +59 -0
  16. data/test/unit/assertions/assert_file_exists_tests.rb +59 -0
  17. data/test/unit/assertions/assert_includes_tests.rb +61 -0
  18. data/test/unit/assertions/assert_instance_of_tests.rb +61 -0
  19. data/test/unit/assertions/assert_kind_of_tests.rb +60 -0
  20. data/test/unit/assertions/assert_match_tests.rb +59 -0
  21. data/test/unit/assertions/assert_nil_tests.rb +59 -0
  22. data/test/unit/assertions/assert_raises_tests.rb +73 -0
  23. data/test/unit/assertions/assert_respond_to_tests.rb +63 -0
  24. data/test/unit/assertions/assert_same_tests.rb +65 -0
  25. data/test/unit/assertions_tests.rb +65 -0
  26. data/test/unit/context/basic_singleton_tests.rb +86 -0
  27. data/test/unit/context/setup_teardown_singleton_tests.rb +105 -0
  28. data/test/unit/context/test_should_singleton_tests.rb +134 -0
  29. data/test/{context_test.rb → unit/context_tests.rb} +53 -131
  30. data/test/{macro_test.rb → unit/macro_tests.rb} +15 -11
  31. data/test/{result_test.rb → unit/result_tests.rb} +27 -26
  32. data/test/{runner_test.rb → unit/runner_tests.rb} +1 -2
  33. data/test/{suite_test.rb → unit/suite_tests.rb} +63 -95
  34. data/test/{test_test.rb → unit/test_tests.rb} +45 -77
  35. data/test/{view/base_tests.rb → unit/view_tests.rb} +0 -1
  36. metadata +63 -104
  37. data/CHANGELOG.md +0 -33
  38. data/test/assertions/assert_block_test.rb +0 -39
  39. data/test/assertions/assert_empty_test.rb +0 -43
  40. data/test/assertions/assert_equal_test.rb +0 -43
  41. data/test/assertions/assert_file_exists_test.rb +0 -43
  42. data/test/assertions/assert_includes_test.rb +0 -44
  43. data/test/assertions/assert_instance_of_test.rb +0 -43
  44. data/test/assertions/assert_kind_of_test.rb +0 -43
  45. data/test/assertions/assert_match_test.rb +0 -43
  46. data/test/assertions/assert_nil_test.rb +0 -43
  47. data/test/assertions/assert_not_block_test.rb +0 -39
  48. data/test/assertions/assert_not_empty_test.rb +0 -43
  49. data/test/assertions/assert_not_equal_test.rb +0 -43
  50. data/test/assertions/assert_not_file_exists_test.rb +0 -43
  51. data/test/assertions/assert_not_included_test.rb +0 -44
  52. data/test/assertions/assert_not_instance_of_test.rb +0 -43
  53. data/test/assertions/assert_not_kind_of_test.rb +0 -43
  54. data/test/assertions/assert_not_match_test.rb +0 -43
  55. data/test/assertions/assert_not_nil_test.rb +0 -43
  56. data/test/assertions/assert_not_respond_to_test.rb +0 -43
  57. data/test/assertions/assert_not_same_test.rb +0 -45
  58. data/test/assertions/assert_nothing_raised_test.rb +0 -46
  59. data/test/assertions/assert_raises_test.rb +0 -49
  60. data/test/assertions/assert_respond_to_test.rb +0 -43
  61. data/test/assertions/assert_same_test.rb +0 -45
  62. data/test/assertions_test.rb +0 -60
  63. data/test/context/class_methods_test.rb +0 -531
  64. data/test/fixtures/sample_context.rb +0 -13
  65. data/test/fixtures/test_root/one_test.rb +0 -0
  66. data/test/fixtures/test_root/parent/area_one/area_test.rb +0 -0
  67. data/test/fixtures/test_root/shallow/deeply/nested_test.rb +0 -0
  68. data/test/fixtures/test_root/shallow/nested_test.rb +0 -0
  69. data/test/fixtures/test_root/shallow_test.rb +0 -0
  70. data/test/fixtures/test_root/two_test.rb +0 -0
  71. data/test/suite/context_info_test.rb +0 -42
@@ -0,0 +1,65 @@
1
+ require 'assert'
2
+ require 'assert/assertions'
3
+
4
+ module Assert::Assertions
5
+
6
+ class AssertSameTest < Assert::Context
7
+ desc "the assert_same helper"
8
+ setup do
9
+ klass = Class.new; object = klass.new
10
+ desc = @desc = "assert same fail desc"
11
+ args = @args = [ object, klass.new, desc ]
12
+ @test = Factory.test do
13
+ assert_same(object, object) # pass
14
+ assert_same(*args) # fail
15
+ end
16
+ @test.run
17
+ end
18
+ subject{ @test }
19
+
20
+ should "produce results as expected" do
21
+ assert_equal 2, subject.result_count
22
+ assert_equal 1, subject.result_count(:pass)
23
+ assert_equal 1, subject.result_count(:fail)
24
+ end
25
+
26
+ should "have a fail message with custom and generic explanations" do
27
+ exp = "#{@args[2]}\n"\
28
+ "Expected #{@args[1].inspect} (#{@args[1].object_id})"\
29
+ " to be the same as #{@args[0].inspect} (#{@args[0].object_id})."
30
+ assert_equal exp, subject.fail_results.first.message
31
+ end
32
+
33
+ end
34
+
35
+ class AssertNotSameTests < Assert::Context
36
+ desc "the assert_not_same helper"
37
+ setup do
38
+ klass = Class.new; object = klass.new
39
+ desc = @desc = "assert not same fail desc"
40
+ args = @args = [ object, object, desc ]
41
+ @test = Factory.test do
42
+ assert_not_same(*args) # fail
43
+ assert_not_same(object, klass.new) # pass
44
+ end
45
+ @test.run
46
+ end
47
+ subject{ @test }
48
+
49
+ should "produce results as expected" do
50
+ assert_equal 2, subject.result_count
51
+ assert_equal 1, subject.result_count(:pass)
52
+ assert_equal 1, subject.result_count(:fail)
53
+ end
54
+
55
+ should "have a fail message with custom and generic explanations" do
56
+ exp = "#{@args[2]}\n"\
57
+ "#{@args[1].inspect} (#{@args[1].object_id}) not expected"\
58
+ " to be the same as #{@args[0].inspect} (#{@args[0].object_id})."
59
+ assert_equal exp, subject.fail_results.first.message
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
@@ -0,0 +1,65 @@
1
+ require 'assert'
2
+ require 'assert/assertions'
3
+
4
+ module Assert::Assertions
5
+
6
+ class BasicTests < Assert::Context
7
+
8
+ desc "An assert context"
9
+ setup do
10
+ @context_class = Factory.context_class
11
+ @context = @context_class.new
12
+ end
13
+ subject{ @context }
14
+
15
+ should have_imeths :assert_block, :assert_not_block, :refute_block
16
+ should have_imeths :assert_raises, :assert_not_raises
17
+ should have_imeths :assert_raise, :assert_not_raise, :assert_nothing_raised
18
+ should have_imeths :assert_kind_of, :assert_not_kind_of, :refute_kind_of
19
+ should have_imeths :assert_instance_of, :assert_not_instance_of, :refute_instance_of
20
+ should have_imeths :assert_respond_to, :assert_responds_to
21
+ should have_imeths :assert_not_respond_to, :assert_not_responds_to
22
+ should have_imeths :refute_respond_to, :refute_responds_to
23
+ should have_imeths :assert_same, :assert_not_same, :refute_same
24
+ should have_imeths :assert_equal, :assert_not_equal, :refute_equal
25
+ should have_imeths :assert_match, :assert_not_match, :assert_no_match, :refute_match
26
+ should have_imeths :assert_empty, :assert_not_empty, :refute_empty
27
+ should have_imeths :assert_includes, :assert_not_includes
28
+ should have_imeths :assert_included, :assert_not_included
29
+ should have_imeths :refute_includes, :refute_included
30
+ should have_imeths :assert_nil, :assert_not_nil, :refute_nil
31
+ should have_imeths :assert_file_exists, :assert_not_file_exists, :refute_file_exists
32
+
33
+ end
34
+
35
+ class IgnoredTests < BasicTests
36
+ desc "ignored assertions helpers"
37
+ setup do
38
+ @tests = Assert::Assertions::IGNORED_ASSERTION_HELPERS.map do |helper|
39
+ context_info = Factory.context_info(@context_class)
40
+ Factory.test("ignored assertion helper #{helper}", context_info) do
41
+ self.send(helper, "doesn't matter")
42
+ end
43
+ end
44
+ @expected_messages = Assert::Assertions::IGNORED_ASSERTION_HELPERS.map do |helper|
45
+ "The assertion `#{helper}` is not supported."\
46
+ " Please use another assertion or the basic `assert`."
47
+ end
48
+ @results = @tests.map(&:run).flatten
49
+ end
50
+ subject{ @results }
51
+
52
+ should "have an ignored result for each helper in the constant" do
53
+ subject.each do |result|
54
+ assert_kind_of Assert::Result::Ignore, result
55
+ end
56
+ assert_equal(Assert::Assertions::IGNORED_ASSERTION_HELPERS.size, subject.size)
57
+ end
58
+
59
+ should "have a custom ignore message for each helper in the constant" do
60
+ assert_equal(@expected_messages, subject.collect(&:message))
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,86 @@
1
+ require 'assert'
2
+ require 'assert/context'
3
+
4
+ class Assert::Context
5
+
6
+ # `ContextSingletonTests` defined in `test/helper.rb`
7
+ class BasicSingletonTests < ContextSingletonTests
8
+ should have_instance_methods :setup_once, :before_once, :startup
9
+ should have_instance_methods :teardown_once, :after_once, :shutdown
10
+ should have_instance_methods :setup, :before, :setups
11
+ should have_instance_methods :teardown, :after, :teardowns
12
+ should have_instance_methods :description, :desc, :describe, :subject
13
+ should have_instance_methods :test, :test_eventually, :test_skip
14
+ should have_instance_methods :should, :should_eventually, :should_skip
15
+
16
+ end
17
+
18
+ class DescriptionsTests < BasicSingletonTests
19
+ desc "`descriptions` method"
20
+ setup do
21
+ descs = @descs = [ "something amazing", "it really is" ]
22
+ @context_class = Factory.context_class do
23
+ descs.each{ |text| desc text }
24
+ end
25
+ end
26
+
27
+ should "return a collection containing any descriptions defined on the class" do
28
+ context_descs = subject.send :descriptions
29
+ assert_equal @descs, context_descs
30
+ end
31
+
32
+ end
33
+
34
+ class DescriptionTests < BasicSingletonTests
35
+ desc "`description` method"
36
+ setup do
37
+ parent_text = @parent_desc = "parent description"
38
+ @parent_class = Factory.context_class do
39
+ desc parent_text
40
+ end
41
+ text = @desc = "and the description for this context"
42
+ @context_class = Factory.context_class(@parent_class) do
43
+ desc text
44
+ end
45
+ end
46
+
47
+ should "return a string of all the inherited descriptions" do
48
+ exp_desc = "parent description and the description for this context"
49
+ assert_equal exp_desc, @context_class.description
50
+ end
51
+
52
+ end
53
+
54
+ class SubjectFromLocalTests < BasicSingletonTests
55
+ desc "subject method using local context"
56
+ setup do
57
+ subject_block = @subject_block = ::Proc.new{ @something }
58
+ @context_class = Factory.context_class do
59
+ subject(&subject_block)
60
+ end
61
+ end
62
+ subject{ @subject_block }
63
+
64
+ should "set the subject block on the context class" do
65
+ assert_equal @context_class.subject, subject
66
+ end
67
+
68
+ end
69
+
70
+ class SubjectFromParentTests < BasicSingletonTests
71
+ desc "subject method using parent context"
72
+ setup do
73
+ parent_block = @parent_block = ::Proc.new{ @something }
74
+ @parent_class = Factory.context_class do
75
+ subject(&parent_block)
76
+ end
77
+ @context_class = Factory.context_class(@parent_class)
78
+ end
79
+ subject{ @parent_block }
80
+
81
+ should "default to it's parents subject block" do
82
+ assert_equal @context_class.subject, subject
83
+ end
84
+ end
85
+
86
+ end
@@ -0,0 +1,105 @@
1
+ require 'assert'
2
+ require 'assert/context'
3
+
4
+ class Assert::Context
5
+
6
+ # `ContextSingletonTests` defined in `test/helper.rb`
7
+ class SetupTeardownSingletonTests < ContextSingletonTests
8
+ desc "setup and teardown"
9
+ end
10
+
11
+ class SetupTeardownOnceMethodsTests < SetupTeardownSingletonTests
12
+ desc "once methods"
13
+ setup do
14
+ block = @block = ::Proc.new{ something_once = true }
15
+ @context_class = Factory.context_class do
16
+ setup_once(&block)
17
+ teardown_once(&block)
18
+ end
19
+ end
20
+ teardown do
21
+ Assert.suite.send(:setups).reject!{ |b| b == @block }
22
+ end
23
+
24
+ should "add the block to the suite" do
25
+ assert_includes @block, Assert.suite.send(:setups)
26
+ assert_includes @block, Assert.suite.send(:teardowns)
27
+ end
28
+
29
+ end
30
+
31
+ class SetupTeardownMethodsTests < SetupTeardownSingletonTests
32
+ desc "methods"
33
+ setup do
34
+ block = @block = ::Proc.new{ something = true }
35
+ @context_class = Factory.context_class do
36
+ setup(&block)
37
+ teardown(&block)
38
+ end
39
+ end
40
+
41
+ should "add the block to the context" do
42
+ assert_includes @block, subject.send(:setups)
43
+ assert_includes @block, subject.send(:teardowns)
44
+ end
45
+
46
+ end
47
+
48
+ class SetupTeardownWithMethodNameTests < SetupTeardownSingletonTests
49
+ desc "methods given a method name"
50
+ setup do
51
+ method_name = @method_name = :something_amazing
52
+ @context_class = Factory.context_class do
53
+ setup(method_name)
54
+ teardown(method_name)
55
+ end
56
+ end
57
+
58
+ should "add the method name to the context" do
59
+ assert_includes @method_name, subject.send(:setups)
60
+ assert_includes @method_name, subject.send(:teardowns)
61
+ end
62
+
63
+ end
64
+
65
+ class SetupTeardownMultipleTests < SetupTeardownSingletonTests
66
+ desc "with multiple calls"
67
+ setup do
68
+ parent_setup_block = ::Proc.new{ self.setup_status = "the setup" }
69
+ parent_teardown_block = ::Proc.new{ self.teardown_status += "the teardown" }
70
+ @parent_class = Factory.context_class do
71
+ setup(&parent_setup_block)
72
+ teardown(&parent_teardown_block)
73
+ end
74
+
75
+ context_setup_block = ::Proc.new{ self.setup_status += " has been run" }
76
+ context_teardown_block = ::Proc.new{ self.teardown_status += "has been run " }
77
+ @context_class = Factory.context_class(@parent_class) do
78
+ setup(&context_setup_block)
79
+ setup(:setup_something)
80
+ teardown(:teardown_something)
81
+ teardown(&context_teardown_block)
82
+ end
83
+
84
+ @test_status_class = Class.new do
85
+ attr_accessor :setup_status, :teardown_status
86
+ define_method(:setup_something) do
87
+ self.setup_status += " with something"
88
+ end
89
+ define_method(:teardown_something) do
90
+ self.teardown_status = "with something "
91
+ end
92
+ end
93
+ end
94
+
95
+ should "run it's parent and it's own blocks in the correct order" do
96
+ subject.setup(obj = @test_status_class.new)
97
+ assert_equal "the setup has been run with something", obj.setup_status
98
+
99
+ subject.teardown(obj = @test_status_class.new)
100
+ assert_equal "with something has been run the teardown", obj.teardown_status
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,134 @@
1
+ require 'assert'
2
+ require 'assert/context'
3
+
4
+ class Assert::Context
5
+
6
+ # `ContextSingletonTests` defined in `test/helper.rb`
7
+ class TestShouldSingletonTests < ContextSingletonTests
8
+ desc "test and should methods"
9
+ setup do
10
+ @test_count_before = Assert.suite.tests.size
11
+ @test_desc = "be true"
12
+ @test_block = ::Proc.new{ assert(true) }
13
+ end
14
+
15
+ should "build a test using `test` with a desc and code block" do
16
+ d, b = @test_desc, @test_block
17
+ Factory.context_class { test(d, &b) }
18
+
19
+ assert_equal @test_count_before+1, Assert.suite.tests.size
20
+
21
+ exp_test_name = @test_desc
22
+ built_test = Assert.suite.tests.last
23
+ assert_kind_of Assert::Test, built_test
24
+ assert_equal exp_test_name, built_test.name
25
+ assert_equal @test_block, built_test.code
26
+ end
27
+
28
+ should "build a test using `should` with a desc and code block" do
29
+ d, b = @test_desc, @test_block
30
+ Factory.context_class { should(d, &b) }
31
+
32
+ assert_equal @test_count_before+1, Assert.suite.tests.size
33
+
34
+ exp_test_name = "should #{@test_desc}"
35
+ built_test = Assert.suite.tests.last
36
+ assert_kind_of Assert::Test, built_test
37
+ assert_equal exp_test_name, built_test.name
38
+ assert_equal @test_block, built_test.code
39
+ end
40
+
41
+ should "build a test that skips when `test` called with no block" do
42
+ d = @test_desc
43
+ context_class = Factory.context_class { test(d) }
44
+ context_info = Factory.context_info(context_class)
45
+ context = context_class.new(Factory.test("whatever", context_info))
46
+
47
+ assert_equal @test_count_before+1, Assert.suite.tests.size
48
+ assert_raises(Assert::Result::TestSkipped) do
49
+ context.instance_eval(&Assert.suite.tests.last.code)
50
+ end
51
+ end
52
+
53
+ should "build a test that skips when `should` called with no block" do
54
+ d = @test_desc
55
+ context_class = Factory.context_class { should(d) }
56
+ context_info = Factory.context_info(context_class)
57
+ context = context_class.new(Factory.test("whatever", context_info))
58
+
59
+ assert_equal @test_count_before+1, Assert.suite.tests.size
60
+ assert_raises(Assert::Result::TestSkipped) do
61
+ context.instance_eval(&Assert.suite.tests.last.code)
62
+ end
63
+ end
64
+
65
+ should "build a test that skips when `test_eventually` called" do
66
+ d, b = @test_desc, @test_block
67
+ context_class = Factory.context_class { test_eventually(d, &b) }
68
+ context_info = Factory.context_info(context_class)
69
+ context = context_class.new(Factory.test("whatever", context_info))
70
+
71
+ assert_equal @test_count_before+1, Assert.suite.tests.size
72
+ assert_raises(Assert::Result::TestSkipped) do
73
+ context.instance_eval(&Assert.suite.tests.last.code)
74
+ end
75
+ end
76
+
77
+ should "build a test that skips when `should_eventually` called" do
78
+ d, b = @test_desc, @test_block
79
+ context_class = Factory.context_class { should_eventually(d, &b) }
80
+ context_info = Factory.context_info(context_class)
81
+ context = context_class.new(Factory.test("whatever", context_info))
82
+
83
+ assert_equal @test_count_before+1, Assert.suite.tests.size
84
+ assert_raises(Assert::Result::TestSkipped) do
85
+ context.instance_eval(&Assert.suite.tests.last.code)
86
+ end
87
+ end
88
+
89
+ should "build a test from a macro using `test`" do
90
+ d, b = @test_desc, @test_block
91
+ m = Assert::Macro.new{ test(d, &b); test(d, &b) }
92
+ Factory.context_class { test(m) }
93
+
94
+ assert_equal @test_count_before+2, Assert.suite.tests.size
95
+ end
96
+
97
+ should "build a test from a macro using `should`" do
98
+ d, b = @test_desc, @test_block
99
+ m = Assert::Macro.new{ should(d, &b); should(d, &b) }
100
+ Factory.context_class { should(m) }
101
+
102
+ assert_equal @test_count_before+2, Assert.suite.tests.size
103
+ end
104
+
105
+ should "build a test that skips from a macro using `test_eventually`" do
106
+ d, b = @test_desc, @test_block
107
+ m = Assert::Macro.new{ test(d, &b); test(d, &b) }
108
+ context_class = Factory.context_class { test_eventually(m) }
109
+ context_info = Factory.context_info(context_class)
110
+ context = context_class.new(Factory.test("whatever", context_info))
111
+
112
+ assert_equal @test_count_before+1, Assert.suite.tests.size
113
+ assert_raises(Assert::Result::TestSkipped) do
114
+ context.instance_eval(&Assert.suite.tests.last.code)
115
+ end
116
+ end
117
+
118
+ should "build a test that skips from a macro using `should_eventually`" do
119
+ d, b = @test_desc, @test_block
120
+ m = Assert::Macro.new{ should(d, &b); should(d, &b) }
121
+ context_class = Factory.context_class { should_eventually(m) }
122
+ context_info = Factory.context_info(context_class)
123
+ context = context_class.new(Factory.test("whatever", context_info))
124
+
125
+ assert_equal @test_count_before+1, Assert.suite.tests.size
126
+ assert_raises(Assert::Result::TestSkipped) do
127
+ context.instance_eval(&Assert.suite.tests.last.code)
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+
134
+ end