html-proofer 0.8.0 → 0.9.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -5
  3. data/bin/htmlproof +2 -0
  4. data/html-proofer.gemspec +1 -1
  5. data/lib/html/proofer.rb +10 -3
  6. data/lib/html/proofer/checkable.rb +6 -7
  7. data/lib/html/proofer/checks.rb +7 -3
  8. data/lib/html/proofer/checks/favicon.rb +22 -0
  9. data/lib/html/proofer/checks/images.rb +7 -5
  10. data/lib/html/proofer/checks/links.rb +12 -2
  11. data/lib/html/proofer/checks/scripts.rb +40 -0
  12. data/spec/html/proofer/favicon_spec.rb +46 -0
  13. data/spec/html/proofer/fixtures/favicon/favicon_absent.html +4 -0
  14. data/spec/html/proofer/fixtures/favicon/favicon_absent_apple.html +7 -0
  15. data/spec/html/proofer/fixtures/favicon/favicon_broken.html +7 -0
  16. data/spec/html/proofer/fixtures/favicon/favicon_broken_but_ignored.html +7 -0
  17. data/spec/html/proofer/fixtures/favicon/favicon_present.html +7 -0
  18. data/spec/html/proofer/fixtures/favicon/favicon_present_shortcut.html +7 -0
  19. data/spec/html/proofer/fixtures/{existingImageExternal.html → images/existingImageExternal.html} +0 -0
  20. data/spec/html/proofer/fixtures/{gpl.png → images/gpl.png} +0 -0
  21. data/spec/html/proofer/fixtures/{ignorableImages.html → images/ignorableImages.html} +0 -0
  22. data/spec/html/proofer/fixtures/{image_missing_protocol_invalid.html → images/image_missing_protocol_invalid.html} +0 -0
  23. data/spec/html/proofer/fixtures/{image_missing_protocol_valid.html → images/image_missing_protocol_valid.html} +0 -0
  24. data/spec/html/proofer/fixtures/{missingImageAlt.html → images/missingImageAlt.html} +0 -0
  25. data/spec/html/proofer/fixtures/{missingImageAltText.html → images/missingImageAltText.html} +0 -0
  26. data/spec/html/proofer/fixtures/{missingImageExternal.html → images/missingImageExternal.html} +0 -0
  27. data/spec/html/proofer/fixtures/{missingImageInternal.html → images/missingImageInternal.html} +0 -0
  28. data/spec/html/proofer/fixtures/{missingImageSrc.html → images/missingImageSrc.html} +0 -0
  29. data/spec/html/proofer/fixtures/images/relativeToSelf.html +2 -0
  30. data/spec/html/proofer/fixtures/{rootRelativeImages.html → images/rootRelativeImages.html} +0 -0
  31. data/spec/html/proofer/fixtures/{terribleImageName.html → images/terribleImageName.html} +0 -0
  32. data/spec/html/proofer/fixtures/{workingDataURIImage.html → images/workingDataURIImage.html} +0 -0
  33. data/spec/html/proofer/fixtures/{blank_mailto_link.html → links/blank_mailto_link.html} +0 -0
  34. data/spec/html/proofer/fixtures/{blank_tel_link.html → links/blank_tel_link.html} +0 -0
  35. data/spec/html/proofer/fixtures/{brokenHashExternal.html → links/brokenHashExternal.html} +2 -2
  36. data/spec/html/proofer/fixtures/{brokenHashInternal.html → links/brokenHashInternal.html} +0 -0
  37. data/spec/html/proofer/fixtures/{brokenInternalLink.html → links/brokenInternalLink.html} +0 -0
  38. data/spec/html/proofer/fixtures/{brokenLinkExternal.html → links/brokenLinkExternal.html} +0 -0
  39. data/spec/html/proofer/fixtures/{brokenLinkInternal.html → links/brokenLinkInternal.html} +0 -0
  40. data/spec/html/proofer/fixtures/{brokenLinkWithNumber.html → links/brokenLinkWithNumber.html} +0 -0
  41. data/spec/html/proofer/fixtures/{checkSSLLinks.html → links/checkSSLLinks.html} +0 -0
  42. data/spec/html/proofer/fixtures/{folder → links/folder}/anchorLink.html +0 -0
  43. data/spec/html/proofer/fixtures/{folder → links/folder}/assets/barrel.png +0 -0
  44. data/spec/html/proofer/fixtures/{folder → links/folder}/index.html +0 -0
  45. data/spec/html/proofer/fixtures/{folder → links/folder}/relativeImage.html +0 -0
  46. data/spec/html/proofer/fixtures/links/gpl.png +0 -0
  47. data/spec/html/proofer/fixtures/{head_link_href.html → links/head_link_href.html} +0 -0
  48. data/spec/html/proofer/fixtures/{head_link_href_absent.html → links/head_link_href_absent.html} +0 -0
  49. data/spec/html/proofer/fixtures/{head_link_href_empty.html → links/head_link_href_empty.html} +0 -0
  50. data/spec/html/proofer/fixtures/{ignorableLinks.html → links/ignorableLinks.html} +0 -0
  51. data/spec/html/proofer/fixtures/{ignorableLinksViaOptions.html → links/ignorableLinksViaOptions.html} +0 -0
  52. data/spec/html/proofer/fixtures/{index.html → links/index.html} +0 -0
  53. data/spec/html/proofer/fixtures/{linkToFolder.html → links/linkToFolder.html} +0 -0
  54. data/spec/html/proofer/fixtures/{linkTranslatedViaHrefSwap.html → links/linkTranslatedViaHrefSwap.html} +0 -0
  55. data/spec/html/proofer/fixtures/{linkWithHttps.html → links/linkWithHttps.html} +0 -0
  56. data/spec/html/proofer/fixtures/{linkWithRedirect.html → links/linkWithRedirect.html} +0 -0
  57. data/spec/html/proofer/fixtures/links/link_directory_without_slash.html +1 -0
  58. data/spec/html/proofer/fixtures/{link_missing_protocol_invalid.html → links/link_missing_protocol_invalid.html} +0 -0
  59. data/spec/html/proofer/fixtures/{link_missing_protocol_valid.html → links/link_missing_protocol_valid.html} +0 -0
  60. data/spec/html/proofer/fixtures/{mailto_link.html → links/mailto_link.html} +0 -0
  61. data/spec/html/proofer/fixtures/{missingLinkHref.html → links/missingLinkHref.html} +0 -0
  62. data/spec/html/proofer/fixtures/{multipleProblems.html → links/multipleProblems.html} +0 -0
  63. data/spec/html/proofer/fixtures/{notarealhash.html → links/notarealhash.html} +0 -0
  64. data/spec/html/proofer/fixtures/{relativeLinks.html → links/relativeLinks.html} +0 -2
  65. data/spec/html/proofer/fixtures/{rootLink.html → links/rootLink.html} +0 -0
  66. data/spec/html/proofer/fixtures/{tel_link.html → links/tel_link.html} +0 -0
  67. data/spec/html/proofer/fixtures/Screen Shot 2012-08-09 at 7.51.18 AM.png b/data/spec/html/proofer/fixtures/resources/Screen Shot 2012-08-09 at 7.51.18 → AM.png +0 -0
  68. data/spec/html/proofer/fixtures/resources/gpl.png +0 -0
  69. data/spec/html/proofer/fixtures/scripts/script.js +1 -0
  70. data/spec/html/proofer/fixtures/scripts/script_broken_external.html +9 -0
  71. data/spec/html/proofer/fixtures/scripts/script_content.html +9 -0
  72. data/spec/html/proofer/fixtures/scripts/script_content_absent.html +9 -0
  73. data/spec/html/proofer/fixtures/scripts/script_missing_internal.html +9 -0
  74. data/spec/html/proofer/fixtures/scripts/script_valid_internal.html +9 -0
  75. data/spec/html/proofer/images_spec.rb +20 -14
  76. data/spec/html/proofer/links_spec.rb +41 -27
  77. data/spec/html/proofer/scripts_spec.rb +35 -0
  78. data/spec/html/proofer_spec.rb +2 -2
  79. metadata +132 -94
@@ -0,0 +1 @@
1
+ <a href="folder">Folder</a>
@@ -2,5 +2,3 @@
2
2
  <a href="index.html">Relative to self</a>
3
3
  <a href="folder/">Folder relative to self</a>
4
4
  <a href="index.html#anchor">Anchor relative to self</a>
5
-
6
- <img alt="sure thing" src="gpl.png"/>Relative to self
@@ -0,0 +1 @@
1
+ var x = 1;
@@ -0,0 +1,9 @@
1
+ <html>
2
+
3
+ <body>
4
+
5
+ <script src="http://www.asdo3IRJ395295jsingrkrg4.com/asdo3IRJ.js"></script>
6
+
7
+ </body>
8
+
9
+ </html>
@@ -0,0 +1,9 @@
1
+ <html>
2
+
3
+ <body>
4
+
5
+ <script>var x = 1;</script>
6
+
7
+ </body>
8
+
9
+ </html>
@@ -0,0 +1,9 @@
1
+ <html>
2
+
3
+ <body>
4
+
5
+ <script></script>
6
+
7
+ </body>
8
+
9
+ </html>
@@ -0,0 +1,9 @@
1
+ <html>
2
+
3
+ <body>
4
+
5
+ <script src="doesnotexist.js"></script>
6
+
7
+ </body>
8
+
9
+ </html>
@@ -0,0 +1,9 @@
1
+ <html>
2
+
3
+ <body>
4
+
5
+ <script src="script.js"></script>
6
+
7
+ </body>
8
+
9
+ </html>
@@ -1,56 +1,56 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Image tests" do
3
+ describe "Images test" do
4
4
  it "passes for existing external images" do
5
- externalImageFilepath = "#{FIXTURES_DIR}/existingImageExternal.html"
5
+ externalImageFilepath = "#{FIXTURES_DIR}/images/existingImageExternal.html"
6
6
  output = capture_stderr { HTML::Proofer.new(externalImageFilepath).run }
7
7
  output.should == ""
8
8
  end
9
9
 
10
10
  it "fails for image without alt attribute" do
11
- missingAltFilepath = "#{FIXTURES_DIR}/missingImageAlt.html"
11
+ missingAltFilepath = "#{FIXTURES_DIR}/images/missingImageAlt.html"
12
12
  output = capture_stderr { HTML::Proofer.new(missingAltFilepath).run }
13
13
  output.should match /gpl.png does not have an alt attribute/
14
14
  end
15
15
 
16
16
  it "fails for image with an empty alt attribute" do
17
- missingAltFilepath = "#{FIXTURES_DIR}/missingImageAltText.html"
17
+ missingAltFilepath = "#{FIXTURES_DIR}/images/missingImageAltText.html"
18
18
  output = capture_stderr { HTML::Proofer.new(missingAltFilepath).run }
19
19
  output.should match /gpl.png does not have an alt attribute/
20
20
  end
21
21
 
22
22
  it "fails for missing external images" do
23
- externalImageFilepath = "#{FIXTURES_DIR}/missingImageExternal.html"
23
+ externalImageFilepath = "#{FIXTURES_DIR}/images/missingImageExternal.html"
24
24
  output = capture_stderr { HTML::Proofer.new(externalImageFilepath).run }
25
25
  output.should match /External link http:\/\/www.whatthehell\/? failed: 0 Couldn't resolve host/
26
26
  end
27
27
 
28
28
  it "fails for missing internal images" do
29
- internalImageFilepath = "#{FIXTURES_DIR}/missingImageInternal.html"
29
+ internalImageFilepath = "#{FIXTURES_DIR}/images/missingImageInternal.html"
30
30
  output = capture_stderr { HTML::Proofer.new(internalImageFilepath).run }
31
31
  output.should match /doesnotexist.png does not exist/
32
32
  end
33
33
 
34
34
  it "fails for image with no src" do
35
- imageSrcFilepath = "#{FIXTURES_DIR}/missingImageSrc.html"
35
+ imageSrcFilepath = "#{FIXTURES_DIR}/images/missingImageSrc.html"
36
36
  output = capture_stderr { HTML::Proofer.new(imageSrcFilepath).run }
37
37
  output.should match /image has no src attribute/
38
38
  end
39
39
 
40
40
  it "fails for image with default mac filename" do
41
- terribleImageName = "#{FIXTURES_DIR}/terribleImageName.html"
41
+ terribleImageName = "#{FIXTURES_DIR}/images/terribleImageName.html"
42
42
  output = capture_stderr { HTML::Proofer.new(terribleImageName).run }
43
43
  output.should match /image has a terrible filename/
44
44
  end
45
45
 
46
46
  it 'ignores images marked as ignore data-proofer-ignore' do
47
- ignorableImages = "#{FIXTURES_DIR}/ignorableImages.html"
47
+ ignorableImages = "#{FIXTURES_DIR}/images/ignorableImages.html"
48
48
  output = capture_stderr { HTML::Proofer.new(ignorableImages).run }
49
49
  output.should == ""
50
50
  end
51
51
 
52
52
  it 'properly checks relative images' do
53
- relativeImages = "#{FIXTURES_DIR}/rootRelativeImages.html"
53
+ relativeImages = "#{FIXTURES_DIR}/images/rootRelativeImages.html"
54
54
  output = capture_stderr { HTML::Proofer.new(relativeImages).run }
55
55
  output.should == ""
56
56
 
@@ -59,21 +59,27 @@ describe "Image tests" do
59
59
  output.should == ""
60
60
  end
61
61
 
62
- it 'properly checks data URI images' do
63
- dataURIImage = "#{FIXTURES_DIR}/workingDataURIImage.html"
62
+ it 'properly ignores data URI images' do
63
+ dataURIImage = "#{FIXTURES_DIR}/images/workingDataURIImage.html"
64
64
  output = capture_stderr { HTML::Proofer.new(dataURIImage).run }
65
65
  output.should == ""
66
66
  end
67
67
 
68
68
  it "works for valid images missing the protocol" do
69
- missingProtocolLink = "#{FIXTURES_DIR}/image_missing_protocol_valid.html"
69
+ missingProtocolLink = "#{FIXTURES_DIR}/images/image_missing_protocol_valid.html"
70
70
  output = capture_stderr { HTML::Proofer.new(missingProtocolLink).run }
71
71
  output.should == ""
72
72
  end
73
73
 
74
74
  it "fails for invalid images missing the protocol" do
75
- missingProtocolLink = "#{FIXTURES_DIR}/image_missing_protocol_invalid.html"
75
+ missingProtocolLink = "#{FIXTURES_DIR}/images/image_missing_protocol_invalid.html"
76
76
  output = capture_stderr { HTML::Proofer.new(missingProtocolLink).run }
77
77
  output.should match /404 No error/
78
78
  end
79
+
80
+ it 'properly checks relative links' do
81
+ relativeLinks = "#{FIXTURES_DIR}/images/relativeToSelf.html"
82
+ output = capture_stderr { HTML::Proofer.new(relativeLinks).run }
83
+ output.should == ""
84
+ end
79
85
  end
@@ -1,154 +1,168 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Links tests" do
3
+ describe "Links test" do
4
4
 
5
5
  it "fails for broken external hash (even if the file exists)" do
6
- brokenHashExternalFilepath = "#{FIXTURES_DIR}/brokenHashExternal.html"
6
+ brokenHashExternalFilepath = "#{FIXTURES_DIR}/links/brokenHashExternal.html"
7
7
  output = capture_stderr { HTML::Proofer.new(brokenHashExternalFilepath).run }
8
- output.should match /linking to .\/missingImageAlt.html#asdfasfdkafl, but asdfasfdkafl does not exist/
8
+ output.should match /linking to ..\/images\/missingImageAlt.html#asdfasfdkafl, but asdfasfdkafl does not exist/
9
9
  end
10
10
 
11
11
  it "fails for broken internal hash" do
12
- brokenHashInternalFilepath = "#{FIXTURES_DIR}/brokenHashInternal.html"
12
+ brokenHashInternalFilepath = "#{FIXTURES_DIR}/links/brokenHashInternal.html"
13
13
  output = capture_stderr { HTML::Proofer.new(brokenHashInternalFilepath).run }
14
14
  output.should match /linking to internal hash #noHash that does not exist/
15
15
  end
16
16
 
17
17
  it "fails for broken external links" do
18
- brokenLinkExternalFilepath = "#{FIXTURES_DIR}/brokenLinkExternal.html"
18
+ brokenLinkExternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkExternal.html"
19
19
  output = capture_stderr { HTML::Proofer.new(brokenLinkExternalFilepath).run }
20
20
  output.should match /External link http:\/\/www.asdo3IRJ395295jsingrkrg4.com\/? failed: 0 Couldn't resolve host name/
21
21
  end
22
22
 
23
23
  it "fails for broken internal links" do
24
- brokenLinkInternalFilepath = "#{FIXTURES_DIR}/brokenLinkInternal.html"
24
+ brokenLinkInternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkInternal.html"
25
25
  output = capture_stderr { HTML::Proofer.new(brokenLinkInternalFilepath).run }
26
26
  output.should match /internally linking to .\/notreal.html, which does not exist/
27
27
  end
28
28
 
29
29
  it "fails for link with no href" do
30
- missingLinkHrefFilepath = "#{FIXTURES_DIR}/missingLinkHref.html"
30
+ missingLinkHrefFilepath = "#{FIXTURES_DIR}/links/missingLinkHref.html"
31
31
  output = capture_stderr { HTML::Proofer.new(missingLinkHrefFilepath).run }
32
32
  output.should match /link has no href attribute/
33
33
  end
34
34
 
35
35
  it "should follow redirects" do
36
- linkWithRedirectFilepath = "#{FIXTURES_DIR}/linkWithRedirect.html"
36
+ linkWithRedirectFilepath = "#{FIXTURES_DIR}/links/linkWithRedirect.html"
37
37
  output = capture_stderr { HTML::Proofer.new(linkWithRedirectFilepath).run }
38
38
  output.should == ""
39
39
  end
40
40
 
41
+ it "fails on redirects if not following" do
42
+ options = { :followlocation => false }
43
+ linkWithRedirectFilepath = "#{FIXTURES_DIR}/links/linkWithRedirect.html"
44
+ output = capture_stderr { HTML::Proofer.new(linkWithRedirectFilepath, options).run }
45
+ output.should match /External link https:\/\/help.github.com\/changing-author-info\/ failed: 301 No error/
46
+ end
47
+
41
48
  it "should understand https" do
42
- linkWithHttpsFilepath = "#{FIXTURES_DIR}/linkWithHttps.html"
49
+ linkWithHttpsFilepath = "#{FIXTURES_DIR}/links/linkWithHttps.html"
43
50
  output = capture_stderr { HTML::Proofer.new(linkWithHttpsFilepath).run }
44
51
  output.should == ""
45
52
  end
46
53
 
47
54
  it "fails for broken hash links with status code numbers" do
48
- brokenLinkWithNumberFilepath = "#{FIXTURES_DIR}/brokenLinkWithNumber.html"
55
+ brokenLinkWithNumberFilepath = "#{FIXTURES_DIR}/links/brokenLinkWithNumber.html"
49
56
  output = capture_stderr { HTML::Proofer.new(brokenLinkWithNumberFilepath).run }
50
57
  output.should match /linking to internal hash #25-method-not-allowed that does not exist/
51
58
  end
52
59
 
53
60
  it 'properly resolves implicit /index.html in link paths' do
54
- linkToFolder = "#{FIXTURES_DIR}/linkToFolder.html"
61
+ linkToFolder = "#{FIXTURES_DIR}/links/linkToFolder.html"
55
62
  output = capture_stderr { HTML::Proofer.new(linkToFolder).run }
56
63
  output.should == ""
57
64
  end
58
65
 
59
66
  it 'properly checks links to root' do
60
- rootLink = "#{FIXTURES_DIR}/rootLink.html"
67
+ rootLink = "#{FIXTURES_DIR}/links/rootLink.html"
61
68
  output = capture_stderr { HTML::Proofer.new(rootLink).run }
62
69
  output.should == ""
63
70
  end
64
71
 
65
72
  it 'properly checks relative links' do
66
- relativeLinks = "#{FIXTURES_DIR}/relativeLinks.html"
73
+ relativeLinks = "#{FIXTURES_DIR}/links/relativeLinks.html"
67
74
  output = capture_stderr { HTML::Proofer.new(relativeLinks).run }
68
75
  output.should == ""
69
76
  end
70
77
 
71
78
  it 'properly checks ssl links' do
72
- checkSSLLinks = "#{FIXTURES_DIR}/checkSSLLinks.html"
79
+ checkSSLLinks = "#{FIXTURES_DIR}/links/checkSSLLinks.html"
73
80
  output = capture_stderr { HTML::Proofer.new(checkSSLLinks).run }
74
81
  output.should == ""
75
82
  end
76
83
 
77
84
  it 'ignores links marked as ignore data-proofer-ignore' do
78
- ignorableLinks = "#{FIXTURES_DIR}/ignorableLinks.html"
85
+ ignorableLinks = "#{FIXTURES_DIR}/links/ignorableLinks.html"
79
86
  output = capture_stderr { HTML::Proofer.new(ignorableLinks).run }
80
87
  output.should == ""
81
88
  end
82
89
 
83
90
  it 'ignores links via href_ignore' do
84
- ignorableLinks = "#{FIXTURES_DIR}/ignorableLinksViaOptions.html"
91
+ ignorableLinks = "#{FIXTURES_DIR}/links/ignorableLinksViaOptions.html"
85
92
  output = capture_stderr { HTML::Proofer.new(ignorableLinks, {:href_ignore => [/^http:\/\//, /sdadsad/, "../whaadadt.html"]}).run }
86
93
  output.should == ""
87
94
  end
88
95
 
89
96
  it 'translates links via href_swap' do
90
- translatedLink = "#{FIXTURES_DIR}/linkTranslatedViaHrefSwap.html"
97
+ translatedLink = "#{FIXTURES_DIR}/links/linkTranslatedViaHrefSwap.html"
91
98
  output = capture_stderr { HTML::Proofer.new(translatedLink, {:href_swap => { /\A\/articles\/([\w-]+)/ => "\\1.html" }}).run }
92
99
  output.should == ""
93
100
  end
94
101
 
95
102
  it 'finds a mix of broken and unbroken links' do
96
- multipleProblems = "#{FIXTURES_DIR}/multipleProblems.html"
103
+ multipleProblems = "#{FIXTURES_DIR}/links/multipleProblems.html"
97
104
  output = capture_stderr { HTML::Proofer.new(multipleProblems).run }
98
105
  output.should match /linking to internal hash #anadaasdadsadschor that does not exist/
99
106
  end
100
107
 
101
108
  it 'ignores valid mailto links' do
102
- ignorableLinks = "#{FIXTURES_DIR}/mailto_link.html"
109
+ ignorableLinks = "#{FIXTURES_DIR}/links/mailto_link.html"
103
110
  output = capture_stderr { HTML::Proofer.new(ignorableLinks).run }
104
111
  output.should == ""
105
112
  end
106
113
 
107
114
  it "fails for blank mailto links" do
108
- blankMailToLink = "#{FIXTURES_DIR}/blank_mailto_link.html"
115
+ blankMailToLink = "#{FIXTURES_DIR}/links/blank_mailto_link.html"
109
116
  output = capture_stderr { HTML::Proofer.new(blankMailToLink).run }
110
117
  output.should match /mailto: is an invalid URL/
111
118
  end
112
119
 
113
120
  it 'ignores valid tel links' do
114
- ignorableLinks = "#{FIXTURES_DIR}/tel_link.html"
121
+ ignorableLinks = "#{FIXTURES_DIR}/links/tel_link.html"
115
122
  output = capture_stderr { HTML::Proofer.new(ignorableLinks).run }
116
123
  output.should == ""
117
124
  end
118
125
 
119
126
  it "fails for blank tel links" do
120
- blankTelLink = "#{FIXTURES_DIR}/blank_tel_link.html"
127
+ blankTelLink = "#{FIXTURES_DIR}/links/blank_tel_link.html"
121
128
  output = capture_stderr { HTML::Proofer.new(blankTelLink).run }
122
129
  output.should match /tel: is an invalid URL/
123
130
  end
124
131
 
125
132
  it "works for valid links missing the protocol" do
126
- missingProtocolLink = "#{FIXTURES_DIR}/link_missing_protocol_valid.html"
133
+ missingProtocolLink = "#{FIXTURES_DIR}/links/link_missing_protocol_valid.html"
127
134
  output = capture_stderr { HTML::Proofer.new(missingProtocolLink).run }
128
135
  output.should == ""
129
136
  end
130
137
 
131
138
  it "fails for invalid links missing the protocol" do
132
- missingProtocolLink = "#{FIXTURES_DIR}/link_missing_protocol_invalid.html"
139
+ missingProtocolLink = "#{FIXTURES_DIR}/links/link_missing_protocol_invalid.html"
133
140
  output = capture_stderr { HTML::Proofer.new(missingProtocolLink).run }
134
141
  output.should match /Couldn't resolve host name/
135
142
  end
136
143
 
137
144
  it "works for valid href within link elements" do
138
- head_link = "#{FIXTURES_DIR}/head_link_href.html"
145
+ head_link = "#{FIXTURES_DIR}/links/head_link_href.html"
139
146
  output = capture_stderr { HTML::Proofer.new(head_link).run }
140
147
  output.should == ""
141
148
  end
142
149
 
143
150
  it "fails for empty href within link elements" do
144
- head_link = "#{FIXTURES_DIR}/head_link_href_empty.html"
151
+ head_link = "#{FIXTURES_DIR}/links/head_link_href_empty.html"
145
152
  output = capture_stderr { HTML::Proofer.new(head_link).run }
146
153
  output.should match /link has no href attribute/
147
154
  end
148
155
 
149
156
  it "fails for absent href within link elements" do
150
- head_link = "#{FIXTURES_DIR}/head_link_href_absent.html"
157
+ head_link = "#{FIXTURES_DIR}/links/head_link_href_absent.html"
151
158
  output = capture_stderr { HTML::Proofer.new(head_link).run }
152
159
  output.should match /link has no href attribute/
153
160
  end
161
+
162
+ it "fails for internal linking to a directory without trailing slash" do
163
+ options = { :followlocation => false }
164
+ internal = "#{FIXTURES_DIR}/links/link_directory_without_slash.html"
165
+ output = capture_stderr { HTML::Proofer.new(internal, options).run }
166
+ output.should match /without trailing slash/
167
+ end
154
168
  end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+
3
+ describe "Scripts test" do
4
+
5
+ it "fails for broken external src" do
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/
9
+ end
10
+
11
+ it "works for valid internal src" do
12
+ file = "#{FIXTURES_DIR}/scripts/script_valid_internal.html"
13
+ output = capture_stderr { HTML::Proofer.new(file).run }
14
+ output.should == ""
15
+ end
16
+
17
+ it "fails for missing internal src" do
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/
21
+ end
22
+
23
+ it "works for present content" do
24
+ file = "#{FIXTURES_DIR}/scripts/script_content.html"
25
+ output = capture_stderr { HTML::Proofer.new(file).run }
26
+ output.should == ""
27
+ end
28
+
29
+ it "fails for absent content" do
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/
33
+ end
34
+
35
+ end