validate-website 1.1.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +7 -7
- data/lib/validate_website/core.rb +26 -16
- data/lib/validate_website/crawl.rb +4 -3
- data/lib/validate_website/option_parser.rb +10 -2
- data/lib/validate_website/static.rb +42 -13
- data/lib/validate_website/utils.rb +48 -0
- data/lib/validate_website/version.rb +2 -1
- data/lib/validate_website.rb +0 -1
- data/man/man1/validate-website-static.1 +7 -2
- data/man/man1/validate-website.1 +7 -2
- metadata +18 -24
- data/spec/core_spec.rb +0 -10
- data/spec/crawler_spec.rb +0 -91
- data/spec/data/assets/application-92f19110a9d47a56d2ebe744e15af301.css +0 -1
- data/spec/data/html4-strict.html +0 -239
- data/spec/data/html5-linuxfr.html +0 -1286
- data/spec/data/html5.html +0 -46
- data/spec/data/news/ryzom-naissance-du-projet-libre-ryzom-forge.md +0 -0
- data/spec/data/validator.nu-excessive.html +0 -118
- data/spec/data/validator.nu-failure.html +0 -10
- data/spec/data/validator.nu-success.html +0 -2
- data/spec/data/w3.org-xhtml1-strict-errors.html +0 -544
- data/spec/data/xhtml1-strict.html +0 -22
- data/spec/example/ruby smalltalk/blockcamp-paris-le-28-novembre.html +0 -22
- data/spec/spec_helper.rb +0 -10
- data/spec/static_spec.rb +0 -38
- data/spec/validator_spec.rb +0 -137
- data/spec/webmock_helper.rb +0 -40
@@ -1,22 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
-
<head>
|
6
|
-
<title>title</title>
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
<h1>Title 1</h1>
|
10
|
-
<p>Paragraphe.</p>
|
11
|
-
|
12
|
-
<h2>Title 2</h2>
|
13
|
-
<ul>
|
14
|
-
<li><a href="/my-url1" title="title">my url</a></li>
|
15
|
-
<li><a href="/my-url2" title="title">my url</a></li>
|
16
|
-
<li><a href="/my-url1" title="title">my url</a></li>
|
17
|
-
</ul>
|
18
|
-
<p><img src="http://test.com/img.png" alt="non local img" /></p>
|
19
|
-
<p><img src="http://www.example.com/img1.png" alt="local img with absolute uri" /></p>
|
20
|
-
<p><img src="/img2.png" alt="local img with non absolute uri" /></p>
|
21
|
-
</body>
|
22
|
-
</html>
|
@@ -1,22 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
-
<head>
|
6
|
-
<title>title</title>
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
<h1>Title 1</h1>
|
10
|
-
<p>Paragraphe.</p>
|
11
|
-
|
12
|
-
<h2>Title 2</h2>
|
13
|
-
<ul>
|
14
|
-
<li><a href="/my-url1" title="title">my url</a></li>
|
15
|
-
<li><a href="/my-url2" title="title">my url</a></li>
|
16
|
-
<li><a href="/my-url1" title="title">my url</a></li>
|
17
|
-
</ul>
|
18
|
-
<p><img src="http://test.com/img.png" alt="non local img" /></p>
|
19
|
-
<p><img src="http://www.example.com/img1.png" alt="local img with absolute uri" /></p>
|
20
|
-
<p><img src="/img2.png" alt="local img with non absolute uri" /></p>
|
21
|
-
</body>
|
22
|
-
</html>
|
data/spec/spec_helper.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'minitest/autorun'
|
3
|
-
require_relative 'webmock_helper'
|
4
|
-
require 'spidr'
|
5
|
-
|
6
|
-
require 'validate_website/core'
|
7
|
-
|
8
|
-
ENV['LC_ALL'] = 'C.UTF-8' if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
9
|
-
|
10
|
-
SPEC_DOMAIN = 'http://www.example.com/'
|
data/spec/static_spec.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require_relative 'spec_helper'
|
2
|
-
|
3
|
-
describe ValidateWebsite::Static do
|
4
|
-
before do
|
5
|
-
@validate_website = ValidateWebsite::Static.new(color: false)
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'no space in directory name' do
|
9
|
-
pattern = File.join(File.dirname(__FILE__), 'example/**/*.html')
|
10
|
-
@validate_website.crawl(pattern: pattern,
|
11
|
-
site: 'http://dev.af83.com/',
|
12
|
-
markup: false,
|
13
|
-
not_found: false)
|
14
|
-
@validate_website.not_founds_count.must_equal 0
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'not found' do
|
18
|
-
pattern = File.join(File.dirname(__FILE__), '**/*.html')
|
19
|
-
Dir.chdir('spec/data') do
|
20
|
-
@validate_website.crawl(pattern: pattern,
|
21
|
-
site: 'https://linuxfr.org/',
|
22
|
-
markup: false,
|
23
|
-
not_found: true)
|
24
|
-
@validate_website.not_founds_count.must_equal 503
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'ignore' do
|
29
|
-
pattern = File.join(File.dirname(__FILE__), 'data',
|
30
|
-
'w3.org-xhtml1-strict-errors.html')
|
31
|
-
Dir.chdir('spec/data') do
|
32
|
-
@validate_website.crawl(pattern: pattern,
|
33
|
-
site: 'http://w3.org/',
|
34
|
-
ignore: /height|width|Length/)
|
35
|
-
@validate_website.errors_count.must_equal 0
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/spec/validator_spec.rb
DELETED
@@ -1,137 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require File.expand_path('../spec_helper', __FILE__)
|
3
|
-
|
4
|
-
describe ValidateWebsite::Validator do
|
5
|
-
let(:subject) { ValidateWebsite::Validator }
|
6
|
-
|
7
|
-
before do
|
8
|
-
WebMock.reset!
|
9
|
-
@http = Spidr::Agent.new
|
10
|
-
end
|
11
|
-
|
12
|
-
describe('xhtml1') do
|
13
|
-
it 'can ignore' do
|
14
|
-
name = 'w3.org-xhtml1-strict-errors'
|
15
|
-
file = File.join('spec', 'data', "#{name}.html")
|
16
|
-
page = FakePage.new(name,
|
17
|
-
body: open(file).read,
|
18
|
-
content_type: 'text/html')
|
19
|
-
@xhtml1_page = @http.get_page(page.url)
|
20
|
-
ignore = /width|height|Length/
|
21
|
-
validator = subject.new(@xhtml1_page.doc,
|
22
|
-
@xhtml1_page.body,
|
23
|
-
ignore)
|
24
|
-
validator.valid?.must_equal true
|
25
|
-
validator.errors.size.must_equal 0
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'xhtml1-strict should be valid' do
|
29
|
-
name = 'xhtml1-strict'
|
30
|
-
dtd_uri = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
|
31
|
-
file = File.join('spec', 'data', "#{name}.html")
|
32
|
-
page = FakePage.new(name,
|
33
|
-
body: open(file).read,
|
34
|
-
content_type: 'text/html')
|
35
|
-
@xhtml1_page = @http.get_page(page.url)
|
36
|
-
validator = subject.new(@xhtml1_page.doc,
|
37
|
-
@xhtml1_page.body)
|
38
|
-
validator.dtd.system_id.must_equal dtd_uri
|
39
|
-
validator.namespace.must_equal name
|
40
|
-
validator.valid?.must_equal true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe('html5') do
|
45
|
-
describe('when valid') do
|
46
|
-
before do
|
47
|
-
validator_res = File.join('spec', 'data', 'validator.nu-success.html')
|
48
|
-
stub_request(:any, subject.html5_validator_service_url)
|
49
|
-
.to_return(body: open(validator_res).read)
|
50
|
-
end
|
51
|
-
it 'html5 should be valid' do
|
52
|
-
name = 'html5'
|
53
|
-
file = File.join('spec', 'data', "#{name}.html")
|
54
|
-
page = FakePage.new(name,
|
55
|
-
body: open(file).read,
|
56
|
-
content_type: 'text/html')
|
57
|
-
@html5_page = @http.get_page(page.url)
|
58
|
-
validator = subject.new(@html5_page.doc,
|
59
|
-
@html5_page.body)
|
60
|
-
validator.valid?.must_equal true
|
61
|
-
end
|
62
|
-
it 'with DLFP' do
|
63
|
-
name = 'html5'
|
64
|
-
file = File.join('spec', 'data', "#{name}-linuxfr.html")
|
65
|
-
page = FakePage.new(name,
|
66
|
-
body: open(file).read,
|
67
|
-
content_type: 'text/html')
|
68
|
-
@html5_page = @http.get_page(page.url)
|
69
|
-
validator = subject.new(@html5_page.doc,
|
70
|
-
@html5_page.body)
|
71
|
-
validator.valid?.must_equal true
|
72
|
-
end
|
73
|
-
end
|
74
|
-
describe('when not valid') do
|
75
|
-
before do
|
76
|
-
validator_res = File.join('spec', 'data', 'validator.nu-failure.html')
|
77
|
-
stub_request(:any, subject.html5_validator_service_url)
|
78
|
-
.to_return(body: open(validator_res).read)
|
79
|
-
name = 'html5'
|
80
|
-
file = File.join('spec', 'data', "#{name}-linuxfr.html")
|
81
|
-
page = FakePage.new(name,
|
82
|
-
body: open(file).read,
|
83
|
-
content_type: 'text/html')
|
84
|
-
@html5_page = @http.get_page(page.url)
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'should have an array of errors' do
|
88
|
-
validator = subject.new(@html5_page.doc,
|
89
|
-
@html5_page.body)
|
90
|
-
validator.valid?.must_equal false
|
91
|
-
validator.errors.size.must_equal 38
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'should exclude errors ignored by :ignore option' do
|
95
|
-
ignore = /The nowrap attribute on the td element is obsolete/
|
96
|
-
validator = subject.new(@html5_page.doc,
|
97
|
-
@html5_page.body,
|
98
|
-
ignore)
|
99
|
-
validator.valid?.must_equal false
|
100
|
-
validator.errors.size.must_equal 36
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe('excessive') do
|
105
|
-
before do
|
106
|
-
validator_res = File.join('spec', 'data', 'validator.nu-excessive.html')
|
107
|
-
stub_request(:any, subject.html5_validator_service_url)
|
108
|
-
.to_return(body: open(validator_res).read)
|
109
|
-
end
|
110
|
-
it 'html5 should have errors' do
|
111
|
-
name = 'html5'
|
112
|
-
file = File.join('spec', 'data', "#{name}.html")
|
113
|
-
page = FakePage.new(name,
|
114
|
-
body: open(file).read,
|
115
|
-
content_type: 'text/html')
|
116
|
-
@html5_page = @http.get_page(page.url)
|
117
|
-
validator = subject.new(@html5_page.doc,
|
118
|
-
@html5_page.body)
|
119
|
-
validator.valid?.must_equal false
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe('html4') do
|
125
|
-
it 'should validate html4' do
|
126
|
-
name = 'html4-strict'
|
127
|
-
file = File.join('spec', 'data', "#{name}.html")
|
128
|
-
page = FakePage.new(name,
|
129
|
-
body: open(file).read,
|
130
|
-
content_type: 'text/html')
|
131
|
-
@html4_strict_page = @http.get_page(page.url)
|
132
|
-
validator = subject.new(@html4_strict_page.doc,
|
133
|
-
@html4_strict_page.body)
|
134
|
-
validator.valid?.must_equal true
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
data/spec/webmock_helper.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'webmock/minitest'
|
3
|
-
|
4
|
-
# FakePage html helper for webmock
|
5
|
-
class FakePage
|
6
|
-
include WebMock::API
|
7
|
-
|
8
|
-
attr_accessor :links
|
9
|
-
attr_accessor :hrefs
|
10
|
-
attr_accessor :body
|
11
|
-
|
12
|
-
def initialize(name = '', options = {})
|
13
|
-
@name = name
|
14
|
-
@links = [options[:links]].flatten if options.key?(:links)
|
15
|
-
@hrefs = [options[:hrefs]].flatten if options.key?(:hrefs)
|
16
|
-
@content_type = options[:content_type] || 'text/html'
|
17
|
-
@body = options[:body]
|
18
|
-
|
19
|
-
create_body unless @body
|
20
|
-
add_to_webmock
|
21
|
-
end
|
22
|
-
|
23
|
-
def url
|
24
|
-
SPEC_DOMAIN + @name
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def create_body
|
30
|
-
@body = '<html><body>'
|
31
|
-
@links.each { |l| @body += "<a href=\"#{SPEC_DOMAIN}#{l}\"></a>" } if @links
|
32
|
-
@hrefs.each { |h| @body += "<a href=\"#{h}\"></a>" } if @hrefs
|
33
|
-
@body += '</body></html>'
|
34
|
-
end
|
35
|
-
|
36
|
-
def add_to_webmock
|
37
|
-
options = { body: @body, headers: { 'Content-Type' => @content_type } }
|
38
|
-
stub_request(:get, url).to_return(options)
|
39
|
-
end
|
40
|
-
end
|