rails-dom-testing 2.1.1 → 2.3.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.
- checksums.yaml +4 -4
- data/README.md +41 -20
- data/lib/rails/dom/testing/assertions/dom_assertions.rb +58 -11
- data/lib/rails/dom/testing/assertions/selector_assertions/html_selector.rb +151 -119
- data/lib/rails/dom/testing/assertions/selector_assertions/substitution_context.rb +38 -24
- data/lib/rails/dom/testing/assertions/selector_assertions.rb +311 -230
- data/lib/rails/dom/testing/assertions.rb +4 -3
- data/lib/rails/dom/testing/railtie.rb +14 -0
- data/lib/rails/dom/testing/version.rb +3 -1
- data/lib/rails/dom/testing.rb +52 -0
- data/lib/rails-dom-testing.rb +4 -1
- data/test/dom_assertions_test.rb +93 -5
- data/test/parser_selection_test.rb +75 -0
- data/test/selector_assertions_test.rb +245 -72
- data/test/test_helper.rb +21 -4
- metadata +14 -42
- data/lib/rails/dom/testing/assertions/selector_assertions/count_describable.rb +0 -28
@@ -1,11 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require 'rails/dom/testing/assertions/selector_assertions'
|
4
|
+
require "test_helper"
|
5
5
|
|
6
6
|
class AssertSelectTest < ActiveSupport::TestCase
|
7
7
|
Assertion = Minitest::Assertion
|
8
8
|
|
9
|
+
include DomTestingHelpers
|
9
10
|
include Rails::Dom::Testing::Assertions::SelectorAssertions
|
10
11
|
|
11
12
|
def assert_failure(message, &block)
|
@@ -15,23 +16,23 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
15
16
|
end
|
16
17
|
|
17
18
|
#
|
18
|
-
# Test
|
19
|
+
# Test assert_select.
|
19
20
|
#
|
20
21
|
|
21
22
|
def test_assert_select
|
22
|
-
render_html
|
23
|
+
render_html '<div id="1"></div><div id="2"></div>'
|
23
24
|
assert_select "div", 2
|
24
|
-
assert_failure(/Expected at least 1 element matching
|
25
|
+
assert_failure(/Expected at least 1 element matching "p", found 0/) { assert_select "p" }
|
25
26
|
end
|
26
27
|
|
27
28
|
def test_equality_integer
|
28
|
-
render_html
|
29
|
-
assert_failure(/Expected exactly 3 elements matching
|
30
|
-
assert_failure(/Expected exactly 0 elements matching
|
29
|
+
render_html '<div id="1"></div><div id="2"></div>'
|
30
|
+
assert_failure(/Expected exactly 3 elements matching "div", found 2/) { assert_select "div", 3 }
|
31
|
+
assert_failure(/Expected exactly 0 elements matching "div", found 2/) { assert_select "div", 0 }
|
31
32
|
end
|
32
33
|
|
33
34
|
def test_equality_true_false
|
34
|
-
render_html
|
35
|
+
render_html '<div id="1"></div><div id="2"></div>'
|
35
36
|
assert_nothing_raised { assert_select "div" }
|
36
37
|
assert_raise(Assertion) { assert_select "p" }
|
37
38
|
assert_nothing_raised { assert_select "div", true }
|
@@ -49,21 +50,21 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def test_equality_false_message
|
52
|
-
render_html
|
53
|
-
assert_failure(/Expected exactly 0 elements matching
|
53
|
+
render_html '<div id="1"></div><div id="2"></div>'
|
54
|
+
assert_failure(/Expected exactly 0 elements matching "div", found 2/) { assert_select "div", false }
|
54
55
|
end
|
55
56
|
|
56
57
|
def test_equality_string_and_regexp
|
57
|
-
render_html
|
58
|
+
render_html '<div id="1">foo</div><div id="2">foo</div>'
|
58
59
|
assert_nothing_raised { assert_select "div", "foo" }
|
59
60
|
assert_raise(Assertion) { assert_select "div", "bar" }
|
60
|
-
assert_nothing_raised { assert_select "div", :
|
61
|
-
assert_raise(Assertion) { assert_select "div", :
|
61
|
+
assert_nothing_raised { assert_select "div", text: "foo" }
|
62
|
+
assert_raise(Assertion) { assert_select "div", text: "bar" }
|
62
63
|
assert_nothing_raised { assert_select "div", /(foo|bar)/ }
|
63
64
|
assert_raise(Assertion) { assert_select "div", /foobar/ }
|
64
|
-
assert_nothing_raised { assert_select "div", :
|
65
|
-
assert_raise(Assertion) { assert_select "div", :
|
66
|
-
assert_raise(Assertion) { assert_select "p", :
|
65
|
+
assert_nothing_raised { assert_select "div", text: /(foo|bar)/ }
|
66
|
+
assert_raise(Assertion) { assert_select "div", text: /foobar/ }
|
67
|
+
assert_raise(Assertion) { assert_select "p", text: /foobar/ }
|
67
68
|
end
|
68
69
|
|
69
70
|
def test_equality_of_html
|
@@ -72,57 +73,70 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
72
73
|
html = "<em>\"This is <strong>not</strong> a big problem,\"</em> he said."
|
73
74
|
assert_nothing_raised { assert_select "p", text }
|
74
75
|
assert_raise(Assertion) { assert_select "p", html }
|
75
|
-
assert_nothing_raised { assert_select "p", :html
|
76
|
-
assert_raise(Assertion) { assert_select "p", :
|
76
|
+
assert_nothing_raised { assert_select "p", html: html }
|
77
|
+
assert_raise(Assertion) { assert_select "p", html: text }
|
77
78
|
# No stripping for pre.
|
78
79
|
render_html %Q{<pre>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</pre>}
|
79
80
|
text = "\n\"This is not a big problem,\" he said.\n"
|
80
81
|
html = "\n<em>\"This is <strong>not</strong> a big problem,\"</em> he said.\n"
|
81
82
|
assert_nothing_raised { assert_select "pre", text }
|
82
83
|
assert_raise(Assertion) { assert_select "pre", html }
|
83
|
-
assert_nothing_raised { assert_select "pre", :html
|
84
|
-
assert_raise(Assertion) { assert_select "pre", :
|
84
|
+
assert_nothing_raised { assert_select "pre", html: html }
|
85
|
+
assert_raise(Assertion) { assert_select "pre", html: text }
|
85
86
|
end
|
86
87
|
|
87
88
|
def test_strip_textarea
|
88
|
-
render_html
|
89
|
+
render_html "<textarea>\n\nfoo\n</textarea>"
|
89
90
|
assert_select "textarea", "\nfoo\n"
|
90
|
-
render_html
|
91
|
+
render_html "<textarea>\nfoo</textarea>"
|
91
92
|
assert_select "textarea", "foo"
|
92
93
|
end
|
93
94
|
|
94
95
|
def test_counts
|
95
|
-
render_html
|
96
|
+
render_html '<div id="1">foo</div><div id="2">foo</div>'
|
96
97
|
assert_nothing_raised { assert_select "div", 2 }
|
97
|
-
assert_failure(/Expected exactly 3 elements matching
|
98
|
+
assert_failure(/Expected exactly 3 elements matching "div", found 2/) do
|
98
99
|
assert_select "div", 3
|
99
100
|
end
|
100
101
|
assert_nothing_raised { assert_select "div", 1..2 }
|
101
|
-
assert_failure(/Expected between 3 and 4 elements matching
|
102
|
+
assert_failure(/Expected between 3 and 4 elements matching "div", found 2/) do
|
102
103
|
assert_select "div", 3..4
|
103
104
|
end
|
104
|
-
assert_nothing_raised { assert_select "div", :
|
105
|
-
assert_failure(/Expected exactly 3 elements matching
|
106
|
-
assert_select "div", :
|
105
|
+
assert_nothing_raised { assert_select "div", count: 2 }
|
106
|
+
assert_failure(/Expected exactly 3 elements matching "div", found 2/) do
|
107
|
+
assert_select "div", count: 3
|
107
108
|
end
|
108
|
-
assert_nothing_raised { assert_select "div", :
|
109
|
-
assert_nothing_raised { assert_select "div", :
|
110
|
-
assert_failure(/Expected at least 3 elements matching
|
111
|
-
assert_select "div", :
|
109
|
+
assert_nothing_raised { assert_select "div", minimum: 1 }
|
110
|
+
assert_nothing_raised { assert_select "div", minimum: 2 }
|
111
|
+
assert_failure(/Expected at least 3 elements matching "div", found 2/) do
|
112
|
+
assert_select "div", minimum: 3
|
112
113
|
end
|
113
|
-
assert_nothing_raised { assert_select "div", :
|
114
|
-
assert_nothing_raised { assert_select "div", :
|
115
|
-
assert_failure(/Expected at most 1 element matching
|
116
|
-
assert_select "div", :
|
114
|
+
assert_nothing_raised { assert_select "div", maximum: 2 }
|
115
|
+
assert_nothing_raised { assert_select "div", maximum: 3 }
|
116
|
+
assert_failure(/Expected at most 1 element matching "div", found 2/) do
|
117
|
+
assert_select "div", maximum: 1
|
117
118
|
end
|
118
|
-
assert_nothing_raised { assert_select "div", :
|
119
|
-
assert_failure(/Expected between 3 and 4 elements matching
|
120
|
-
assert_select "div", :
|
119
|
+
assert_nothing_raised { assert_select "div", minimum: 1, maximum: 2 }
|
120
|
+
assert_failure(/Expected between 3 and 4 elements matching "div", found 2/) do
|
121
|
+
assert_select "div", minimum: 3, maximum: 4
|
121
122
|
end
|
122
123
|
end
|
123
124
|
|
125
|
+
def test_zero_counts_with_block
|
126
|
+
render_html "<div>foo</div>"
|
127
|
+
|
128
|
+
errors = [
|
129
|
+
assert_raises(ArgumentError) { assert_select("p", false) { nil } },
|
130
|
+
assert_raises(ArgumentError) { assert_select("p", 0) { nil } },
|
131
|
+
assert_raises(ArgumentError) { assert_select("p", count: 0) { nil } },
|
132
|
+
assert_raises(ArgumentError) { assert_select("p", 0..0) { nil } },
|
133
|
+
assert_raises(ArgumentError) { assert_select("p", minimum: 0, maximum: 0) { nil } }
|
134
|
+
]
|
135
|
+
assert_equal ["Cannot be called with a block when asserting that a selector does not match"], errors.map(&:message).uniq
|
136
|
+
end
|
137
|
+
|
124
138
|
def test_substitution_values
|
125
|
-
render_html
|
139
|
+
render_html '<div id="1">foo</div><div id="2">foo</div>'
|
126
140
|
assert_select "div:match('id', ?)", /\d+/ do |elements|
|
127
141
|
assert_equal 2, elements.size
|
128
142
|
end
|
@@ -135,13 +149,18 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
135
149
|
end
|
136
150
|
end
|
137
151
|
|
152
|
+
def test_substitution_value_with_quotes
|
153
|
+
render_html '<input placeholder="placeholder with "quotes"" />'
|
154
|
+
assert_select "input[placeholder=?]", 'placeholder with "quotes"'
|
155
|
+
end
|
156
|
+
|
138
157
|
def test_multiple_substitution_values
|
139
158
|
render_html '<input name="foo[12]" value="34">'
|
140
159
|
assert_select ":match('name', ?):match('value', ?)", /\w+\[\d+\]/, /\d+/
|
141
160
|
end
|
142
161
|
|
143
162
|
def test_substitution_values_with_values_other_than_string_or_regexp
|
144
|
-
render_html
|
163
|
+
render_html '<div id="id_string">symbol</div><div id="1">numeric</div>'
|
145
164
|
assert_select "div:match('id', ?)", :id_string do |elements|
|
146
165
|
assert_equal 1, elements.size
|
147
166
|
end
|
@@ -151,19 +170,19 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
151
170
|
end
|
152
171
|
|
153
172
|
def test_assert_select_root_html
|
154
|
-
render_html
|
173
|
+
render_html "<a></a>"
|
155
174
|
|
156
|
-
assert_select
|
175
|
+
assert_select "a"
|
157
176
|
end
|
158
177
|
|
159
178
|
def test_assert_select_root_xml
|
160
179
|
render_xml '<rss version="2.0"></rss>'
|
161
180
|
|
162
|
-
assert_select
|
181
|
+
assert_select "rss"
|
163
182
|
end
|
164
183
|
|
165
184
|
def test_nested_assert_select
|
166
|
-
render_html
|
185
|
+
render_html '<div id="1">foo</div><div id="2">foo</div>'
|
167
186
|
assert_select "div" do |elements|
|
168
187
|
assert_equal 2, elements.size
|
169
188
|
assert_select elements, "#1"
|
@@ -181,7 +200,7 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
181
200
|
end
|
182
201
|
end
|
183
202
|
|
184
|
-
assert_failure(/Expected at least 1 element matching
|
203
|
+
assert_failure(/Expected at least 1 element matching "#4", found 0\./) do
|
185
204
|
assert_select "div" do
|
186
205
|
assert_select "#4"
|
187
206
|
end
|
@@ -189,19 +208,128 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
189
208
|
end
|
190
209
|
|
191
210
|
def test_assert_select_text_match
|
192
|
-
render_html
|
211
|
+
render_html '<div id="1"><span>foo</span></div><div id="2"><span>bar</span></div>'
|
193
212
|
assert_select "div" do
|
194
213
|
assert_nothing_raised { assert_select "div", "foo" }
|
195
214
|
assert_nothing_raised { assert_select "div", "bar" }
|
196
215
|
assert_nothing_raised { assert_select "div", /\w*/ }
|
197
|
-
assert_nothing_raised { assert_select "div", :
|
198
|
-
assert_raise(Assertion) { assert_select "div", :
|
199
|
-
assert_nothing_raised { assert_select "div", :
|
200
|
-
assert_nothing_raised { assert_select "div", :
|
201
|
-
assert_nothing_raised { assert_select "div", :
|
202
|
-
assert_nothing_raised { assert_select "div", :
|
203
|
-
assert_raise(Assertion) { assert_select "div", :
|
216
|
+
assert_nothing_raised { assert_select "div", text: /\w*/, count: 2 }
|
217
|
+
assert_raise(Assertion) { assert_select "div", text: "foo", count: 2 }
|
218
|
+
assert_nothing_raised { assert_select "div", html: "<span>bar</span>" }
|
219
|
+
assert_nothing_raised { assert_select "div", html: "<span>bar</span>" }
|
220
|
+
assert_nothing_raised { assert_select "div", html: /\w*/ }
|
221
|
+
assert_nothing_raised { assert_select "div", html: /\w*/, count: 2 }
|
222
|
+
assert_raise(Assertion) { assert_select "div", html: "<span>foo</span>", count: 2 }
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_assert_select_with_invalid_range
|
227
|
+
render_html "<div>foo</div>"
|
228
|
+
error = assert_raises(ArgumentError) { assert_select("div", 2..1) { nil } }
|
229
|
+
assert_equal "Range begin or :minimum cannot be greater than Range end or :maximum", error.message
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_assert_select_with_invalid_minimum_and_maximum
|
233
|
+
render_html "<div>foo</div>"
|
234
|
+
error = assert_raises(ArgumentError) { assert_select("div", maximum: 0) { nil } }
|
235
|
+
assert_equal "Range begin or :minimum cannot be greater than Range end or :maximum", error.message
|
236
|
+
error = assert_raises(ArgumentError) { assert_select("div", minimum: 2, maximum: 1) { nil } }
|
237
|
+
assert_equal "Range begin or :minimum cannot be greater than Range end or :maximum", error.message
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_assert_select_text_equality_collapses_whitespace
|
241
|
+
render_html "<p>Some\n line-broken\n text</p>"
|
242
|
+
|
243
|
+
assert_nothing_raised do
|
244
|
+
assert_select "p", {
|
245
|
+
text: "Some line-broken text",
|
246
|
+
}, "Whitespace was not collapsed from text"
|
204
247
|
end
|
248
|
+
|
249
|
+
render_html "<p>Some<br><br>line-broken<br><br>text</p>"
|
250
|
+
|
251
|
+
assert_nothing_raised do
|
252
|
+
assert_select "p", {
|
253
|
+
text: "Someline-brokentext",
|
254
|
+
}, "<br> was not removed from text"
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_assert_select_html_equality_respects_whitespace
|
259
|
+
render_html "<p>Some\n line-broken\n text</p>"
|
260
|
+
|
261
|
+
assert_nothing_raised do
|
262
|
+
assert_select "p", {
|
263
|
+
html: "Some\n line-broken\n text",
|
264
|
+
}, "Whitespace was collapsed from html"
|
265
|
+
end
|
266
|
+
|
267
|
+
render_html "<p>Some<br><br>line-broken<br><br>text</p>"
|
268
|
+
|
269
|
+
assert_nothing_raised do
|
270
|
+
assert_select "p", {
|
271
|
+
html: "Some<br><br>line-broken<br><br>text",
|
272
|
+
}, "<br> was removed from html"
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
#
|
277
|
+
# Test assert_not_select.
|
278
|
+
#
|
279
|
+
|
280
|
+
def test_assert_not_select
|
281
|
+
render_html '<div id="1"></div>'
|
282
|
+
assert_not_select "p"
|
283
|
+
assert_failure(/Expected exactly 0 elements matching "div", found 1/) { assert_not_select "div" }
|
284
|
+
assert_failure(/Expected exactly 0 elements matching "div#1", found 1/) { assert_not_select "div#1" }
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_assert_not_select_with_true
|
288
|
+
render_html '<div id="1"></div>'
|
289
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", true }
|
290
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_assert_not_select_with_false
|
294
|
+
render_html '<div id="1"></div>'
|
295
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", false }
|
296
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
297
|
+
end
|
298
|
+
|
299
|
+
def test_assert_not_select_with_integer
|
300
|
+
render_html '<div id="1"></div>'
|
301
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", 1 }
|
302
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_assert_not_select_with_range
|
306
|
+
render_html '<div id="1"></div>'
|
307
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", 1..5 }
|
308
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
309
|
+
end
|
310
|
+
|
311
|
+
def test_assert_not_select_with_count
|
312
|
+
render_html '<div id="1"></div>'
|
313
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", count: 1 }
|
314
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_assert_not_select_with_minimum
|
318
|
+
render_html '<div id="1"></div>'
|
319
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", minimum: 1 }
|
320
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_assert_not_select_with_maximum
|
324
|
+
render_html '<div id="1"></div>'
|
325
|
+
error = assert_raises(ArgumentError) { assert_not_select "div", maximum: 1 }
|
326
|
+
assert_equal "Cannot use true, false, Integer, Range, :count, :minimum and :maximum when asserting that a selector does not match", error.message
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_assert_not_select_with_block
|
330
|
+
render_html "<div>foo</div>"
|
331
|
+
error = assert_raises(ArgumentError) { assert_not_select("p") { nil } }
|
332
|
+
assert_equal "Cannot be called with a block when asserting that a selector does not match", error.message
|
205
333
|
end
|
206
334
|
|
207
335
|
#
|
@@ -209,13 +337,13 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
209
337
|
#
|
210
338
|
|
211
339
|
def test_css_select
|
212
|
-
render_html
|
340
|
+
render_html '<div id="1"></div><div id="2"></div>'
|
213
341
|
assert_equal 2, css_select("div").size
|
214
342
|
assert_equal 0, css_select("p").size
|
215
343
|
end
|
216
344
|
|
217
345
|
def test_nested_css_select
|
218
|
-
render_html
|
346
|
+
render_html '<div id="1">foo</div><div id="2">foo</div>'
|
219
347
|
assert_select "div:match('id', ?)", /\d+/ do |elements|
|
220
348
|
assert_equal 1, css_select(elements[0], "div").size
|
221
349
|
assert_equal 1, css_select(elements[1], "div").size
|
@@ -224,10 +352,10 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
224
352
|
assert_equal 2, css_select("div").size
|
225
353
|
css_select("div").each do |element|
|
226
354
|
# Testing as a group is one thing
|
227
|
-
|
355
|
+
assert_not css_select("#1,#2").empty?
|
228
356
|
# Testing individually is another
|
229
|
-
|
230
|
-
|
357
|
+
assert_not css_select("#1").empty?
|
358
|
+
assert_not css_select("#2").empty?
|
231
359
|
end
|
232
360
|
end
|
233
361
|
end
|
@@ -248,13 +376,13 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
248
376
|
end
|
249
377
|
|
250
378
|
def test_nested_assert_select_with_match_failure_shows_nice_regex
|
251
|
-
render_html
|
379
|
+
render_html '<div id="1">foo</div>'
|
252
380
|
|
253
381
|
error = assert_raises Minitest::Assertion do
|
254
382
|
assert_select "div:match('id', ?)", /wups/
|
255
383
|
end
|
256
384
|
|
257
|
-
assert_match
|
385
|
+
assert_match "div:match('id', /wups/)", error.message
|
258
386
|
end
|
259
387
|
|
260
388
|
def test_feed_item_encoded
|
@@ -275,12 +403,11 @@ class AssertSelectTest < ActiveSupport::TestCase
|
|
275
403
|
</item>
|
276
404
|
</channel>
|
277
405
|
</rss>
|
278
|
-
EOF
|
406
|
+
EOF
|
279
407
|
|
280
408
|
assert_select "channel item description" do
|
281
|
-
|
282
409
|
assert_select_encoded do
|
283
|
-
assert_select "p", :
|
410
|
+
assert_select "p", count: 2, text: /Test/
|
284
411
|
end
|
285
412
|
|
286
413
|
# Test individually.
|
@@ -302,23 +429,69 @@ EOF
|
|
302
429
|
end
|
303
430
|
end
|
304
431
|
|
432
|
+
def test_feed_item_encoded_with_html_version
|
433
|
+
# https://html.spec.whatwg.org/multipage/parsing.html#an-introduction-to-error-handling-and-strange-cases-in-the-parser
|
434
|
+
# we use these results to assert that we're invoking the expected parser.
|
435
|
+
input = CGI.escapeHTML("<p>1<b>2<i>3</b>4</i>5</p>")
|
436
|
+
html4_result = jruby? ? "<p>1<b>2<i>3</i></b><i>4</i>5</p>" : "<p>1<b>2<i>3</i></b>45</p>"
|
437
|
+
html5_result = jruby? ? nil : "<p>1<b>2<i>3</i></b><i>4</i>5</p>"
|
438
|
+
|
439
|
+
render_xml(<<~XML)
|
440
|
+
<root>
|
441
|
+
<contents>#{input}</contents>
|
442
|
+
</root>
|
443
|
+
XML
|
444
|
+
|
445
|
+
with_default_html_version(:html4) do
|
446
|
+
assert_select "root contents" do
|
447
|
+
assert_select_encoded do |contents|
|
448
|
+
assert_equal(html4_result, contents.to_html)
|
449
|
+
end
|
450
|
+
|
451
|
+
assert_select_encoded(html_version: :html4) do |contents|
|
452
|
+
assert_equal(html4_result, contents.to_html)
|
453
|
+
end
|
454
|
+
|
455
|
+
assert_select_encoded(html_version: :html5) do |contents|
|
456
|
+
assert_equal(html5_result, contents.to_html)
|
457
|
+
end if Rails::Dom::Testing.html5_support?
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
with_default_html_version(:html5) do
|
462
|
+
assert_select "root contents" do
|
463
|
+
assert_select_encoded do |contents|
|
464
|
+
assert_equal(html5_result, contents.to_html)
|
465
|
+
end if Rails::Dom::Testing.html5_support?
|
466
|
+
|
467
|
+
assert_select_encoded(html_version: :html4) do |contents|
|
468
|
+
assert_equal(html4_result, contents.to_html)
|
469
|
+
end
|
470
|
+
|
471
|
+
assert_select_encoded(html_version: :html5) do |contents|
|
472
|
+
assert_equal(html5_result, contents.to_html)
|
473
|
+
end if Rails::Dom::Testing.html5_support?
|
474
|
+
end
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
305
478
|
def test_body_not_present_in_empty_document
|
306
|
-
render_html
|
307
|
-
assert_select
|
479
|
+
render_html "<div></div>"
|
480
|
+
assert_select "body", 0
|
308
481
|
end
|
309
482
|
|
310
483
|
def test_body_class_can_be_tested
|
311
484
|
render_html '<body class="foo"></body>'
|
312
|
-
assert_select
|
485
|
+
assert_select ".foo"
|
313
486
|
end
|
314
487
|
|
315
488
|
def test_body_class_can_be_tested_with_html
|
316
489
|
render_html '<html><body class="foo"><div></div></body></html>'
|
317
|
-
assert_select
|
490
|
+
assert_select ".foo"
|
318
491
|
end
|
319
492
|
|
320
493
|
def test_assert_select_with_extra_argument
|
321
|
-
render_html
|
494
|
+
render_html "<html><head><title>Welcome</title></head><body><div></div></body></html>"
|
322
495
|
|
323
496
|
assert_raises ArgumentError do
|
324
497
|
assert_select "title", "Welcome", count: 1
|
@@ -330,7 +503,7 @@ EOF
|
|
330
503
|
def test_assert_select_on_blank_response
|
331
504
|
render_html ""
|
332
505
|
assert_select "div", 0
|
333
|
-
assert_failure(/Expected exactly 1 element matching
|
506
|
+
assert_failure(/Expected exactly 1 element matching "div", found 0./) do
|
334
507
|
assert_select "div", 1
|
335
508
|
end
|
336
509
|
end
|
@@ -348,7 +521,7 @@ EOF
|
|
348
521
|
@html_document = if content_type == :xml
|
349
522
|
Nokogiri::XML::Document.parse(content)
|
350
523
|
else
|
351
|
-
|
524
|
+
Rails::Dom::Testing.html_document.parse(content)
|
352
525
|
end
|
353
526
|
end
|
354
527
|
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails-dom-testing"
|
4
|
+
require "active_support/test_case"
|
5
|
+
require "minitest/autorun"
|
5
6
|
|
6
7
|
ActiveSupport::TestCase.test_order = :random
|
8
|
+
|
9
|
+
module DomTestingHelpers
|
10
|
+
def jruby?
|
11
|
+
!! Nokogiri.jruby?
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_default_html_version(version)
|
15
|
+
old_version = Rails::Dom::Testing.default_html_version
|
16
|
+
begin
|
17
|
+
Rails::Dom::Testing.default_html_version = version
|
18
|
+
yield
|
19
|
+
ensure
|
20
|
+
Rails::Dom::Testing.default_html_version = old_version
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,30 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-dom-testing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Mendonça França
|
8
8
|
- Kasper Timm Hansen
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: nokogiri
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '1.6'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '1.6'
|
28
13
|
- !ruby/object:Gem::Dependency
|
29
14
|
name: activesupport
|
30
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,19 +39,19 @@ dependencies:
|
|
54
39
|
- !ruby/object:Gem::Version
|
55
40
|
version: '0'
|
56
41
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
42
|
+
name: nokogiri
|
58
43
|
requirement: !ruby/object:Gem::Requirement
|
59
44
|
requirements:
|
60
45
|
- - ">="
|
61
46
|
- !ruby/object:Gem::Version
|
62
|
-
version: '1.
|
63
|
-
type: :
|
47
|
+
version: '1.6'
|
48
|
+
type: :runtime
|
64
49
|
prerelease: false
|
65
50
|
version_requirements: !ruby/object:Gem::Requirement
|
66
51
|
requirements:
|
67
52
|
- - ">="
|
68
53
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
54
|
+
version: '1.6'
|
70
55
|
- !ruby/object:Gem::Dependency
|
71
56
|
name: rake
|
72
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,22 +66,8 @@ dependencies:
|
|
81
66
|
- - ">="
|
82
67
|
- !ruby/object:Gem::Version
|
83
68
|
version: '0'
|
84
|
-
|
85
|
-
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
|
-
description: " This gem can compare doms and assert certain elements exists in doms
|
99
|
-
using Nokogiri. "
|
69
|
+
description: This gem can compare doms and assert certain elements exists in doms
|
70
|
+
using Nokogiri.
|
100
71
|
email:
|
101
72
|
- rafaelmfranca@gmail.com
|
102
73
|
- kaspth@gmail.com
|
@@ -107,21 +78,22 @@ files:
|
|
107
78
|
- MIT-LICENSE
|
108
79
|
- README.md
|
109
80
|
- lib/rails-dom-testing.rb
|
81
|
+
- lib/rails/dom/testing.rb
|
110
82
|
- lib/rails/dom/testing/assertions.rb
|
111
83
|
- lib/rails/dom/testing/assertions/dom_assertions.rb
|
112
84
|
- lib/rails/dom/testing/assertions/selector_assertions.rb
|
113
|
-
- lib/rails/dom/testing/assertions/selector_assertions/count_describable.rb
|
114
85
|
- lib/rails/dom/testing/assertions/selector_assertions/html_selector.rb
|
115
86
|
- lib/rails/dom/testing/assertions/selector_assertions/substitution_context.rb
|
87
|
+
- lib/rails/dom/testing/railtie.rb
|
116
88
|
- lib/rails/dom/testing/version.rb
|
117
89
|
- test/dom_assertions_test.rb
|
90
|
+
- test/parser_selection_test.rb
|
118
91
|
- test/selector_assertions_test.rb
|
119
92
|
- test/test_helper.rb
|
120
93
|
homepage: https://github.com/rails/rails-dom-testing
|
121
94
|
licenses:
|
122
95
|
- MIT
|
123
96
|
metadata: {}
|
124
|
-
post_install_message:
|
125
97
|
rdoc_options: []
|
126
98
|
require_paths:
|
127
99
|
- lib
|
@@ -129,18 +101,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
101
|
requirements:
|
130
102
|
- - ">="
|
131
103
|
- !ruby/object:Gem::Version
|
132
|
-
version:
|
104
|
+
version: 2.5.0
|
133
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
106
|
requirements:
|
135
107
|
- - ">="
|
136
108
|
- !ruby/object:Gem::Version
|
137
109
|
version: '0'
|
138
110
|
requirements: []
|
139
|
-
rubygems_version: 3.
|
140
|
-
signing_key:
|
111
|
+
rubygems_version: 3.6.7
|
141
112
|
specification_version: 4
|
142
113
|
summary: Dom and Selector assertions for Rails applications
|
143
114
|
test_files:
|
144
115
|
- test/dom_assertions_test.rb
|
116
|
+
- test/parser_selection_test.rb
|
145
117
|
- test/selector_assertions_test.rb
|
146
118
|
- test/test_helper.rb
|