validate-website 1.5.0 → 1.5.3

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.
@@ -0,0 +1,22 @@
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>
@@ -0,0 +1,22 @@
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>
@@ -0,0 +1,61 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ describe ValidateWebsite::Static do
4
+ before do
5
+ _out, _err = capture_io do
6
+ @validate_website = ValidateWebsite::Static.new(color: false)
7
+ end
8
+ end
9
+
10
+ it 'no space in directory name' do
11
+ pattern = File.join(File.dirname(__FILE__), 'example/**/*.html')
12
+ _out, _err = capture_io do
13
+ @validate_website.crawl(pattern: pattern,
14
+ site: 'http://dev.af83.com/',
15
+ markup: false,
16
+ not_found: false)
17
+ end
18
+ @validate_website.not_founds_count.must_equal 0
19
+ end
20
+
21
+ it 'not found' do
22
+ pattern = File.join(File.dirname(__FILE__), '**/*.html')
23
+ Dir.chdir('test/data') do
24
+ _out, _err = capture_io do
25
+ @validate_website.crawl(pattern: pattern,
26
+ site: 'https://linuxfr.org/',
27
+ markup: false,
28
+ not_found: true)
29
+ end
30
+ @validate_website.not_founds_count.must_equal 503
31
+ end
32
+ end
33
+
34
+ it 'ignore' do
35
+ pattern = File.join(File.dirname(__FILE__), 'data',
36
+ 'w3.org-xhtml1-strict-errors.html')
37
+ Dir.chdir('test/data') do
38
+ _out, _err = capture_io do
39
+ @validate_website.crawl(pattern: pattern,
40
+ site: 'http://w3.org/',
41
+ ignore: /height|width|Length/)
42
+ end
43
+ @validate_website.errors_count.must_equal 0
44
+ end
45
+ end
46
+
47
+ describe 'css' do
48
+ it 'validate' do
49
+ pattern = File.join(File.dirname(__FILE__), '**/*.{html,css}')
50
+ Dir.chdir('test/data') do
51
+ _out, _err = capture_io do
52
+ @validate_website.crawl(pattern: pattern,
53
+ site: 'https://linuxfr.org/',
54
+ markup: false,
55
+ css_syntax: true)
56
+ end
57
+ @validate_website.errors_count.must_equal 1
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,9 @@
1
+ require 'minitest/autorun'
2
+ require 'spidr'
3
+
4
+ require 'validate_website/core'
5
+
6
+ require File.expand_path('../webmock_helper', __FILE__)
7
+
8
+ TEST_DOMAIN = 'http://www.example.com/'
9
+ ENV['LC_ALL'] = 'C.UTF-8' if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
@@ -0,0 +1,136 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ describe ValidateWebsite::Validator do
4
+ let(:subject) { ValidateWebsite::Validator }
5
+
6
+ before do
7
+ WebMock.reset!
8
+ @http = Spidr::Agent.new
9
+ end
10
+
11
+ describe('xhtml1') do
12
+ it 'can ignore' do
13
+ name = 'w3.org-xhtml1-strict-errors'
14
+ file = File.join('test', 'data', "#{name}.html")
15
+ page = FakePage.new(name,
16
+ body: open(file).read,
17
+ content_type: 'text/html')
18
+ @xhtml1_page = @http.get_page(page.url)
19
+ ignore = /width|height|Length/
20
+ validator = subject.new(@xhtml1_page.doc,
21
+ @xhtml1_page.body,
22
+ ignore)
23
+ validator.valid?.must_equal true
24
+ validator.errors.size.must_equal 0
25
+ end
26
+
27
+ it 'xhtml1-strict should be valid' do
28
+ name = 'xhtml1-strict'
29
+ dtd_uri = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
30
+ file = File.join('test', 'data', "#{name}.html")
31
+ page = FakePage.new(name,
32
+ body: open(file).read,
33
+ content_type: 'text/html')
34
+ @xhtml1_page = @http.get_page(page.url)
35
+ validator = subject.new(@xhtml1_page.doc,
36
+ @xhtml1_page.body)
37
+ validator.dtd.system_id.must_equal dtd_uri
38
+ validator.namespace.must_equal name
39
+ validator.valid?.must_equal true
40
+ end
41
+ end
42
+
43
+ describe('html5') do
44
+ describe('when valid') do
45
+ before do
46
+ validator_res = File.join('test', 'data', 'validator.nu-success.html')
47
+ stub_request(:any, subject.html5_validator_service_url)
48
+ .to_return(body: open(validator_res).read)
49
+ end
50
+ it 'html5 should be valid' do
51
+ name = 'html5'
52
+ file = File.join('test', 'data', "#{name}.html")
53
+ page = FakePage.new(name,
54
+ body: open(file).read,
55
+ content_type: 'text/html')
56
+ @html5_page = @http.get_page(page.url)
57
+ validator = subject.new(@html5_page.doc,
58
+ @html5_page.body)
59
+ validator.valid?.must_equal true
60
+ end
61
+ it 'with DLFP' do
62
+ name = 'html5'
63
+ file = File.join('test', 'data', "#{name}-linuxfr.html")
64
+ page = FakePage.new(name,
65
+ body: open(file).read,
66
+ content_type: 'text/html')
67
+ @html5_page = @http.get_page(page.url)
68
+ validator = subject.new(@html5_page.doc,
69
+ @html5_page.body)
70
+ validator.valid?.must_equal true
71
+ end
72
+ end
73
+ describe('when not valid') do
74
+ before do
75
+ validator_res = File.join('test', 'data', 'validator.nu-failure.html')
76
+ stub_request(:any, subject.html5_validator_service_url)
77
+ .to_return(body: open(validator_res).read)
78
+ name = 'html5'
79
+ file = File.join('test', 'data', "#{name}-linuxfr.html")
80
+ page = FakePage.new(name,
81
+ body: open(file).read,
82
+ content_type: 'text/html')
83
+ @html5_page = @http.get_page(page.url)
84
+ end
85
+
86
+ it 'should have an array of errors' do
87
+ validator = subject.new(@html5_page.doc,
88
+ @html5_page.body)
89
+ validator.valid?.must_equal false
90
+ validator.errors.size.must_equal 38
91
+ end
92
+
93
+ it 'should exclude errors ignored by :ignore option' do
94
+ ignore = /The nowrap attribute on the td element is obsolete/
95
+ validator = subject.new(@html5_page.doc,
96
+ @html5_page.body,
97
+ ignore)
98
+ validator.valid?.must_equal false
99
+ validator.errors.size.must_equal 36
100
+ end
101
+ end
102
+
103
+ describe('excessive') do
104
+ before do
105
+ validator_res = File.join('test', 'data', 'validator.nu-excessive.html')
106
+ stub_request(:any, subject.html5_validator_service_url)
107
+ .to_return(body: open(validator_res).read)
108
+ end
109
+ it 'html5 should have errors' do
110
+ name = 'html5'
111
+ file = File.join('test', 'data', "#{name}.html")
112
+ page = FakePage.new(name,
113
+ body: open(file).read,
114
+ content_type: 'text/html')
115
+ @html5_page = @http.get_page(page.url)
116
+ validator = subject.new(@html5_page.doc,
117
+ @html5_page.body)
118
+ validator.valid?.must_equal false
119
+ end
120
+ end
121
+ end
122
+
123
+ describe('html4') do
124
+ it 'should validate html4' do
125
+ name = 'html4-strict'
126
+ file = File.join('test', 'data', "#{name}.html")
127
+ page = FakePage.new(name,
128
+ body: open(file).read,
129
+ content_type: 'text/html')
130
+ @html4_strict_page = @http.get_page(page.url)
131
+ validator = subject.new(@html4_strict_page.doc,
132
+ @html4_strict_page.body)
133
+ validator.valid?.must_equal true
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,40 @@
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
+ TEST_DOMAIN + @name
25
+ end
26
+
27
+ private
28
+
29
+ def create_body
30
+ @body = '<html><body>'
31
+ @links.each { |l| @body += "<a href=\"#{TEST_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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validate-website
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Arnoud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-27 00:00:00.000000000 Z
11
+ date: 2015-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spidr
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '5.5'
103
+ version: '5.6'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '5.5'
110
+ version: '5.6'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: minitest-line
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '1.18'
131
+ version: '1.21'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '1.18'
138
+ version: '1.21'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +265,23 @@ files:
265
265
  - lib/validate_website/version.rb
266
266
  - man/man1/validate-website-static.1
267
267
  - man/man1/validate-website.1
268
+ - test/core_test.rb
269
+ - test/crawler_test.rb
270
+ - test/data/assets/application-92f19110a9d47a56d2ebe744e15af301.css
271
+ - test/data/html4-strict.html
272
+ - test/data/html5-linuxfr.html
273
+ - test/data/html5.html
274
+ - test/data/news/ryzom-naissance-du-projet-libre-ryzom-forge.md
275
+ - test/data/validator.nu-excessive.html
276
+ - test/data/validator.nu-failure.html
277
+ - test/data/validator.nu-success.html
278
+ - test/data/w3.org-xhtml1-strict-errors.html
279
+ - test/data/xhtml1-strict.html
280
+ - test/example/ruby smalltalk/blockcamp-paris-le-28-novembre.html
281
+ - test/static_test.rb
282
+ - test/test_helper.rb
283
+ - test/validator_test.rb
284
+ - test/webmock_helper.rb
268
285
  homepage: http://github.com/spk/validate-website
269
286
  licenses:
270
287
  - MIT
@@ -288,9 +305,13 @@ requirements:
288
305
  - rainbow
289
306
  - multipart_body
290
307
  rubyforge_project:
291
- rubygems_version: 2.4.5
308
+ rubygems_version: 2.4.5.1
292
309
  signing_key:
293
310
  specification_version: 4
294
311
  summary: Web crawler for checking the validity of your documents
295
- test_files: []
312
+ test_files:
313
+ - test/static_test.rb
314
+ - test/core_test.rb
315
+ - test/crawler_test.rb
316
+ - test/validator_test.rb
296
317
  has_rdoc: