html-proofer 1.4.0 → 1.5.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -2
  3. data/bin/htmlproof +3 -1
  4. data/html-proofer.gemspec +4 -2
  5. data/lib/html/proofer.rb +66 -10
  6. data/lib/html/proofer/check.rb +1 -1
  7. data/lib/html/proofer/checkable.rb +6 -6
  8. data/lib/html/proofer/checks.rb +2 -1
  9. data/lib/html/proofer/checks/favicon.rb +0 -2
  10. data/lib/html/proofer/checks/html.rb +24 -0
  11. data/lib/html/proofer/checks/links.rb +12 -0
  12. data/lib/html/proofer/issue.rb +1 -1
  13. data/lib/html/proofer/version.rb +5 -0
  14. data/spec/html/proofer/favicon_spec.rb +15 -14
  15. data/spec/html/proofer/fixtures/html/div_inside_head.html +6 -0
  16. data/spec/html/proofer/fixtures/html/html5_tags.html +9 -0
  17. data/spec/html/proofer/fixtures/html/invalid_tag.html +3 -0
  18. data/spec/html/proofer/fixtures/html/missing_closing_quotes.html +5 -0
  19. data/spec/html/proofer/fixtures/html/opening_and_ending_tag_mismatch.html +7 -0
  20. data/spec/html/proofer/fixtures/html/unescaped_ampersand_in_attribute.html +4 -0
  21. data/spec/html/proofer/fixtures/html/unmatched_end_tag.html +5 -0
  22. data/spec/html/proofer/fixtures/links/brokenHashOnTheWeb.html +2 -0
  23. data/spec/html/proofer/fixtures/links/githubHash.html +1 -0
  24. data/spec/html/proofer/fixtures/links/non_standard_characters.html +10 -0
  25. data/spec/html/proofer/fixtures/links/other_protocols.html +4 -0
  26. data/spec/html/proofer/fixtures/sorting/issue/broken_image_one.html +1 -0
  27. data/spec/html/proofer/fixtures/sorting/issue/broken_image_two.html +4 -0
  28. data/spec/html/proofer/fixtures/sorting/path/multiple_issues.html +11 -0
  29. data/spec/html/proofer/fixtures/sorting/path/single_issue.html +1 -0
  30. data/spec/html/proofer/fixtures/sorting/status/a_404.html +1 -0
  31. data/spec/html/proofer/fixtures/sorting/status/broken_link.html +3 -0
  32. data/spec/html/proofer/fixtures/sorting/status/missing_redirect.html +1 -0
  33. data/spec/html/proofer/html_spec.rb +51 -0
  34. data/spec/html/proofer/images_spec.rb +33 -33
  35. data/spec/html/proofer/links_spec.rb +115 -86
  36. data/spec/html/proofer/scripts_spec.rb +12 -12
  37. data/spec/html/proofer_spec.rb +50 -9
  38. data/spec/spec_helper.rb +13 -1
  39. metadata +58 -4
@@ -4,38 +4,38 @@ describe "Scripts test" do
4
4
 
5
5
  it "fails for broken external src" do
6
6
  file = "#{FIXTURES_DIR}/scripts/script_broken_external.html"
7
- output = capture_stderr { HTML::Proofer.new(file).run }
8
- output.should match /External link http:\/\/www.asdo3IRJ395295jsingrkrg4.com\/asdo3IRJ.js? failed: 0 Couldn't resolve host name/
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/
9
9
  end
10
10
 
11
11
  it "works for valid internal src" do
12
12
  file = "#{FIXTURES_DIR}/scripts/script_valid_internal.html"
13
- output = capture_stderr { HTML::Proofer.new(file).run }
14
- output.should == ""
13
+ proofer = make_proofer(file)
14
+ expect(proofer.failed_tests).to eq []
15
15
  end
16
16
 
17
17
  it "fails for missing internal src" do
18
18
  file = "#{FIXTURES_DIR}/scripts/script_missing_internal.html"
19
- output = capture_stderr { HTML::Proofer.new(file).run }
20
- output.should match /doesnotexist.js does not exist/
19
+ proofer = make_proofer(file)
20
+ expect(proofer.failed_tests.first).to match /doesnotexist.js does not exist/
21
21
  end
22
22
 
23
23
  it "works for present content" do
24
24
  file = "#{FIXTURES_DIR}/scripts/script_content.html"
25
- output = capture_stderr { HTML::Proofer.new(file).run }
26
- output.should == ""
25
+ proofer = make_proofer(file)
26
+ expect(proofer.failed_tests).to eq []
27
27
  end
28
28
 
29
29
  it "fails for absent content" do
30
30
  file = "#{FIXTURES_DIR}/scripts/script_content_absent.html"
31
- output = capture_stderr { HTML::Proofer.new(file).run }
32
- output.should match /script is empty and has no src attribute/
31
+ proofer = make_proofer(file)
32
+ expect(proofer.failed_tests.first).to match /script is empty and has no src attribute/
33
33
  end
34
34
 
35
35
  it "works for broken script within pre" do
36
36
  script_pre = "#{FIXTURES_DIR}/scripts/script_in_pre.html"
37
- output = capture_stderr { HTML::Proofer.new(script_pre).run }
38
- output.should == ""
37
+ proofer = make_proofer(script_pre)
38
+ expect(proofer.failed_tests).to eq []
39
39
  end
40
40
 
41
41
  end
@@ -5,9 +5,8 @@ describe HTML::Proofer do
5
5
  describe "#failed_tests" do
6
6
  it "is a list of the formatted errors" do
7
7
  brokenLinkInternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkInternal.html"
8
- proofer = HTML::Proofer.new(brokenLinkInternalFilepath)
9
- capture_stderr { proofer.run }
10
- proofer.failed_tests.should eq(["\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./notreal.html, which does not exist", "\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./missingImageAlt.html, which does not exist"])
8
+ proofer = make_proofer(brokenLinkInternalFilepath)
9
+ expect(proofer.failed_tests).to eq(["\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./notreal.html, which does not exist", "\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./missingImageAlt.html, which does not exist"])
11
10
  end
12
11
  end
13
12
 
@@ -15,7 +14,7 @@ describe HTML::Proofer do
15
14
  it "works for directory that ends with .html" do
16
15
  folder = "#{FIXTURES_DIR}/links/_site/folder.html"
17
16
  proofer = HTML::Proofer.new folder
18
- proofer.files.should == ["#{folder}/index.html"]
17
+ expect(proofer.files).to eq(["#{folder}/index.html"])
19
18
  end
20
19
  end
21
20
 
@@ -23,16 +22,58 @@ describe HTML::Proofer do
23
22
  it "strips out undesired Typhoeus options" do
24
23
  folder = "#{FIXTURES_DIR}/links/_site/folder.html"
25
24
  proofer = HTML::Proofer.new folder, :verbose => true
26
- proofer.options[:verbose].should == true
27
- proofer.typhoeus_opts[:verbose].should == nil
25
+ expect(proofer.options[:verbose]).to eq(true)
26
+ expect(proofer.typhoeus_opts[:verbose]).to eq(nil)
28
27
  end
29
28
 
30
29
  it "takes options for Parallel" do
31
30
  folder = "#{FIXTURES_DIR}/links/_site/folder.html"
32
31
  proofer = HTML::Proofer.new folder, :parallel => { :in_processes => 3 }
33
- proofer.parallel_opts[:in_processes].should == 3
34
- proofer.typhoeus_opts[:in_processes].should == nil
35
- proofer.options[:parallel].should == nil
32
+ expect(proofer.parallel_opts[:in_processes]).to eq(3)
33
+ expect(proofer.typhoeus_opts[:in_processes]).to eq(nil)
34
+ expect(proofer.options[:parallel]).to eq(nil)
35
+ end
36
+
37
+ describe "sorting" do
38
+ # would love to know why Travis barfs here
39
+ it "understands sorting by path", :skip => ENV['TRAVIS'] do
40
+ output = send_proofer_output("#{FIXTURES_DIR}/sorting/path")
41
+
42
+ expect(output.strip).to eq("""
43
+ - spec/html/proofer/fixtures/sorting/path/multiple_issues.html
44
+ * tel: contains no phone number
45
+ * internal image gpl.png does not exist
46
+ * image gpl.png does not have an alt attribute
47
+ - spec/html/proofer/fixtures/sorting/path/single_issue.html
48
+ * image has a terrible filename (./Screen Shot 2012-08-09 at 7.51.18 AM.png)
49
+ """.strip)
50
+ end
51
+
52
+ it "understands sorting by issue" do
53
+ output = send_proofer_output("#{FIXTURES_DIR}/sorting/issue", :error_sort => :desc)
54
+ expect(output.strip).to eq("""
55
+ - image ./gpl.png does not have an alt attribute
56
+ * spec/html/proofer/fixtures/sorting/issue/broken_image_one.html
57
+ * spec/html/proofer/fixtures/sorting/issue/broken_image_two.html
58
+ - internal image ./gpl.png does not exist
59
+ * spec/html/proofer/fixtures/sorting/issue/broken_image_one.html
60
+ * spec/html/proofer/fixtures/sorting/issue/broken_image_two.html
61
+ - internal image NOT_AN_IMAGE does not exist
62
+ * spec/html/proofer/fixtures/sorting/issue/broken_image_two.html
63
+ """.strip)
64
+ end
65
+
66
+
67
+ it "understands sorting by status" do
68
+ output = send_proofer_output("#{FIXTURES_DIR}/sorting/status", :followlocation => false, :error_sort => :status)
69
+ expect(output.strip).to eq("""
70
+ - -1
71
+ * spec/html/proofer/fixtures/sorting/status/broken_link.html: internally linking to nowhere.fooof, which does not exist
72
+ - 404
73
+ * spec/html/proofer/fixtures/sorting/status/a_404.html: External link http://upload.wikimedia.org/wikipedia/en/thumb/not_here.png failed: 404 No error
74
+ * spec/html/proofer/fixtures/sorting/status/broken_link.html: External link http://upload.wikimedia.org/wikipedia/en/thumb/fooooof.png failed: 404 No error
75
+ """.strip)
76
+ end
36
77
  end
37
78
  end
38
79
  end
data/spec/spec_helper.rb CHANGED
@@ -5,7 +5,7 @@ FIXTURES_DIR = "spec/html/proofer/fixtures"
5
5
 
6
6
  RSpec.configure do |config|
7
7
  # Use color in STDOUT
8
- config.color_enabled = true
8
+ config.color = true
9
9
 
10
10
  # Use color not only in STDOUT but also in pagers and files
11
11
  config.tty = true
@@ -31,3 +31,15 @@ def capture_stderr(&block)
31
31
  end
32
32
  fake_err.string
33
33
  end
34
+
35
+ def make_proofer(file, opts={})
36
+ proofer = HTML::Proofer.new(file, opts)
37
+ capture_stderr { proofer.run }
38
+ # proofer.run # when I want to see output
39
+ proofer
40
+ end
41
+
42
+ def send_proofer_output(file, opts={})
43
+ proofer = HTML::Proofer.new(file, opts)
44
+ capture_stderr { proofer.run }
45
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-proofer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-13 00:00:00.000000000 Z
11
+ date: 2014-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mercenary
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: addressable
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.3'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.3'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: redcarpet
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +128,14 @@ dependencies:
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: 2.13.0
131
+ version: 3.1.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: 2.13.0
138
+ version: 3.1.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -171,10 +185,12 @@ files:
171
185
  - lib/html/proofer/checkable.rb
172
186
  - lib/html/proofer/checks.rb
173
187
  - lib/html/proofer/checks/favicon.rb
188
+ - lib/html/proofer/checks/html.rb
174
189
  - lib/html/proofer/checks/images.rb
175
190
  - lib/html/proofer/checks/links.rb
176
191
  - lib/html/proofer/checks/scripts.rb
177
192
  - lib/html/proofer/issue.rb
193
+ - lib/html/proofer/version.rb
178
194
  - spec/html/proofer/favicon_spec.rb
179
195
  - spec/html/proofer/fixtures/favicon/favicon_absent.html
180
196
  - spec/html/proofer/fixtures/favicon/favicon_absent_apple.html
@@ -182,6 +198,13 @@ files:
182
198
  - spec/html/proofer/fixtures/favicon/favicon_broken_but_ignored.html
183
199
  - spec/html/proofer/fixtures/favicon/favicon_present.html
184
200
  - spec/html/proofer/fixtures/favicon/favicon_present_shortcut.html
201
+ - spec/html/proofer/fixtures/html/div_inside_head.html
202
+ - spec/html/proofer/fixtures/html/html5_tags.html
203
+ - spec/html/proofer/fixtures/html/invalid_tag.html
204
+ - spec/html/proofer/fixtures/html/missing_closing_quotes.html
205
+ - spec/html/proofer/fixtures/html/opening_and_ending_tag_mismatch.html
206
+ - spec/html/proofer/fixtures/html/unescaped_ampersand_in_attribute.html
207
+ - spec/html/proofer/fixtures/html/unmatched_end_tag.html
185
208
  - spec/html/proofer/fixtures/images/existingImageExternal.html
186
209
  - spec/html/proofer/fixtures/images/gpl.png
187
210
  - spec/html/proofer/fixtures/images/ignorableAltViaOptions.html
@@ -204,6 +227,7 @@ files:
204
227
  - spec/html/proofer/fixtures/links/blank_tel_link.html
205
228
  - spec/html/proofer/fixtures/links/brokenHashExternal.html
206
229
  - spec/html/proofer/fixtures/links/brokenHashInternal.html
230
+ - spec/html/proofer/fixtures/links/brokenHashOnTheWeb.html
207
231
  - spec/html/proofer/fixtures/links/brokenInternalLink.html
208
232
  - spec/html/proofer/fixtures/links/brokenLinkExternal.html
209
233
  - spec/html/proofer/fixtures/links/brokenLinkInternal.html
@@ -217,6 +241,7 @@ files:
217
241
  - spec/html/proofer/fixtures/links/folder/assets/barrel.png
218
242
  - spec/html/proofer/fixtures/links/folder/index.html
219
243
  - spec/html/proofer/fixtures/links/folder/relativeImage.html
244
+ - spec/html/proofer/fixtures/links/githubHash.html
220
245
  - spec/html/proofer/fixtures/links/gpl.png
221
246
  - spec/html/proofer/fixtures/links/hashReferringToSelf.html
222
247
  - spec/html/proofer/fixtures/links/head_link_href.html
@@ -237,7 +262,9 @@ files:
237
262
  - spec/html/proofer/fixtures/links/mailto_link.html
238
263
  - spec/html/proofer/fixtures/links/missingLinkHref.html
239
264
  - spec/html/proofer/fixtures/links/multipleProblems.html
265
+ - spec/html/proofer/fixtures/links/non_standard_characters.html
240
266
  - spec/html/proofer/fixtures/links/notarealhash.html
267
+ - spec/html/proofer/fixtures/links/other_protocols.html
241
268
  - spec/html/proofer/fixtures/links/placeholder_with_empty_id.html
242
269
  - spec/html/proofer/fixtures/links/placeholder_with_id.html
243
270
  - spec/html/proofer/fixtures/links/placeholder_with_name.html
@@ -259,6 +286,14 @@ files:
259
286
  - spec/html/proofer/fixtures/scripts/script_in_pre.html
260
287
  - spec/html/proofer/fixtures/scripts/script_missing_internal.html
261
288
  - spec/html/proofer/fixtures/scripts/script_valid_internal.html
289
+ - spec/html/proofer/fixtures/sorting/issue/broken_image_one.html
290
+ - spec/html/proofer/fixtures/sorting/issue/broken_image_two.html
291
+ - spec/html/proofer/fixtures/sorting/path/multiple_issues.html
292
+ - spec/html/proofer/fixtures/sorting/path/single_issue.html
293
+ - spec/html/proofer/fixtures/sorting/status/a_404.html
294
+ - spec/html/proofer/fixtures/sorting/status/broken_link.html
295
+ - spec/html/proofer/fixtures/sorting/status/missing_redirect.html
296
+ - spec/html/proofer/html_spec.rb
262
297
  - spec/html/proofer/images_spec.rb
263
298
  - spec/html/proofer/links_spec.rb
264
299
  - spec/html/proofer/scripts_spec.rb
@@ -298,6 +333,13 @@ test_files:
298
333
  - spec/html/proofer/fixtures/favicon/favicon_broken_but_ignored.html
299
334
  - spec/html/proofer/fixtures/favicon/favicon_present.html
300
335
  - spec/html/proofer/fixtures/favicon/favicon_present_shortcut.html
336
+ - spec/html/proofer/fixtures/html/div_inside_head.html
337
+ - spec/html/proofer/fixtures/html/html5_tags.html
338
+ - spec/html/proofer/fixtures/html/invalid_tag.html
339
+ - spec/html/proofer/fixtures/html/missing_closing_quotes.html
340
+ - spec/html/proofer/fixtures/html/opening_and_ending_tag_mismatch.html
341
+ - spec/html/proofer/fixtures/html/unescaped_ampersand_in_attribute.html
342
+ - spec/html/proofer/fixtures/html/unmatched_end_tag.html
301
343
  - spec/html/proofer/fixtures/images/existingImageExternal.html
302
344
  - spec/html/proofer/fixtures/images/gpl.png
303
345
  - spec/html/proofer/fixtures/images/ignorableAltViaOptions.html
@@ -320,6 +362,7 @@ test_files:
320
362
  - spec/html/proofer/fixtures/links/blank_tel_link.html
321
363
  - spec/html/proofer/fixtures/links/brokenHashExternal.html
322
364
  - spec/html/proofer/fixtures/links/brokenHashInternal.html
365
+ - spec/html/proofer/fixtures/links/brokenHashOnTheWeb.html
323
366
  - spec/html/proofer/fixtures/links/brokenInternalLink.html
324
367
  - spec/html/proofer/fixtures/links/brokenLinkExternal.html
325
368
  - spec/html/proofer/fixtures/links/brokenLinkInternal.html
@@ -333,6 +376,7 @@ test_files:
333
376
  - spec/html/proofer/fixtures/links/folder/assets/barrel.png
334
377
  - spec/html/proofer/fixtures/links/folder/index.html
335
378
  - spec/html/proofer/fixtures/links/folder/relativeImage.html
379
+ - spec/html/proofer/fixtures/links/githubHash.html
336
380
  - spec/html/proofer/fixtures/links/gpl.png
337
381
  - spec/html/proofer/fixtures/links/hashReferringToSelf.html
338
382
  - spec/html/proofer/fixtures/links/head_link_href.html
@@ -353,7 +397,9 @@ test_files:
353
397
  - spec/html/proofer/fixtures/links/mailto_link.html
354
398
  - spec/html/proofer/fixtures/links/missingLinkHref.html
355
399
  - spec/html/proofer/fixtures/links/multipleProblems.html
400
+ - spec/html/proofer/fixtures/links/non_standard_characters.html
356
401
  - spec/html/proofer/fixtures/links/notarealhash.html
402
+ - spec/html/proofer/fixtures/links/other_protocols.html
357
403
  - spec/html/proofer/fixtures/links/placeholder_with_empty_id.html
358
404
  - spec/html/proofer/fixtures/links/placeholder_with_id.html
359
405
  - spec/html/proofer/fixtures/links/placeholder_with_name.html
@@ -375,6 +421,14 @@ test_files:
375
421
  - spec/html/proofer/fixtures/scripts/script_in_pre.html
376
422
  - spec/html/proofer/fixtures/scripts/script_missing_internal.html
377
423
  - spec/html/proofer/fixtures/scripts/script_valid_internal.html
424
+ - spec/html/proofer/fixtures/sorting/issue/broken_image_one.html
425
+ - spec/html/proofer/fixtures/sorting/issue/broken_image_two.html
426
+ - spec/html/proofer/fixtures/sorting/path/multiple_issues.html
427
+ - spec/html/proofer/fixtures/sorting/path/single_issue.html
428
+ - spec/html/proofer/fixtures/sorting/status/a_404.html
429
+ - spec/html/proofer/fixtures/sorting/status/broken_link.html
430
+ - spec/html/proofer/fixtures/sorting/status/missing_redirect.html
431
+ - spec/html/proofer/html_spec.rb
378
432
  - spec/html/proofer/images_spec.rb
379
433
  - spec/html/proofer/links_spec.rb
380
434
  - spec/html/proofer/scripts_spec.rb