html-proofer 1.6.0 → 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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +74 -56
  4. data/Rakefile +4 -6
  5. data/bin/htmlproof +46 -36
  6. data/html-proofer.gemspec +22 -22
  7. data/lib/html/proofer/check_runner/issue.rb +62 -0
  8. data/lib/html/proofer/{check.rb → check_runner.rb} +11 -19
  9. data/lib/html/proofer/checkable.rb +42 -28
  10. data/lib/html/proofer/checks/favicon.rb +6 -6
  11. data/lib/html/proofer/checks/html.rb +11 -12
  12. data/lib/html/proofer/checks/images.rb +11 -11
  13. data/lib/html/proofer/checks/links.rb +30 -28
  14. data/lib/html/proofer/checks/scripts.rb +7 -8
  15. data/lib/html/proofer/log.rb +38 -0
  16. data/lib/html/proofer/url_validator.rb +135 -0
  17. data/lib/html/proofer/utils.rb +24 -0
  18. data/lib/html/proofer/version.rb +1 -1
  19. data/lib/html/proofer.rb +95 -199
  20. data/spec/html/proofer/command_spec.rb +82 -0
  21. data/spec/html/proofer/favicon_spec.rb +20 -20
  22. data/spec/html/proofer/fixtures/images/srcSetCheck.html +7 -0
  23. data/spec/html/proofer/fixtures/images/srcSetIgnorable.html +13 -0
  24. data/spec/html/proofer/fixtures/images/srcSetMissingAlt.html +7 -0
  25. data/spec/html/proofer/fixtures/images/srcSetMissingImage.html +7 -0
  26. data/spec/html/proofer/fixtures/links/erstiebegru/314/210/303/237ung.html +1 -0
  27. data/spec/html/proofer/fixtures/links/erstiebegr/303/274/303/237ung.html +1 -0
  28. data/spec/html/proofer/fixtures/links/file.foo +11 -0
  29. data/spec/html/proofer/fixtures/links/folder/multiples/catalog/file.html +8 -0
  30. data/spec/html/proofer/fixtures/links/folder/multiples/javadoc/file.html +8 -0
  31. data/spec/html/proofer/fixtures/links/nodupe.html +1 -1
  32. data/spec/html/proofer/fixtures/links/redirected_error.html +1 -0
  33. data/spec/html/proofer/fixtures/links/rootLink/rootLink.html +0 -1
  34. data/spec/html/proofer/fixtures/links/urlencoded-href.html +2 -0
  35. data/spec/html/proofer/fixtures/links/utf8Link.html +2 -0
  36. data/spec/html/proofer/fixtures/utils/lang-jp.html +1 -0
  37. data/spec/html/proofer/html_spec.rb +25 -25
  38. data/spec/html/proofer/images_spec.rb +59 -35
  39. data/spec/html/proofer/links_spec.rb +152 -109
  40. data/spec/html/proofer/scripts_spec.rb +17 -17
  41. data/spec/html/proofer/utils_spec.rb +14 -0
  42. data/spec/html/proofer_spec.rb +58 -38
  43. data/spec/spec_helper.rb +13 -6
  44. metadata +39 -7
  45. data/lib/html/proofer/checks.rb +0 -15
  46. data/lib/html/proofer/issue.rb +0 -21
@@ -1,309 +1,352 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe "Links test" do
3
+ describe 'Links test' do
4
4
 
5
- it "fails for broken internal hash (even if the file exists)" do
5
+ it 'fails for broken internal hash (even if the file exists)' do
6
6
  brokenHashExternalFilepath = "#{FIXTURES_DIR}/links/brokenHashExternal.html"
7
- proofer = make_proofer(brokenHashExternalFilepath)
8
- expect(proofer.failed_tests.last).to match /linking to ..\/images\/missingImageAlt.html#asdfasfdkafl, but asdfasfdkafl does not exist/
7
+ proofer = run_proofer(brokenHashExternalFilepath)
8
+ expect(proofer.failed_tests.last).to match(%r{linking to ../images/missingImageAlt.html#asdfasfdkafl, but asdfasfdkafl does not exist})
9
9
  end
10
10
 
11
- it "fails for broken hashes on the web when asked (even if the file exists)" do
11
+ it 'fails for broken hashes on the web when asked (even if the file exists)' do
12
12
  brokenHashOnTheWeb = "#{FIXTURES_DIR}/links/brokenHashOnTheWeb.html"
13
- proofer = make_proofer(brokenHashOnTheWeb, { :check_external_hash => true} )
14
- expect(proofer.failed_tests.first).to match /but the hash 'no' does not/
13
+ proofer = run_proofer(brokenHashOnTheWeb, { :check_external_hash => true} )
14
+ expect(proofer.failed_tests.first).to match(/but the hash 'no' does not/)
15
15
  end
16
16
 
17
- it "passes for broken hashes on the web when ignored (even if the file exists)" do
17
+ it 'passes for broken hashes on the web when ignored (even if the file exists)' do
18
18
  brokenHashOnTheWeb = "#{FIXTURES_DIR}/links/brokenHashOnTheWeb.html"
19
- proofer = make_proofer(brokenHashOnTheWeb)
19
+ proofer = run_proofer(brokenHashOnTheWeb)
20
20
  expect(proofer.failed_tests).to eq []
21
21
  end
22
22
 
23
- it "passes for GitHub hashes on the web when asked" do
23
+ it 'passes for GitHub hashes on the web when asked' do
24
24
  githubHash = "#{FIXTURES_DIR}/links/githubHash.html"
25
- proofer = make_proofer(githubHash)
25
+ proofer = run_proofer(githubHash)
26
26
  expect(proofer.failed_tests).to eq []
27
27
  end
28
28
 
29
- it "passes for broken hashes on the web (when we look only for 4xx)" do
29
+ it 'passes for broken hashes on the web (when we look only for 4xx)' do
30
30
  options = { :only_4xx => true }
31
31
  brokenHashOnTheWeb = "#{FIXTURES_DIR}/links/brokenHashOnTheWeb.html"
32
- proofer = make_proofer(brokenHashOnTheWeb, options)
32
+ proofer = run_proofer(brokenHashOnTheWeb, options)
33
33
  expect(proofer.failed_tests).to eq []
34
34
  end
35
35
 
36
- it "fails for broken internal hash" do
36
+ it 'fails for broken internal hash' do
37
37
  brokenHashInternalFilepath = "#{FIXTURES_DIR}/links/brokenHashInternal.html"
38
- proofer = make_proofer(brokenHashInternalFilepath)
39
- expect(proofer.failed_tests.first).to match /linking to internal hash #noHash that does not exist/
38
+ proofer = run_proofer(brokenHashInternalFilepath)
39
+ expect(proofer.failed_tests.first).to match(/linking to internal hash #noHash that does not exist/)
40
40
  end
41
41
 
42
- it "fails for broken external links" do
42
+ it 'fails for broken external links' do
43
43
  brokenLinkExternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkExternal.html"
44
- proofer = make_proofer(brokenLinkExternalFilepath)
45
- expect(proofer.failed_tests.first).to match /External link http:\/\/www.asdo3IRJ395295jsingrkrg4.com\/? failed: 0 Couldn't resolve host name/
44
+ proofer = run_proofer(brokenLinkExternalFilepath)
45
+ expect(proofer.failed_tests.first).to match(/failed: 0 Couldn't resolve host name/)
46
46
  end
47
47
 
48
- it "fails for broken internal links" do
48
+ it 'passes for different filename without option' do
49
+ brokenLinkExternalFilepath = "#{FIXTURES_DIR}/links/file.foo"
50
+ proofer = run_proofer(brokenLinkExternalFilepath)
51
+ expect(proofer.failed_tests).to eq []
52
+ end
53
+
54
+ it 'fails for different filenames' do
55
+ options = { :ext => '.foo' }
56
+ brokenLinkExternalFilepath = "#{FIXTURES_DIR}/links/file.foo"
57
+ proofer = run_proofer(brokenLinkExternalFilepath, options)
58
+ expect(proofer.failed_tests.first).to match(/failed: 0 Couldn't resolve host name/)
59
+ end
60
+
61
+ it 'fails for broken internal links' do
49
62
  brokenLinkInternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkInternal.html"
50
- proofer = make_proofer(brokenLinkInternalFilepath)
51
- expect(proofer.failed_tests.first).to match /internally linking to .\/notreal.html, which does not exist/
63
+ proofer = run_proofer(brokenLinkInternalFilepath)
64
+ expect(proofer.failed_tests.first).to match(/internally linking to .\/notreal.html, which does not exist/)
52
65
  end
53
66
 
54
- it "fails for link with no href" do
67
+ it 'fails for link with no href' do
55
68
  missingLinkHrefFilepath = "#{FIXTURES_DIR}/links/missingLinkHref.html"
56
- proofer = make_proofer(missingLinkHrefFilepath)
57
- expect(proofer.failed_tests.first).to match /anchor has no href attribute/
69
+ proofer = run_proofer(missingLinkHrefFilepath)
70
+ expect(proofer.failed_tests.first).to match(/anchor has no href attribute/)
58
71
  end
59
72
 
60
- it "should follow redirects" do
73
+ it 'should follow redirects' do
61
74
  linkWithRedirectFilepath = "#{FIXTURES_DIR}/links/linkWithRedirect.html"
62
- proofer = make_proofer(linkWithRedirectFilepath)
75
+ proofer = run_proofer(linkWithRedirectFilepath)
63
76
  expect(proofer.failed_tests).to eq []
64
77
  end
65
78
 
66
- it "fails on redirects if not following" do
79
+ it 'fails on redirects if not following' do
67
80
  linkWithRedirectFilepath = "#{FIXTURES_DIR}/links/linkWithRedirect.html"
68
- proofer = make_proofer(linkWithRedirectFilepath, { :followlocation => false })
69
- expect(proofer.failed_tests.first).to match /failed: 301 No error/
81
+ proofer = run_proofer(linkWithRedirectFilepath, :typhoeus => { :followlocation => false })
82
+ expect(proofer.failed_tests.first).to match(/failed: 301 No error/)
70
83
  end
71
84
 
72
85
  it "does not fail on redirects we're not following" do
73
86
  # this test should emit a 301--see above--but we're intentionally supressing it
74
87
  linkWithRedirectFilepath = "#{FIXTURES_DIR}/links/linkWithRedirect.html"
75
- proofer = make_proofer(linkWithRedirectFilepath, { :only_4xx => true, :followlocation => false })
88
+ proofer = run_proofer(linkWithRedirectFilepath, { :only_4xx => true, :typhoeus => { :followlocation => false } })
76
89
  expect(proofer.failed_tests).to eq []
77
90
  end
78
91
 
79
- it "should understand https" do
92
+ it 'should understand https' do
80
93
  linkWithHttpsFilepath = "#{FIXTURES_DIR}/links/linkWithHttps.html"
81
- proofer = make_proofer(linkWithHttpsFilepath)
94
+ proofer = run_proofer(linkWithHttpsFilepath)
82
95
  expect(proofer.failed_tests).to eq []
83
96
  end
84
97
 
85
- it "fails for broken hash links with status code numbers" do
98
+ it 'fails for broken hash links with status code numbers' do
86
99
  brokenLinkWithNumberFilepath = "#{FIXTURES_DIR}/links/brokenLinkWithNumber.html"
87
- proofer = make_proofer(brokenLinkWithNumberFilepath)
88
- expect(proofer.failed_tests.first).to match /linking to internal hash #25-method-not-allowed that does not exist/
100
+ proofer = run_proofer(brokenLinkWithNumberFilepath)
101
+ expect(proofer.failed_tests.first).to match(/linking to internal hash #25-method-not-allowed that does not exist/)
89
102
  end
90
103
 
91
104
  it 'properly resolves implicit /index.html in link paths' do
92
105
  linkToFolder = "#{FIXTURES_DIR}/links/linkToFolder.html"
93
- proofer = make_proofer(linkToFolder)
106
+ proofer = run_proofer(linkToFolder)
94
107
  expect(proofer.failed_tests).to eq []
95
108
  end
96
109
 
97
110
  it 'properly checks links to root' do
98
111
  rootLink = "#{FIXTURES_DIR}/links/rootLink/rootLink.html"
99
- proofer = make_proofer(rootLink)
112
+ proofer = run_proofer(rootLink)
100
113
  expect(proofer.failed_tests).to eq []
101
114
  end
102
115
 
103
116
  it 'properly checks relative links' do
104
117
  relativeLinks = "#{FIXTURES_DIR}/links/relativeLinks.html"
105
- proofer = make_proofer(relativeLinks)
118
+ proofer = run_proofer(relativeLinks)
106
119
  expect(proofer.failed_tests).to eq []
107
120
  end
108
121
 
109
122
  it 'properly checks ssl links' do
110
123
  checkSSLLinks = "#{FIXTURES_DIR}/links/checkSSLLinks.html"
111
- proofer = make_proofer(checkSSLLinks)
124
+ proofer = run_proofer(checkSSLLinks)
112
125
  expect(proofer.failed_tests).to eq []
113
126
  end
114
127
 
115
128
  it 'ignores links marked as ignore data-proofer-ignore' do
116
129
  ignorableLinks = "#{FIXTURES_DIR}/links/ignorableLinks.html"
117
- proofer = make_proofer(ignorableLinks)
130
+ proofer = run_proofer(ignorableLinks)
118
131
  expect(proofer.failed_tests).to eq []
119
132
  end
120
133
 
121
134
  it 'ignores links via href_ignore' do
122
135
  ignorableLinks = "#{FIXTURES_DIR}/links/ignorableLinksViaOptions.html"
123
- proofer = make_proofer(ignorableLinks, {:href_ignore => [/^http:\/\//, /sdadsad/, "../whaadadt.html"]})
136
+ proofer = run_proofer(ignorableLinks, { :href_ignore => [%r{^http://}, /sdadsad/, '../whaadadt.html'] })
124
137
  expect(proofer.failed_tests).to eq []
125
138
  end
126
139
 
127
140
  it 'translates links via href_swap' do
128
141
  translatedLink = "#{FIXTURES_DIR}/links/linkTranslatedViaHrefSwap.html"
129
- proofer = make_proofer(translatedLink, {:href_swap => { /\A\/articles\/([\w-]+)/ => "\\1.html" }})
142
+ proofer = run_proofer(translatedLink, { :href_swap => { %r{\A/articles/([\w-]+)} => "\\1.html" } })
143
+ expect(proofer.failed_tests).to eq []
144
+ end
145
+
146
+ it 'translates links via href_swap for list of links' do
147
+ proofer = run_proofer(['www.garbalarba.com'], { :href_swap => { /garbalarba/ => 'github' } })
130
148
  expect(proofer.failed_tests).to eq []
131
149
  end
132
150
 
133
151
  it 'finds a mix of broken and unbroken links' do
134
152
  multipleProblems = "#{FIXTURES_DIR}/links/multipleProblems.html"
135
- proofer = make_proofer(multipleProblems)
136
- expect(proofer.failed_tests.first).to match /linking to internal hash #anadaasdadsadschor that does not exist/
153
+ proofer = run_proofer(multipleProblems)
154
+ expect(proofer.failed_tests.first).to match(/linking to internal hash #anadaasdadsadschor that does not exist/)
137
155
  end
138
156
 
139
157
  it 'ignores valid mailto links' do
140
158
  ignorableLinks = "#{FIXTURES_DIR}/links/mailto_link.html"
141
- proofer = make_proofer(ignorableLinks)
159
+ proofer = run_proofer(ignorableLinks)
142
160
  expect(proofer.failed_tests).to eq []
143
161
  end
144
162
 
145
- it "fails for blank mailto links" do
163
+ it 'fails for blank mailto links' do
146
164
  blankMailToLink = "#{FIXTURES_DIR}/links/blank_mailto_link.html"
147
- proofer = make_proofer(blankMailToLink)
148
- expect(proofer.failed_tests.first).to match /mailto: contains no email address/
165
+ proofer = run_proofer(blankMailToLink)
166
+ expect(proofer.failed_tests.first).to match(/mailto: contains no email address/)
149
167
  end
150
168
 
151
169
  it 'ignores valid tel links' do
152
170
  ignorableLinks = "#{FIXTURES_DIR}/links/tel_link.html"
153
- proofer = make_proofer(ignorableLinks)
171
+ proofer = run_proofer(ignorableLinks)
154
172
  expect(proofer.failed_tests).to eq []
155
173
  end
156
174
 
157
- it "fails for blank tel links" do
175
+ it 'fails for blank tel links' do
158
176
  blankTelLink = "#{FIXTURES_DIR}/links/blank_tel_link.html"
159
- proofer = make_proofer(blankTelLink)
160
- expect(proofer.failed_tests.first).to match /tel: contains no phone number/
177
+ proofer = run_proofer(blankTelLink)
178
+ expect(proofer.failed_tests.first).to match(/tel: contains no phone number/)
161
179
  end
162
180
 
163
181
  it 'ignores javascript links' do
164
182
  javascriptLink = "#{FIXTURES_DIR}/links/javascript_link.html"
165
- proofer = make_proofer(javascriptLink)
183
+ proofer = run_proofer(javascriptLink)
166
184
  expect(proofer.failed_tests).to eq []
167
185
  end
168
186
 
169
- it "works for valid links missing the protocol" do
187
+ it 'works for valid links missing the protocol' do
170
188
  missingProtocolLink = "#{FIXTURES_DIR}/links/link_missing_protocol_valid.html"
171
- proofer = make_proofer(missingProtocolLink)
189
+ proofer = run_proofer(missingProtocolLink)
172
190
  expect(proofer.failed_tests).to eq []
173
191
  end
174
192
 
175
- it "fails for invalid links missing the protocol" do
193
+ it 'fails for invalid links missing the protocol' do
176
194
  missingProtocolLink = "#{FIXTURES_DIR}/links/link_missing_protocol_invalid.html"
177
- proofer = make_proofer(missingProtocolLink)
178
- expect(proofer.failed_tests.first).to match /Couldn't resolve host name/
195
+ proofer = run_proofer(missingProtocolLink)
196
+ expect(proofer.failed_tests.first).to match(/Couldn't resolve host name/)
179
197
  end
180
198
 
181
- it "works for valid href within link elements" do
199
+ it 'works for valid href within link elements' do
182
200
  head_link = "#{FIXTURES_DIR}/links/head_link_href.html"
183
- proofer = make_proofer(head_link)
201
+ proofer = run_proofer(head_link)
184
202
  expect(proofer.failed_tests).to eq []
185
203
  end
186
204
 
187
- it "fails for empty href within link elements" do
205
+ it 'fails for empty href within link elements' do
188
206
  head_link = "#{FIXTURES_DIR}/links/head_link_href_empty.html"
189
- proofer = make_proofer(head_link)
190
- expect(proofer.failed_tests.first).to match /anchor has no href attribute/
207
+ proofer = run_proofer(head_link)
208
+ expect(proofer.failed_tests.first).to match(/anchor has no href attribute/)
191
209
  end
192
210
 
193
- it "fails for absent href within link elements" do
211
+ it 'fails for absent href within link elements' do
194
212
  head_link = "#{FIXTURES_DIR}/links/head_link_href_absent.html"
195
- proofer = make_proofer(head_link)
196
- expect(proofer.failed_tests.first).to match /anchor has no href attribute/
213
+ proofer = run_proofer(head_link)
214
+ expect(proofer.failed_tests.first).to match(/anchor has no href attribute/)
197
215
  end
198
216
 
199
- it "fails for internal linking to a directory without trailing slash" do
200
- options = { :followlocation => false }
217
+ it 'fails for internal linking to a directory without trailing slash' do
218
+ options = { :typhoeus => { :followlocation => false } }
201
219
  internal = "#{FIXTURES_DIR}/links/link_directory_without_slash.html"
202
- proofer = make_proofer(internal, options)
203
- expect(proofer.failed_tests.first).to match /without trailing slash/
220
+ proofer = run_proofer(internal, options)
221
+ expect(proofer.failed_tests.first).to match(/without trailing slash/)
204
222
  end
205
223
 
206
- it "works for array of links" do
207
- proofer = make_proofer(["www.github.com", "foofoofoo.biz"])
208
- expect(proofer.failed_tests.first).to match /foofoofoo.biz\/? failed: 0 Couldn't resolve host name/
224
+ it 'ignores external links when asked' do
225
+ options = { :disable_external => true }
226
+ external = "#{FIXTURES_DIR}/links/brokenLinkExternal.html"
227
+ proofer = run_proofer(external, options)
228
+ expect(proofer.failed_tests).to eq []
209
229
  end
210
230
 
211
- it "works for broken anchors within pre" do
231
+ it 'works for array of links' do
232
+ proofer = run_proofer(['www.github.com', 'foofoofoo.biz'])
233
+ expect(proofer.failed_tests.first).to match(/failed: 0 Couldn't resolve host name/)
234
+ end
235
+
236
+ it 'works for broken anchors within pre' do
212
237
  anchor_pre = "#{FIXTURES_DIR}/links/anchors_in_pre.html"
213
- proofer = make_proofer(anchor_pre)
238
+ proofer = run_proofer(anchor_pre)
214
239
  expect(proofer.failed_tests).to eq []
215
240
  end
216
241
 
217
- it "works for broken link within pre" do
242
+ it 'works for broken link within pre' do
218
243
  link_pre = "#{FIXTURES_DIR}/links/links_in_pre.html"
219
- proofer = make_proofer(link_pre)
244
+ proofer = run_proofer(link_pre)
220
245
  expect(proofer.failed_tests).to eq []
221
246
  end
222
247
 
223
- it "works for pipes in the URL" do
248
+ it 'works for pipes in the URL' do
224
249
  escape_pipes = "#{FIXTURES_DIR}/links/escape_pipes.html"
225
- proofer = make_proofer(escape_pipes)
250
+ proofer = run_proofer(escape_pipes)
226
251
  expect(proofer.failed_tests).to eq []
227
252
  end
228
253
 
229
- it "fails for broken hash with query" do
254
+ it 'fails for broken hash with query' do
230
255
  broken_hash = "#{FIXTURES_DIR}/links/broken_hash_with_query.html"
231
- proofer = make_proofer(broken_hash)
232
- expect(proofer.failed_tests.first).to match /linking to internal hash #example that does not exist/
256
+ proofer = run_proofer(broken_hash)
257
+ expect(proofer.failed_tests.first).to match(/linking to internal hash #example that does not exist/)
233
258
  end
234
259
 
235
- it "works for directory index file" do
260
+ it 'works for directory index file' do
236
261
  options = { :directory_index_file => "index.php" }
237
262
  link_pointing_to_directory = "#{FIXTURES_DIR}/links/link_pointing_to_directory.html"
238
- proofer = make_proofer(link_pointing_to_directory, options)
263
+ proofer = run_proofer(link_pointing_to_directory, options)
239
264
  expect(proofer.failed_tests).to eq []
240
265
  end
241
266
 
242
267
  it "fails if directory index file doesn't exist" do
243
268
  options = { :directory_index_file => "README.md" }
244
269
  link_pointing_to_directory = "#{FIXTURES_DIR}/links/link_pointing_to_directory.html"
245
- proofer = make_proofer(link_pointing_to_directory, options)
270
+ proofer = run_proofer(link_pointing_to_directory, options)
246
271
  expect(proofer.failed_tests.first).to match "internally linking to folder-php/, which does not exist"
247
272
  end
248
273
 
249
- it "ensures Typhoeus options are passed" do
250
- options = { ssl_verifypeer: false }
274
+ it 'ensures Typhoeus options are passed' do
275
+ options = { :typhoeus => { :ssl_verifypeer => false } }
251
276
  typhoeus_options_link = "#{FIXTURES_DIR}/links/ensure_typhoeus_options.html"
252
- proofer = make_proofer(typhoeus_options_link, options)
277
+ proofer = run_proofer(typhoeus_options_link, options)
253
278
  expect(proofer.failed_tests).to eq []
254
279
  end
255
280
 
256
- it "works if subdirectory ends with .html" do
281
+ it 'works if subdirectory ends with .html' do
257
282
  with_subdirectory_html = "#{FIXTURES_DIR}/links/_site"
258
- proofer = make_proofer(with_subdirectory_html)
283
+ proofer = run_proofer(with_subdirectory_html)
259
284
  expect(proofer.failed_tests).to eq []
260
285
  end
261
286
 
262
- it "works for hash referring to itself" do
287
+ it 'works for hash referring to itself' do
263
288
  hashReferringToSelf = "#{FIXTURES_DIR}/links/hashReferringToSelf.html"
264
- proofer = make_proofer(hashReferringToSelf)
289
+ proofer = run_proofer(hashReferringToSelf)
265
290
  expect(proofer.failed_tests).to eq []
266
291
  end
267
292
 
268
- it "ignores placeholder with name" do
293
+ it 'ignores placeholder with name' do
269
294
  placeholder_with_name = "#{FIXTURES_DIR}/links/placeholder_with_name.html"
270
- proofer = make_proofer(placeholder_with_name)
295
+ proofer = run_proofer(placeholder_with_name)
271
296
  expect(proofer.failed_tests).to eq []
272
297
  end
273
298
 
274
- it "ignores placeholder with id" do
299
+ it 'ignores placeholder with id' do
275
300
  placeholder_with_id = "#{FIXTURES_DIR}/links/placeholder_with_id.html"
276
- proofer = make_proofer(placeholder_with_id)
301
+ proofer = run_proofer(placeholder_with_id)
277
302
  expect(proofer.failed_tests).to eq []
278
303
  end
279
304
 
280
- it "fails for placeholder with empty id" do
305
+ it 'fails for placeholder with empty id' do
281
306
  empty_id = "#{FIXTURES_DIR}/links/placeholder_with_empty_id.html"
282
- proofer = make_proofer(empty_id)
283
- expect(proofer.failed_tests.first).to match /anchor has no href attribute/
307
+ proofer = run_proofer(empty_id)
308
+ expect(proofer.failed_tests.first).to match(/anchor has no href attribute/)
284
309
  end
285
310
 
286
- it "ignores non-http(s) protocols" do
311
+ it 'ignores non-http(s) protocols' do
287
312
  other_protocols = "#{FIXTURES_DIR}/links/other_protocols.html"
288
- proofer = make_proofer(other_protocols)
313
+ proofer = run_proofer(other_protocols)
289
314
  expect(proofer.failed_tests).to eq []
290
315
  end
291
316
 
292
- it "passes non-standard characters" do
317
+ it 'passes non-standard characters' do
293
318
  fixture = "#{FIXTURES_DIR}/links/non_standard_characters.html"
294
- proofer = make_proofer(fixture)
319
+ proofer = run_proofer(fixture)
295
320
  expect(proofer.failed_tests).to eq []
296
321
  end
297
322
 
298
- it "does not dupe errors" do
323
+ it 'does not dupe errors' do
299
324
  fixture = "#{FIXTURES_DIR}/links/nodupe.html"
300
- proofer = make_proofer(fixture, { :check_external_hash => true} )
325
+ proofer = run_proofer(fixture)
301
326
  expect(proofer.failed_tests.length).to eq 1
302
327
  end
303
328
 
304
- it "passes for broken *nix links" do
329
+ it 'passes for broken *nix links' do
305
330
  fixture = "#{FIXTURES_DIR}/links/brokenUnixLinks.html"
306
- proofer = make_proofer(fixture)
331
+ proofer = run_proofer(fixture)
307
332
  expect(proofer.failed_tests).to eq []
308
333
  end
334
+
335
+ it 'passes for external UTF-8 links' do
336
+ fixture = "#{FIXTURES_DIR}/links/utf8Link.html"
337
+ proofer = run_proofer(fixture)
338
+ expect(proofer.failed_tests).to eq []
339
+ end
340
+
341
+ it 'passes for urlencoded href' do
342
+ fixture = "#{FIXTURES_DIR}/links/urlencoded-href.html"
343
+ proofer = run_proofer(fixture)
344
+ expect(proofer.failed_tests).to eq []
345
+ end
346
+
347
+ it 'reports failures for the original link, not the redirection' do
348
+ fixture = "#{FIXTURES_DIR}/links/redirected_error.html"
349
+ proofer = run_proofer(fixture)
350
+ expect(proofer.failed_tests.first).to match(/post.htm\?id=63009224 failed: 404 No error/)
351
+ end
309
352
  end
@@ -1,40 +1,40 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe "Scripts test" do
3
+ describe 'Scripts test' do
4
4
 
5
- it "fails for broken external src" do
5
+ it 'fails for broken external src' do
6
6
  file = "#{FIXTURES_DIR}/scripts/script_broken_external.html"
7
- proofer = make_proofer(file)
8
- expect(proofer.failed_tests.first).to match /External link http:\/\/www.asdo3IRJ395295jsingrkrg4.com\/asdo3IRJ.js? failed: 0 Couldn't resolve host name/
7
+ proofer = run_proofer(file)
8
+ expect(proofer.failed_tests.first).to match(/failed: 0 Couldn't resolve host name/)
9
9
  end
10
10
 
11
- it "works for valid internal src" do
11
+ it 'works for valid internal src' do
12
12
  file = "#{FIXTURES_DIR}/scripts/script_valid_internal.html"
13
- proofer = make_proofer(file)
13
+ proofer = run_proofer(file)
14
14
  expect(proofer.failed_tests).to eq []
15
15
  end
16
16
 
17
- it "fails for missing internal src" do
17
+ it 'fails for missing internal src' do
18
18
  file = "#{FIXTURES_DIR}/scripts/script_missing_internal.html"
19
- proofer = make_proofer(file)
20
- expect(proofer.failed_tests.first).to match /doesnotexist.js does not exist/
19
+ proofer = run_proofer(file)
20
+ expect(proofer.failed_tests.first).to match(/doesnotexist.js does not exist \(line 5\)/)
21
21
  end
22
22
 
23
- it "works for present content" do
23
+ it 'works for present content' do
24
24
  file = "#{FIXTURES_DIR}/scripts/script_content.html"
25
- proofer = make_proofer(file)
25
+ proofer = run_proofer(file)
26
26
  expect(proofer.failed_tests).to eq []
27
27
  end
28
28
 
29
- it "fails for absent content" do
29
+ it 'fails for absent content' do
30
30
  file = "#{FIXTURES_DIR}/scripts/script_content_absent.html"
31
- proofer = make_proofer(file)
32
- expect(proofer.failed_tests.first).to match /script is empty and has no src attribute/
31
+ proofer = run_proofer(file)
32
+ expect(proofer.failed_tests.first).to match(/script is empty and has no src attribute/)
33
33
  end
34
34
 
35
- it "works for broken script within pre" do
35
+ it 'works for broken script within pre' do
36
36
  script_pre = "#{FIXTURES_DIR}/scripts/script_in_pre.html"
37
- proofer = make_proofer(script_pre)
37
+ proofer = run_proofer(script_pre)
38
38
  expect(proofer.failed_tests).to eq []
39
39
  end
40
40
 
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe HTML::Utils do
4
+ describe '::create_nokogiri' do
5
+ it 'passes for a string' do
6
+ noko = HTML::Utils::create_nokogiri '<html lang="jp">'
7
+ expect(noko.css('html').first['lang']).to eq 'jp'
8
+ end
9
+ it 'passes for a file' do
10
+ noko = HTML::Utils::create_nokogiri "#{FIXTURES_DIR}/utils/lang-jp.html"
11
+ expect(noko.css('html').first['lang']).to eq 'jp'
12
+ end
13
+ end
14
+ end