minitest-matchers 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.txt CHANGED
@@ -80,6 +80,18 @@ For use with Rails check out (ValidAttribute + Capybara):
80
80
  wont { have_valid(:title).when("", nil, "Bad") }
81
81
  end
82
82
 
83
+ You can also register matcher so that it works similar to built-in
84
+ assertions and expectations. Note subject must be the first argument in assertion.
85
+
86
+ MiniTest::Unit::TestCase.register_matcher HaveContent, :have_content
87
+ MiniTest::Unit::TestCase.register_matcher :have_selector, :have_selector
88
+
89
+ assert_have_content page, "Hello"
90
+ assert_Have_selector page, :xpath, "//table/tr"
91
+
92
+ page.must_have_content "Hello"
93
+ page.must_Have_selector :xpath, "//table/tr"
94
+
83
95
  == REQUIREMENTS:
84
96
 
85
97
  * minitest >= 2.7.0
@@ -1,7 +1,7 @@
1
1
  require "minitest/spec"
2
2
 
3
3
  module MiniTest::Matchers
4
- VERSION = "1.1.3" # :nodoc:
4
+ VERSION = "1.2.0" # :nodoc:
5
5
  end
6
6
 
7
7
  module MiniTest
@@ -19,10 +19,10 @@ module MiniTest
19
19
  result = matcher.matches? subject
20
20
 
21
21
  msg = message(msg) do
22
- if matcher.respond_to? :failure_message
23
- matcher.failure_message
24
- else
22
+ if matcher.respond_to? :failure_message_for_should
25
23
  matcher.failure_message_for_should
24
+ else
25
+ matcher.failure_message
26
26
  end
27
27
  end
28
28
 
@@ -40,10 +40,10 @@ module MiniTest
40
40
 
41
41
  def assert_wont matcher, subject, msg = nil
42
42
  msg = message(msg) do
43
- if matcher.respond_to? :negative_failure_message
44
- matcher.negative_failure_message
45
- else
43
+ if matcher.respond_to? :failure_message_for_should_not
46
44
  matcher.failure_message_for_should_not
45
+ else
46
+ matcher.negative_failure_message
47
47
  end
48
48
  end
49
49
 
@@ -136,6 +136,71 @@ class MiniTest::Spec
136
136
  end
137
137
  end
138
138
 
139
+ class MiniTest::Unit::TestCase
140
+ ##
141
+ # Defines assert_* assetion and must_* expectation for a matcher
142
+ #
143
+ # Example:
144
+ #
145
+ # # Say you're implementing Capybara's HaveContent matcher
146
+ #
147
+ # class HaveContent
148
+ # # ...
149
+ # end
150
+ #
151
+ # MiniTest::Unit::TestCase.register_matcher HaveContent, :have_content
152
+ #
153
+ # class MyTest < Test::Unit::TestCase
154
+ # def test_index
155
+ # visit "/"
156
+ # assert_have_content page, "Hello"
157
+ # assert_have_selector page, :xpath, "//table/tr"
158
+ # end
159
+ # end
160
+ #
161
+ # describe "my test" do
162
+ # test "index" do
163
+ # visit "/"
164
+ # page.must_have_content "Hello"
165
+ # page.must_have_selector :xpath, "//table/tr"
166
+ #
167
+ # # if you set `page` to be implicit subject, following works too:
168
+ # must_have_content "Hello"
169
+ # end
170
+ # end
171
+ #
172
+
173
+ def self.register_matcher matcher, name, exp_name=name
174
+ define_method :"assert_#{name}" do |*args|
175
+ subject = args.shift
176
+
177
+ x = if Symbol === matcher
178
+ send matcher, *args
179
+ else
180
+ matcher.new(*args)
181
+ end
182
+
183
+ assert_must x, subject
184
+ end
185
+
186
+ Object.infect_an_assertion :"assert_#{name}", :"must_#{exp_name}", true
187
+
188
+ define_method :"refute_#{name}" do |*args|
189
+ subject = args.shift
190
+
191
+ x = if Symbol === matcher
192
+ send matcher, *args
193
+ else
194
+ matcher.new(*args)
195
+ end
196
+
197
+ assert_wont x, subject
198
+ end
199
+
200
+ Object.infect_an_assertion :"refute_#{name}", :"wont_#{exp_name}", true
201
+ end
202
+ end
203
+
139
204
  class MiniTest::Spec # :nodoc:
140
205
  include MiniTest::Matchers
141
206
  end
@@ -43,6 +43,38 @@ describe MiniTest::Unit::TestCase do
43
43
  end
44
44
  end
45
45
 
46
+ describe MiniTest::Unit::TestCase, :register_matcher do
47
+ MiniTest::Unit::TestCase.register_matcher KindOfMatcher, :my_kind_of, :be_my_kind_of
48
+ MiniTest::Unit::TestCase.register_matcher :be_kind_of, :meth_kind_of, :meth_my_kind_of
49
+
50
+ it "needs to verify assert_<matcher>" do
51
+ assert_my_kind_of("", String).must_equal true
52
+ proc { assert_my_kind_of [], String }.must_raise MiniTest::Assertion
53
+ end
54
+
55
+ it "needs to verify must_<matcher>" do
56
+ "".must_be_my_kind_of(String).must_equal true
57
+ proc { [].must_be_my_kind_of String }.must_raise MiniTest::Assertion
58
+ end
59
+
60
+ it "needs to verify refute_<matcher>" do
61
+ refute_my_kind_of("", Array).must_equal false
62
+ proc { refute_my_kind_of [], Array }.must_raise MiniTest::Assertion
63
+ end
64
+
65
+ it "needs to verify wont<matcher>" do
66
+ "".wont_be_my_kind_of(Array).must_equal false
67
+ proc { [].wont_be_my_kind_of(Array) }.must_raise MiniTest::Assertion
68
+ end
69
+
70
+ it "accepts method as matcher" do
71
+ assert_meth_kind_of("", String).must_equal true
72
+ proc { assert_meth_kind_of [], String }.must_raise MiniTest::Assertion
73
+ refute_meth_kind_of("", Array).must_equal false
74
+ proc { refute_my_kind_of [], Array }.must_raise MiniTest::Assertion
75
+ end
76
+ end
77
+
46
78
  describe MiniTest::Spec do
47
79
  it "needs to verify must" do
48
80
  [].must(be_kind_of(Array)).must_equal true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-18 00:00:00.000000000 Z
13
+ date: 2012-01-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
17
- requirement: &70162351654440 !ruby/object:Gem::Requirement
17
+ requirement: &70195242850820 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,21 +22,21 @@ dependencies:
22
22
  version: 2.5.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70162351654440
25
+ version_requirements: *70195242850820
26
26
  - !ruby/object:Gem::Dependency
27
- name: minitest
28
- requirement: &70162351653860 !ruby/object:Gem::Requirement
27
+ name: rdoc
28
+ requirement: &70195242850000 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '2.8'
33
+ version: '3.10'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70162351653860
36
+ version_requirements: *70195242850000
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: hoe
39
- requirement: &70162351653300 !ruby/object:Gem::Requirement
39
+ requirement: &70195242849340 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: '2.12'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70162351653300
47
+ version_requirements: *70195242849340
48
48
  description: ! 'minitest-matchers adds support for RSpec/Shoulda-style matchers to
49
49
 
50
50
  minitest/unit and minitest/spec.
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  version: '0'
102
102
  requirements: []
103
103
  rubyforge_project: minitest-matchers
104
- rubygems_version: 1.8.10
104
+ rubygems_version: 1.8.11
105
105
  signing_key:
106
106
  specification_version: 3
107
107
  summary: minitest-matchers adds support for RSpec/Shoulda-style matchers to minitest/unit