capybara_minitest_spec 0.2.2 → 1.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.
- data/.rvmrc +1 -1
- data/HISTORY.md +0 -0
- data/README.md +31 -32
- data/Rakefile +2 -2
- data/capybara_minitest_spec.gemspec +6 -4
- data/lib/capybara_minitest_spec.rb +53 -6
- data/lib/capybara_minitest_spec/test_name.rb +67 -0
- data/lib/capybara_minitest_spec/version.rb +1 -1
- data/spec/capybara_minitest_spec.spec.rb +13 -0
- data/spec/capybara_rspec_matchers.spec.rb +580 -0
- data/spec/helper.rb +39 -0
- data/{test_app → spec/test_app}/test_app.rb +0 -0
- data/{test_app → spec/test_app}/views/buttons.erb +0 -0
- data/{test_app → spec/test_app}/views/fieldsets.erb +0 -0
- data/{test_app → spec/test_app}/views/form.erb +0 -0
- data/{test_app → spec/test_app}/views/frame_one.erb +0 -0
- data/{test_app → spec/test_app}/views/frame_two.erb +0 -0
- data/{test_app → spec/test_app}/views/header_links.erb +0 -0
- data/{test_app → spec/test_app}/views/host_links.erb +0 -0
- data/{test_app → spec/test_app}/views/popup_one.erb +0 -0
- data/{test_app → spec/test_app}/views/popup_two.erb +0 -0
- data/{test_app → spec/test_app}/views/postback.erb +0 -0
- data/{test_app → spec/test_app}/views/tables.erb +0 -0
- data/{test_app → spec/test_app}/views/with_html.erb +0 -0
- data/{test_app → spec/test_app}/views/with_html_entities.erb +0 -0
- data/{test_app → spec/test_app}/views/with_js.erb +0 -0
- data/{test_app → spec/test_app}/views/with_scope.erb +0 -0
- data/{test_app → spec/test_app}/views/with_simple_html.erb +0 -0
- data/{test_app → spec/test_app}/views/within_frames.erb +0 -0
- data/{test_app → spec/test_app}/views/within_popups.erb +0 -0
- data/spec/test_name.spec.rb +47 -0
- metadata +142 -121
- data/lib/capybara_minitest_spec/matcher.rb +0 -126
- data/test/capybara_node_matchers_spec.rb +0 -471
- data/test/custom_matcher_spec.rb +0 -29
- data/test/matcher_spec.rb +0 -45
- data/test/spec_helper.rb +0 -14
- data/test_app/driver.rb +0 -297
- data/test_app/fixtures/capybara.jpg +0 -3
- data/test_app/fixtures/test_file.txt +0 -1
- data/test_app/public/test.js +0 -43
- data/test_app/session.rb +0 -154
- data/test_app/session/all_spec.rb +0 -78
- data/test_app/session/attach_file_spec.rb +0 -73
- data/test_app/session/check_spec.rb +0 -65
- data/test_app/session/choose_spec.rb +0 -26
- data/test_app/session/click_button_spec.rb +0 -304
- data/test_app/session/click_link_or_button_spec.rb +0 -36
- data/test_app/session/click_link_spec.rb +0 -119
- data/test_app/session/current_host_spec.rb +0 -68
- data/test_app/session/current_url_spec.rb +0 -15
- data/test_app/session/fill_in_spec.rb +0 -125
- data/test_app/session/find_button_spec.rb +0 -18
- data/test_app/session/find_by_id_spec.rb +0 -18
- data/test_app/session/find_field_spec.rb +0 -26
- data/test_app/session/find_link_spec.rb +0 -19
- data/test_app/session/find_spec.rb +0 -149
- data/test_app/session/first_spec.rb +0 -105
- data/test_app/session/has_button_spec.rb +0 -32
- data/test_app/session/has_content_spec.rb +0 -106
- data/test_app/session/has_css_spec.rb +0 -243
- data/test_app/session/has_field_spec.rb +0 -192
- data/test_app/session/has_link_spec.rb +0 -37
- data/test_app/session/has_select_spec.rb +0 -129
- data/test_app/session/has_selector_spec.rb +0 -129
- data/test_app/session/has_table_spec.rb +0 -96
- data/test_app/session/has_xpath_spec.rb +0 -123
- data/test_app/session/headers.rb +0 -19
- data/test_app/session/javascript.rb +0 -289
- data/test_app/session/response_code.rb +0 -19
- data/test_app/session/select_spec.rb +0 -113
- data/test_app/session/text_spec.rb +0 -19
- data/test_app/session/uncheck_spec.rb +0 -21
- data/test_app/session/unselect_spec.rb +0 -61
- data/test_app/session/within_spec.rb +0 -178
data/spec/helper.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'awesome_print'
|
5
|
+
|
6
|
+
require 'capybara/dsl'
|
7
|
+
require 'capybara_minitest_spec'
|
8
|
+
|
9
|
+
# Make all specs a subclass of MiniTest::Spec.
|
10
|
+
MiniTest::Spec.register_spec_type //, MiniTest::Spec
|
11
|
+
|
12
|
+
# Bridge some gaps between RSpec and MiniTest.
|
13
|
+
class MiniTest::Spec
|
14
|
+
|
15
|
+
class << self
|
16
|
+
alias_method :context, :describe
|
17
|
+
end
|
18
|
+
|
19
|
+
alias_method :expect, :proc
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
module MiniTest::Assertions
|
24
|
+
|
25
|
+
# Yield, rescue, compare exception's message.
|
26
|
+
def assert_raises_with_message(exception_message)
|
27
|
+
yield
|
28
|
+
rescue Exception => exception
|
29
|
+
exception_raised = true
|
30
|
+
assert_match exception_message, exception.message
|
31
|
+
ensure
|
32
|
+
assert exception_raised, 'expected exception to be raised'
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
module MiniTest::Expectations
|
38
|
+
infect_an_assertion :assert_raises_with_message, :must_raise_with_message
|
39
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe CapybaraMiniTestSpec::TestName do
|
4
|
+
|
5
|
+
describe CapybaraMiniTestSpec::PositiveTestName do
|
6
|
+
|
7
|
+
let(:positive) { CapybaraMiniTestSpec::PositiveTestName.new(:have_css) }
|
8
|
+
|
9
|
+
specify '#assertion_name returns assert_page_has_css' do
|
10
|
+
positive.assertion_name.must_equal 'assert_page_has_css'
|
11
|
+
end
|
12
|
+
|
13
|
+
specify '#expectation_name returns must_have_css' do
|
14
|
+
positive.expectation_name.must_equal 'must_have_css'
|
15
|
+
end
|
16
|
+
|
17
|
+
specify '#match_method returns :matches?' do
|
18
|
+
positive.match_method.must_equal :matches?
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe CapybaraMiniTestSpec::NegativeTestName do
|
24
|
+
|
25
|
+
let(:negative) { CapybaraMiniTestSpec::NegativeTestName.new(:have_css) }
|
26
|
+
|
27
|
+
specify '#assertion_name returns refute_page_has_css' do
|
28
|
+
negative.assertion_name.must_equal 'refute_page_has_css'
|
29
|
+
end
|
30
|
+
|
31
|
+
specify '#expectation_name returns wont_have_css' do
|
32
|
+
negative.expectation_name.must_equal 'wont_have_css'
|
33
|
+
end
|
34
|
+
|
35
|
+
specify '#match_method returns :does_not_match?' do
|
36
|
+
negative.match_method.must_equal :does_not_match?
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
specify '#matcher returns actual Capybara RSpec matcher' do
|
42
|
+
matcher_name = CapybaraMiniTestSpec::TestName.new(:have_css)
|
43
|
+
rspec_matcher = matcher_name.matcher('.asdf')
|
44
|
+
rspec_matcher.must_be_instance_of Capybara::RSpecMatchers::HaveSelector
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
metadata
CHANGED
@@ -1,164 +1,185 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara_minitest_spec
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jared Ning
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-11-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: capybara
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2'
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: minitest
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
25
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: minitest
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2'
|
36
38
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: sinatra
|
40
39
|
prerelease: false
|
41
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: awesome_print
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
57
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sinatra
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
46
85
|
version: 0.9.4
|
47
86
|
type: :development
|
48
|
-
|
49
|
-
|
50
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.9.4
|
94
|
+
description: Use Capybara matchers with MiniTest. Specifically, it defines MiniTest::Spec
|
95
|
+
expectations like page.must_have_content('content').
|
96
|
+
email:
|
51
97
|
- jared@redningja.com
|
52
98
|
executables: []
|
53
|
-
|
54
99
|
extensions: []
|
55
|
-
|
56
100
|
extra_rdoc_files: []
|
57
|
-
|
58
|
-
files:
|
101
|
+
files:
|
59
102
|
- .gemtest
|
60
103
|
- .gitignore
|
61
104
|
- .gitmodules
|
62
105
|
- .rvmrc
|
63
106
|
- .travis.yml
|
64
107
|
- Gemfile
|
108
|
+
- HISTORY.md
|
65
109
|
- README.md
|
66
110
|
- Rakefile
|
67
111
|
- capybara_minitest_spec.gemspec
|
68
112
|
- lib/capybara_minitest_spec.rb
|
69
|
-
- lib/capybara_minitest_spec/
|
113
|
+
- lib/capybara_minitest_spec/test_name.rb
|
70
114
|
- lib/capybara_minitest_spec/version.rb
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
- test_app/
|
76
|
-
- test_app/
|
77
|
-
- test_app/
|
78
|
-
- test_app/
|
79
|
-
- test_app/
|
80
|
-
- test_app/
|
81
|
-
- test_app/
|
82
|
-
- test_app/
|
83
|
-
- test_app/
|
84
|
-
- test_app/
|
85
|
-
- test_app/
|
86
|
-
- test_app/
|
87
|
-
- test_app/
|
88
|
-
- test_app/
|
89
|
-
- test_app/
|
90
|
-
- test_app/
|
91
|
-
- test_app/
|
92
|
-
- test_app/
|
93
|
-
-
|
94
|
-
- test_app/session/find_spec.rb
|
95
|
-
- test_app/session/first_spec.rb
|
96
|
-
- test_app/session/has_button_spec.rb
|
97
|
-
- test_app/session/has_content_spec.rb
|
98
|
-
- test_app/session/has_css_spec.rb
|
99
|
-
- test_app/session/has_field_spec.rb
|
100
|
-
- test_app/session/has_link_spec.rb
|
101
|
-
- test_app/session/has_select_spec.rb
|
102
|
-
- test_app/session/has_selector_spec.rb
|
103
|
-
- test_app/session/has_table_spec.rb
|
104
|
-
- test_app/session/has_xpath_spec.rb
|
105
|
-
- test_app/session/headers.rb
|
106
|
-
- test_app/session/javascript.rb
|
107
|
-
- test_app/session/response_code.rb
|
108
|
-
- test_app/session/select_spec.rb
|
109
|
-
- test_app/session/text_spec.rb
|
110
|
-
- test_app/session/uncheck_spec.rb
|
111
|
-
- test_app/session/unselect_spec.rb
|
112
|
-
- test_app/session/within_spec.rb
|
113
|
-
- test_app/test_app.rb
|
114
|
-
- test_app/views/buttons.erb
|
115
|
-
- test_app/views/fieldsets.erb
|
116
|
-
- test_app/views/form.erb
|
117
|
-
- test_app/views/frame_one.erb
|
118
|
-
- test_app/views/frame_two.erb
|
119
|
-
- test_app/views/header_links.erb
|
120
|
-
- test_app/views/host_links.erb
|
121
|
-
- test_app/views/popup_one.erb
|
122
|
-
- test_app/views/popup_two.erb
|
123
|
-
- test_app/views/postback.erb
|
124
|
-
- test_app/views/tables.erb
|
125
|
-
- test_app/views/with_html.erb
|
126
|
-
- test_app/views/with_html_entities.erb
|
127
|
-
- test_app/views/with_js.erb
|
128
|
-
- test_app/views/with_scope.erb
|
129
|
-
- test_app/views/with_simple_html.erb
|
130
|
-
- test_app/views/within_frames.erb
|
131
|
-
- test_app/views/within_popups.erb
|
132
|
-
has_rdoc: true
|
115
|
+
- spec/capybara_minitest_spec.spec.rb
|
116
|
+
- spec/capybara_rspec_matchers.spec.rb
|
117
|
+
- spec/helper.rb
|
118
|
+
- spec/test_app/test_app.rb
|
119
|
+
- spec/test_app/views/buttons.erb
|
120
|
+
- spec/test_app/views/fieldsets.erb
|
121
|
+
- spec/test_app/views/form.erb
|
122
|
+
- spec/test_app/views/frame_one.erb
|
123
|
+
- spec/test_app/views/frame_two.erb
|
124
|
+
- spec/test_app/views/header_links.erb
|
125
|
+
- spec/test_app/views/host_links.erb
|
126
|
+
- spec/test_app/views/popup_one.erb
|
127
|
+
- spec/test_app/views/popup_two.erb
|
128
|
+
- spec/test_app/views/postback.erb
|
129
|
+
- spec/test_app/views/tables.erb
|
130
|
+
- spec/test_app/views/with_html.erb
|
131
|
+
- spec/test_app/views/with_html_entities.erb
|
132
|
+
- spec/test_app/views/with_js.erb
|
133
|
+
- spec/test_app/views/with_scope.erb
|
134
|
+
- spec/test_app/views/with_simple_html.erb
|
135
|
+
- spec/test_app/views/within_frames.erb
|
136
|
+
- spec/test_app/views/within_popups.erb
|
137
|
+
- spec/test_name.spec.rb
|
133
138
|
homepage: https://github.com/ordinaryzelig/capybara_minitest_spec
|
134
139
|
licenses: []
|
135
|
-
|
136
140
|
post_install_message:
|
137
141
|
rdoc_options: []
|
138
|
-
|
139
|
-
require_paths:
|
142
|
+
require_paths:
|
140
143
|
- lib
|
141
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
145
|
none: false
|
143
|
-
requirements:
|
144
|
-
- -
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version:
|
147
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
151
|
none: false
|
149
|
-
requirements:
|
150
|
-
- -
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
requirements:
|
153
|
+
- - ! '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
153
156
|
requirements: []
|
154
|
-
|
155
157
|
rubyforge_project: capybara_minitest_spec
|
156
|
-
rubygems_version: 1.
|
158
|
+
rubygems_version: 1.8.24
|
157
159
|
signing_key:
|
158
160
|
specification_version: 3
|
159
|
-
summary: MiniTest::Spec
|
160
|
-
test_files:
|
161
|
-
-
|
162
|
-
-
|
163
|
-
-
|
164
|
-
-
|
161
|
+
summary: Capybara + MiniTest::Spec
|
162
|
+
test_files:
|
163
|
+
- spec/capybara_minitest_spec.spec.rb
|
164
|
+
- spec/capybara_rspec_matchers.spec.rb
|
165
|
+
- spec/helper.rb
|
166
|
+
- spec/test_app/test_app.rb
|
167
|
+
- spec/test_app/views/buttons.erb
|
168
|
+
- spec/test_app/views/fieldsets.erb
|
169
|
+
- spec/test_app/views/form.erb
|
170
|
+
- spec/test_app/views/frame_one.erb
|
171
|
+
- spec/test_app/views/frame_two.erb
|
172
|
+
- spec/test_app/views/header_links.erb
|
173
|
+
- spec/test_app/views/host_links.erb
|
174
|
+
- spec/test_app/views/popup_one.erb
|
175
|
+
- spec/test_app/views/popup_two.erb
|
176
|
+
- spec/test_app/views/postback.erb
|
177
|
+
- spec/test_app/views/tables.erb
|
178
|
+
- spec/test_app/views/with_html.erb
|
179
|
+
- spec/test_app/views/with_html_entities.erb
|
180
|
+
- spec/test_app/views/with_js.erb
|
181
|
+
- spec/test_app/views/with_scope.erb
|
182
|
+
- spec/test_app/views/with_simple_html.erb
|
183
|
+
- spec/test_app/views/within_frames.erb
|
184
|
+
- spec/test_app/views/within_popups.erb
|
185
|
+
- spec/test_name.spec.rb
|
@@ -1,126 +0,0 @@
|
|
1
|
-
module CapybaraMiniTestSpec
|
2
|
-
class Matcher
|
3
|
-
|
4
|
-
attr_reader :name
|
5
|
-
|
6
|
-
def initialize(node_matcher_name)
|
7
|
-
@name = Name.new(node_matcher_name, true)
|
8
|
-
define_expectations
|
9
|
-
end
|
10
|
-
|
11
|
-
def define_expectations
|
12
|
-
# Define positive expectations.
|
13
|
-
define_expectation
|
14
|
-
# Define negative expectations.
|
15
|
-
@name.negate!
|
16
|
-
define_expectation
|
17
|
-
end
|
18
|
-
|
19
|
-
def undefine_assertions
|
20
|
-
undefine_assertion
|
21
|
-
@name.negate!
|
22
|
-
undefine_assertion
|
23
|
-
end
|
24
|
-
|
25
|
-
# Send page the matcher name with args.
|
26
|
-
# E.g. page.has_css?(*args)
|
27
|
-
def test(page, *args)
|
28
|
-
wrap(page).send(name.original, *args)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Compose failure message.
|
32
|
-
# E.g. Matcher failed: has_css?("expected", {:count => 1})
|
33
|
-
def self.failure_message(assertion_method, matcher_name, *args)
|
34
|
-
if assertion_method == 'assert'
|
35
|
-
message = "Matcher failed: "
|
36
|
-
else
|
37
|
-
message = 'Matcher should have failed: '
|
38
|
-
end
|
39
|
-
message += "#{matcher_name}(#{args.map(&:inspect).join(', ')})"
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def define_expectation
|
45
|
-
define_assertion
|
46
|
-
infect_assertion
|
47
|
-
end
|
48
|
-
|
49
|
-
# Define an assertion with the matcher name in MiniTest::Assertions.
|
50
|
-
# For example, if the matcher name is has_css?,
|
51
|
-
# the assertion would be called assert_page_has_css.
|
52
|
-
def define_assertion
|
53
|
-
# scope self to be available in the method definition.
|
54
|
-
matcher = self
|
55
|
-
assertion_method = name.positive? ? 'assert' : 'refute'
|
56
|
-
MiniTest::Assertions.send :define_method, name.assertion do |page, *args|
|
57
|
-
message = matcher.class.failure_message(assertion_method, matcher.name.original, *args)
|
58
|
-
send(assertion_method, matcher.test(page, *args), message)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def undefine_assertion
|
63
|
-
MiniTest::Assertions.send :undef_method, @name.assertion
|
64
|
-
end
|
65
|
-
|
66
|
-
def infect_assertion
|
67
|
-
MiniTest::Expectations.infect_an_assertion @name.assertion, @name.expectation, true
|
68
|
-
end
|
69
|
-
|
70
|
-
# Turn a string into a Capybara node if it's not already.
|
71
|
-
# Copied from Capybara::RSpecMatchers::HaveMatcher.
|
72
|
-
def wrap(actual)
|
73
|
-
if actual.respond_to?("has_selector?")
|
74
|
-
actual
|
75
|
-
else
|
76
|
-
Capybara.string(actual.to_s)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Represents the a matcher name.
|
81
|
-
# Returns different forms of the name depending on whether it is in a positive or negative state.
|
82
|
-
class Name
|
83
|
-
|
84
|
-
attr_reader :original
|
85
|
-
|
86
|
-
def initialize(name, positive)
|
87
|
-
@original = name.to_s
|
88
|
-
@positive = positive
|
89
|
-
end
|
90
|
-
|
91
|
-
def positive?
|
92
|
-
!!@positive
|
93
|
-
end
|
94
|
-
|
95
|
-
def negate!
|
96
|
-
@positive = !positive?
|
97
|
-
end
|
98
|
-
|
99
|
-
def without_question_mark
|
100
|
-
@original.to_s.sub /\?$/, ''
|
101
|
-
end
|
102
|
-
|
103
|
-
def have
|
104
|
-
without_question_mark.sub /has_/, 'have_'
|
105
|
-
end
|
106
|
-
|
107
|
-
def assertion
|
108
|
-
if positive?
|
109
|
-
"assert_page_#{without_question_mark}"
|
110
|
-
else
|
111
|
-
"refute_page_#{without_question_mark}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def expectation
|
116
|
-
if positive?
|
117
|
-
"must_#{have}"
|
118
|
-
else
|
119
|
-
"wont_#{have}"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|