validate-website 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +22 -0
- data/README.rdoc +52 -44
- data/Rakefile +20 -6
- data/bin/validate-website +12 -12
- data/lib/validate_website.rb +62 -28
- data/lib/validator.rb +43 -9
- data/man/man1/validate-website.1 +124 -0
- data/spec/data/html4-strict.html +239 -0
- data/spec/data/html5.html +1 -2
- data/spec/validate_website_spec.rb +9 -12
- data/spec/validator_spec.rb +11 -1
- metadata +35 -15
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2009-2010 Laurent Arnoud <laurent@spkdev.net>
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
== DESCRIPTION
|
4
|
-
|
5
|
-
Web crawler for checking the validity of your documents.
|
1
|
+
= validate-website - Web crawler for checking the validity of your documents
|
6
2
|
|
7
3
|
== INSTALLATION
|
8
4
|
|
@@ -10,48 +6,60 @@
|
|
10
6
|
|
11
7
|
== SYNOPSIS
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
-
|
9
|
+
validate-website [OPTIONS]
|
10
|
+
|
11
|
+
== DESCRIPTION
|
12
|
+
|
13
|
+
validate-website is a web crawler for checking the markup validity and not
|
14
|
+
found urls.
|
15
|
+
|
16
|
+
== OPTIONS
|
17
|
+
|
18
|
+
-s, --site SITE
|
19
|
+
Website to crawl (Default: http://localhost:3000/)
|
20
|
+
-u, --user-agent USERAGENT
|
21
|
+
Change user agent (Default: Anemone/VERSION)
|
22
|
+
-e, --exclude EXCLUDE
|
23
|
+
Url to exclude (ex: redirect|news)
|
24
|
+
-f, --file FILE
|
25
|
+
Save not well formed or not found (with -n used) urls
|
26
|
+
-a, --authorization USER,PASS
|
27
|
+
Basic http authentification
|
28
|
+
-c, --cookies COOKIES
|
29
|
+
Set defaults cookies
|
30
|
+
-m, --[no-]markup-validation
|
31
|
+
Markup validation (Default: true)
|
32
|
+
-n, --not-found
|
33
|
+
Log not found url (Default: false)
|
34
|
+
-v, --verbose
|
35
|
+
Show detail of validator errors (Default: false).
|
36
|
+
-d, --debug
|
37
|
+
Show anemone log (Default: false)
|
38
|
+
-h, --help
|
39
|
+
Show help message and exit.
|
23
40
|
|
24
|
-
==
|
41
|
+
== EXIT STATUS
|
42
|
+
0::
|
43
|
+
Markup is valid and no 404 found.
|
44
|
+
64::
|
45
|
+
Not valid markup found.
|
46
|
+
65::
|
47
|
+
There are pages not found.
|
48
|
+
66::
|
49
|
+
There are not valid markup and pages not found.
|
25
50
|
|
26
|
-
|
27
|
-
add auth support and html body)
|
28
|
-
rainbow >= 1.0.4 (for console color)
|
51
|
+
== REQUIREMENTS
|
29
52
|
|
30
|
-
|
53
|
+
* spk-anemone, '>= 0.4.0'
|
54
|
+
* rainbow, '>= 1.1'
|
55
|
+
* html5, '= 0.10.0'
|
31
56
|
|
32
|
-
|
33
|
-
|
57
|
+
== CREDITS
|
58
|
+
|
59
|
+
* Thanks tenderlove for Nokogiri, this tool is inspired from markup_validity.
|
60
|
+
* And Chris Kite for Anemone web-spider framework.
|
34
61
|
|
35
62
|
== LICENSE
|
36
|
-
|
37
|
-
|
38
|
-
Copyright (c) 2009 Laurent Arnoud
|
39
|
-
|
40
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
41
|
-
a copy of this software and associated documentation files (the
|
42
|
-
'Software'), to deal in the Software without restriction, including
|
43
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
44
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
45
|
-
permit persons to whom the Software is furnished to do so, subject to
|
46
|
-
the following conditions:
|
47
|
-
|
48
|
-
The above copyright notice and this permission notice shall be
|
49
|
-
included in all copies or substantial portions of the Software.
|
50
|
-
|
51
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
52
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
53
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
54
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
55
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
56
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
57
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
63
|
+
The MIT License
|
64
|
+
|
65
|
+
Copyright (c) 2009-2010 Laurent Arnoud <laurent@spkdev.net>
|
data/Rakefile
CHANGED
@@ -2,14 +2,15 @@ require 'rake/packagetask'
|
|
2
2
|
require 'rake/rdoctask'
|
3
3
|
require 'rake'
|
4
4
|
require 'find'
|
5
|
+
require "rspec/core/rake_task" # RSpec 2.0
|
5
6
|
|
6
7
|
# Globals
|
7
8
|
|
8
9
|
PKG_NAME = 'validate-website'
|
9
|
-
PKG_VERSION = '0.
|
10
|
+
PKG_VERSION = '0.5.0'
|
10
11
|
|
11
|
-
PKG_FILES = ['README.rdoc', 'Rakefile']
|
12
|
-
Find.find('lib/', '
|
12
|
+
PKG_FILES = ['README.rdoc', 'Rakefile', 'LICENSE']
|
13
|
+
Find.find('bin/', 'lib/', 'man/', 'spec/') do |f|
|
13
14
|
if FileTest.directory?(f) and f =~ /\.svn|\.git/
|
14
15
|
Find.prune
|
15
16
|
else
|
@@ -52,19 +53,32 @@ spec = Gem::Specification.new do |s|
|
|
52
53
|
s.summary = 'Web crawler for checking the validity of your documents'
|
53
54
|
s.name = PKG_NAME
|
54
55
|
s.version = PKG_VERSION
|
55
|
-
s.requirements << 'spk-anemone' << 'rainbow'
|
56
|
+
s.requirements << 'spk-anemone' << 'rainbow' << 'html5'
|
56
57
|
s.add_dependency('spk-anemone', '>= 0.4.0')
|
57
58
|
s.add_dependency('rainbow', '>= 1.1')
|
58
|
-
s.
|
59
|
+
s.add_dependency('html5', '= 0.10.0')
|
60
|
+
s.add_development_dependency('rspec', '>= 2.0.0')
|
59
61
|
s.add_development_dependency('fakeweb', '>= 1.3.0')
|
60
62
|
s.require_path = 'lib'
|
61
63
|
s.bindir = 'bin'
|
62
64
|
s.executables << 'validate-website'
|
63
65
|
s.files = PKG_FILES
|
64
|
-
s.description = '
|
66
|
+
s.description = 'validate-website is a web crawler for checking the markup' +
|
67
|
+
'validity and not found urls.'
|
65
68
|
end
|
66
69
|
|
67
70
|
Rake::GemPackageTask.new(spec) do |pkg|
|
68
71
|
pkg.need_zip = true
|
69
72
|
pkg.need_tar = true
|
70
73
|
end
|
74
|
+
|
75
|
+
desc 'Update manpage from asciidoc file'
|
76
|
+
task :manpage do
|
77
|
+
system('a2x -f manpage -D man/man1 doc/validate-website.txt')
|
78
|
+
end
|
79
|
+
|
80
|
+
# RSpec 2.0
|
81
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
82
|
+
spec.pattern = 'spec/*_spec.rb'
|
83
|
+
spec.rspec_opts = ['--backtrace']
|
84
|
+
end
|
data/bin/validate-website
CHANGED
@@ -10,16 +10,16 @@ require 'validate_website'
|
|
10
10
|
validate_website = ValidateWebsite.new(ARGV)
|
11
11
|
options = validate_website.options
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
validate_website.crawl options[:site],
|
14
|
+
:markup_validation => options[:markup_validation],
|
15
|
+
:user_agent => options[:user_agent],
|
16
|
+
:exclude => options[:exclude],
|
17
|
+
:file => options[:file],
|
18
|
+
:authorization => options[:authorization],
|
19
|
+
:not_found => options[:not_found],
|
20
|
+
:cookies => options[:cookies],
|
21
|
+
:accept_cookies => options[:accept_cookies],
|
22
|
+
:verbose => options[:debug],
|
23
|
+
:error_verbose => options[:verbose]
|
24
24
|
|
25
|
-
exit(
|
25
|
+
exit(validate_website.exit_status)
|
data/lib/validate_website.rb
CHANGED
@@ -10,14 +10,22 @@ class ValidateWebsite
|
|
10
10
|
|
11
11
|
include ColorfulMessages
|
12
12
|
|
13
|
+
EXIT_SUCCESS = 0
|
14
|
+
EXIT_FAILURE_MARKUP = 64
|
15
|
+
EXIT_FAILURE_NOT_FOUND = 65
|
16
|
+
EXIT_FAILURE_MARKUP_NOT_FOUND = 66
|
17
|
+
|
13
18
|
def initialize(args=[])
|
19
|
+
@markup_error = nil
|
20
|
+
@not_found_error = nil
|
21
|
+
|
14
22
|
@options = {
|
15
23
|
:site => 'http://localhost:3000/',
|
16
24
|
:markup_validation => true,
|
17
|
-
:
|
25
|
+
:user_agent => Anemone::Core::DEFAULT_OPTS[:user_agent],
|
18
26
|
:exclude => nil,
|
19
27
|
:file => nil,
|
20
|
-
:
|
28
|
+
:authorization => nil,
|
21
29
|
# log not found url (404 status code)
|
22
30
|
:not_found => false,
|
23
31
|
:cookies => nil,
|
@@ -36,30 +44,47 @@ class ValidateWebsite
|
|
36
44
|
def parse(args)
|
37
45
|
opts = OptionParser.new do |o|
|
38
46
|
o.set_summary_indent(' ')
|
39
|
-
o.banner =
|
40
|
-
o.define_head
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
47
|
+
o.banner = 'Usage: validate-website [OPTIONS]'
|
48
|
+
o.define_head 'validate-website - Web crawler for checking the validity'+
|
49
|
+
' of your documents'
|
50
|
+
o.separator ''
|
51
|
+
|
52
|
+
o.on("-s", "--site 'SITE'", String,
|
53
|
+
"Website to crawl (Default: #{@options[:site]})") { |v|
|
54
|
+
@options[:site] = v
|
55
|
+
}
|
56
|
+
o.on("-u", "--user-agent 'USERAGENT'", String,
|
57
|
+
"Change user agent (Default: #{@options[:user_agent]})") { |v|
|
58
|
+
@options[:user_agent] = v
|
59
|
+
}
|
60
|
+
o.on("-e", "--exclude 'EXCLUDE'", String,
|
61
|
+
"Url to exclude (ex: 'redirect|news')") { |v|
|
62
|
+
@options[:exclude] = v
|
63
|
+
}
|
64
|
+
o.on("-f", "--file 'FILE'", String,
|
65
|
+
"Save not well formed or not found urls") { |v| @options[:file] = v }
|
66
|
+
o.on("-a", "--authorization 'USER,PASS'", Array,
|
67
|
+
"Basic http authentification") { |v|
|
68
|
+
@options[:authorization] = v
|
69
|
+
}
|
70
|
+
o.on("-c", "--cookies 'COOKIES'", String,
|
71
|
+
"Set defaults cookies") { |v| @options[:cookies] = v }
|
55
72
|
o.on("-m", "--[no-]markup-validation",
|
56
|
-
"Markup validation (Default: #{@options[:markup_validation]})") { |v|
|
73
|
+
"Markup validation (Default: #{@options[:markup_validation]})") { |v|
|
74
|
+
@options[:markup_validation] = v
|
75
|
+
}
|
57
76
|
o.on("-n", "--not-found",
|
58
|
-
"Log not found url (Default: #{@options[:not_found]})") { |v|
|
77
|
+
"Log not found url (Default: #{@options[:not_found]})") { |v|
|
78
|
+
@options[:not_found] = v
|
79
|
+
}
|
59
80
|
o.on("-v", "--verbose",
|
60
|
-
"Show
|
81
|
+
"Show validator errors (Default: #{@options[:verbose]})") { |v|
|
82
|
+
@options[:verbose] = v
|
83
|
+
}
|
61
84
|
o.on("-d", "--debug",
|
62
|
-
"Show anemone log (Default: #{@options[:debug]})") { |v|
|
85
|
+
"Show anemone log (Default: #{@options[:debug]})") { |v|
|
86
|
+
@options[:debug] = v
|
87
|
+
}
|
63
88
|
|
64
89
|
o.separator ""
|
65
90
|
o.on_tail("-h", "--help", "Show this help message.") { puts o; exit }
|
@@ -79,8 +104,6 @@ class ValidateWebsite
|
|
79
104
|
end
|
80
105
|
|
81
106
|
def crawl(site, opts={})
|
82
|
-
exit_code = 0
|
83
|
-
|
84
107
|
@anemone = Anemone.crawl(site, opts) do |anemone|
|
85
108
|
anemone.skip_links_like Regexp.new(opts[:exclude]) if opts[:exclude]
|
86
109
|
|
@@ -119,22 +142,33 @@ class ValidateWebsite
|
|
119
142
|
if validator.valid?
|
120
143
|
puts success(msg)
|
121
144
|
else
|
122
|
-
|
145
|
+
@markup_error = true
|
123
146
|
puts error(msg)
|
124
|
-
puts error(validator.errors) if opts[:error_verbose]
|
147
|
+
puts error(validator.errors.join(", ")) if opts[:error_verbose]
|
125
148
|
to_file(url)
|
126
149
|
end
|
127
150
|
end
|
128
151
|
end
|
129
152
|
|
130
153
|
if opts[:not_found] && page.not_found?
|
131
|
-
|
154
|
+
@not_found_error = true
|
132
155
|
puts error("%s linked in %s but not exist" % [url, page.referer])
|
133
156
|
to_file(url)
|
134
157
|
end
|
135
158
|
}
|
136
159
|
end
|
137
|
-
|
160
|
+
end
|
161
|
+
|
162
|
+
def exit_status
|
163
|
+
if @markup_error && @not_found_error
|
164
|
+
EXIT_FAILURE_MARKUP_NOT_FOUND
|
165
|
+
elsif @markup_error
|
166
|
+
EXIT_FAILURE_MARKUP
|
167
|
+
elsif @not_found_error
|
168
|
+
EXIT_FAILURE_NOT_FOUND
|
169
|
+
else
|
170
|
+
EXIT_SUCCESS
|
171
|
+
end
|
138
172
|
end
|
139
173
|
|
140
174
|
private
|
data/lib/validator.rb
CHANGED
@@ -6,14 +6,17 @@ class Validator
|
|
6
6
|
def initialize(page)
|
7
7
|
@page = page
|
8
8
|
@dtd = @page.doc.internal_subset
|
9
|
+
init_namespace(@dtd)
|
10
|
+
@errors = []
|
9
11
|
|
10
|
-
if @
|
11
|
-
@dtd_uri
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
if @namespace
|
13
|
+
if @dtd_uri && @page.body.match(@dtd_uri.to_s)
|
14
|
+
document = @page.body.sub(@dtd_uri.to_s, @namespace + '.dtd')
|
15
|
+
else
|
16
|
+
document = @page.body
|
17
|
+
end
|
15
18
|
@doc = Dir.chdir(XHTML_PATH) do
|
16
|
-
Nokogiri::XML(
|
19
|
+
Nokogiri::XML(document) { |cfg|
|
17
20
|
cfg.noent.dtdload.dtdvalid
|
18
21
|
}
|
19
22
|
end
|
@@ -24,15 +27,46 @@ class Validator
|
|
24
27
|
Nokogiri::XML::Schema(File.read(@namespace + '.xsd'))
|
25
28
|
end
|
26
29
|
end
|
27
|
-
|
30
|
+
|
31
|
+
if @xsd
|
32
|
+
# have the xsd so use it
|
33
|
+
@errors = @xsd.validate(@doc)
|
34
|
+
else
|
35
|
+
# dont have xsd fall back to dtd
|
36
|
+
@doc = Dir.chdir(XHTML_PATH) do
|
37
|
+
Nokogiri::HTML.parse(document)
|
38
|
+
end
|
39
|
+
@errors = @doc.errors
|
40
|
+
end
|
41
|
+
elsif @page.body =~ /^\<!DOCTYPE html\>/i
|
42
|
+
# html5 doctype
|
43
|
+
# http://dev.w3.org/html5/spec/Overview.html#the-doctype
|
44
|
+
require 'html5'
|
45
|
+
require 'html5/filters/validator'
|
46
|
+
html5_parser = HTML5::HTMLParser.new(:tokenizer => HTMLConformanceChecker)
|
47
|
+
html5_parser.parse(@page.body)
|
48
|
+
@errors = html5_parser.errors.collect{|e| e[1] }
|
28
49
|
else
|
29
|
-
@errors
|
50
|
+
@errors << 'Unknown Document'
|
30
51
|
end
|
31
52
|
rescue Nokogiri::XML::SyntaxError => e
|
32
|
-
|
53
|
+
# http://nokogiri.org/tutorials/ensuring_well_formed_markup.html
|
54
|
+
@errors << e
|
33
55
|
end
|
34
56
|
|
35
57
|
def valid?
|
36
58
|
@errors.length == 0
|
37
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
def init_namespace(dtd)
|
63
|
+
if dtd.system_id
|
64
|
+
dtd_uri = URI.parse(dtd.system_id)
|
65
|
+
if dtd.system_id && dtd_uri.path
|
66
|
+
@dtd_uri = dtd_uri
|
67
|
+
# http://www.w3.org/TR/xhtml1/#dtds
|
68
|
+
@namespace = File.basename(@dtd_uri.path, '.dtd')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
38
72
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
'\" t
|
2
|
+
.\" Title: validate-website
|
3
|
+
.\" Author: [see the "AUTHOR" section]
|
4
|
+
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
|
5
|
+
.\" Date: 10/31/2010
|
6
|
+
.\" Manual: \ \&
|
7
|
+
.\" Source: \ \&
|
8
|
+
.\" Language: English
|
9
|
+
.\"
|
10
|
+
.TH "VALIDATE\-WEBSITE" "1" "10/31/2010" "\ \&" "\ \&"
|
11
|
+
.\" -----------------------------------------------------------------
|
12
|
+
.\" * Define some portability stuff
|
13
|
+
.\" -----------------------------------------------------------------
|
14
|
+
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
15
|
+
.\" http://bugs.debian.org/507673
|
16
|
+
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
|
17
|
+
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
18
|
+
.ie \n(.g .ds Aq \(aq
|
19
|
+
.el .ds Aq '
|
20
|
+
.\" -----------------------------------------------------------------
|
21
|
+
.\" * set default formatting
|
22
|
+
.\" -----------------------------------------------------------------
|
23
|
+
.\" disable hyphenation
|
24
|
+
.nh
|
25
|
+
.\" disable justification (adjust text to left margin only)
|
26
|
+
.ad l
|
27
|
+
.\" -----------------------------------------------------------------
|
28
|
+
.\" * MAIN CONTENT STARTS HERE *
|
29
|
+
.\" -----------------------------------------------------------------
|
30
|
+
.SH "NAME"
|
31
|
+
validate-website \- Web crawler for checking the validity of your documents
|
32
|
+
.SH "SYNOPSIS"
|
33
|
+
.sp
|
34
|
+
\fBvalidate\-website\fR [\fIOPTIONS\fR]
|
35
|
+
.SH "DESCRIPTION"
|
36
|
+
.sp
|
37
|
+
validate\-website is a web crawler for checking the markup validity and not found urls\&.
|
38
|
+
.SH "OPTIONS"
|
39
|
+
.PP
|
40
|
+
\fB\-s\fR, \fB\-\-site\fR \fISITE\fR
|
41
|
+
.RS 4
|
42
|
+
Website to crawl (Default:
|
43
|
+
http://localhost:3000/)
|
44
|
+
.RE
|
45
|
+
.PP
|
46
|
+
\fB\-u\fR, \fB\-\-user\-agent\fR \fIUSERAGENT\fR
|
47
|
+
.RS 4
|
48
|
+
Change user agent (Default: Anemone/VERSION)
|
49
|
+
.RE
|
50
|
+
.PP
|
51
|
+
\fB\-e\fR, \fB\-\-exclude\fR \fIEXCLUDE\fR
|
52
|
+
.RS 4
|
53
|
+
Url to exclude (ex:
|
54
|
+
\fIredirect|news\fR)
|
55
|
+
.RE
|
56
|
+
.PP
|
57
|
+
\fB\-f\fR, \fB\-\-file\fR \fIFILE\fR
|
58
|
+
.RS 4
|
59
|
+
Save not well formed or not found (with \-n used) urls
|
60
|
+
.RE
|
61
|
+
.PP
|
62
|
+
\fB\-a\fR, \fB\-\-authorization\fR \fIUSER,PASS\fR
|
63
|
+
.RS 4
|
64
|
+
Basic http authentification
|
65
|
+
.RE
|
66
|
+
.PP
|
67
|
+
\fB\-c\fR, \fB\-\-cookies\fR \fICOOKIES\fR
|
68
|
+
.RS 4
|
69
|
+
Set defaults cookies
|
70
|
+
.RE
|
71
|
+
.PP
|
72
|
+
\fB\-m\fR, \fB\-\-[no\-]markup\-validation\fR
|
73
|
+
.RS 4
|
74
|
+
Markup validation (Default: true)
|
75
|
+
.RE
|
76
|
+
.PP
|
77
|
+
\fB\-n\fR, \fB\-\-not\-found\fR
|
78
|
+
.RS 4
|
79
|
+
Log not found url (Default: false)
|
80
|
+
.RE
|
81
|
+
.PP
|
82
|
+
\fB\-v\fR, \fB\-\-verbose\fR
|
83
|
+
.RS 4
|
84
|
+
Show detail of validator errors (Default: false)\&.
|
85
|
+
.RE
|
86
|
+
.PP
|
87
|
+
\fB\-d\fR, \fB\-\-debug\fR
|
88
|
+
.RS 4
|
89
|
+
Show anemone log (Default: false)
|
90
|
+
.RE
|
91
|
+
.PP
|
92
|
+
\fB\-h\fR, \fB\-\-help\fR
|
93
|
+
.RS 4
|
94
|
+
Show help message and exit\&.
|
95
|
+
.RE
|
96
|
+
.SH "EXIT STATUS"
|
97
|
+
.PP
|
98
|
+
0
|
99
|
+
.RS 4
|
100
|
+
Markup is valid and no 404 found\&.
|
101
|
+
.RE
|
102
|
+
.PP
|
103
|
+
64
|
104
|
+
.RS 4
|
105
|
+
Not valid markup found\&.
|
106
|
+
.RE
|
107
|
+
.PP
|
108
|
+
65
|
109
|
+
.RS 4
|
110
|
+
There are pages not found\&.
|
111
|
+
.RE
|
112
|
+
.PP
|
113
|
+
66
|
114
|
+
.RS 4
|
115
|
+
There are not valid markup and pages not found\&.
|
116
|
+
.RE
|
117
|
+
.SH "AUTHOR"
|
118
|
+
.sp
|
119
|
+
Laurent Arnoud <laurent@spkdev\&.net>
|
120
|
+
.SH "LICENSE"
|
121
|
+
.sp
|
122
|
+
The MIT License
|
123
|
+
.sp
|
124
|
+
Copyright (c) 2009\-2010 Laurent Arnoud <laurent@spkdev\&.net>
|
@@ -0,0 +1,239 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html lang="fr">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
+
<title>Debian -- Le système d'exploitation universel </title>
|
6
|
+
<link rev="made" href="mailto:webmaster@debian.org">
|
7
|
+
<link rel="shortcut icon" href="favicon.ico">
|
8
|
+
<meta name="Keywords" content="debian, GNU, linux, unix, open source, libre, DFSG">
|
9
|
+
<meta name="Description" content="Debian GNU/Linux est une distribution libre du système d'exploitation GNU/Linux. Elle est développée et mise à jour grâce au travail de nombreux utilisateurs qui offrent leur temps et leurs efforts.">
|
10
|
+
<meta name="Generator" content="WML 2.0.11 (19-Aug-2006)">
|
11
|
+
<meta name="Modified" content="2010-10-22 23:28:09">
|
12
|
+
<link rel="alternate" type="application/rss+xml"
|
13
|
+
title="Annonces de sécurité Debian (titres seulement)" href="security/dsa">
|
14
|
+
<link rel="alternate" type="application/rss+xml"
|
15
|
+
title="Annonces de sécurité Debian (résumés)" href="security/dsa-long">
|
16
|
+
<link href="./debian.css" rel="stylesheet" type="text/css">
|
17
|
+
<link href="./debian-fr.css" rel="stylesheet" type="text/css" media="all">
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="header">
|
21
|
+
<div id="upperheader">
|
22
|
+
<div id="logo">
|
23
|
+
<a href="./"><img src="./logos/openlogo-nd-50.png" width="50" height="61" alt=""></a>
|
24
|
+
<a href="./" rel="start"><img src="Pics/debian.png" width="179" height="61" alt="Projet Debian"></a>
|
25
|
+
</div> <!-- end logo -->
|
26
|
+
</div> <!-- end upperheader -->
|
27
|
+
<!--UdmComment-->
|
28
|
+
<div id="navbar">
|
29
|
+
<p class="hidecss"><a href="#inner">Sauter le menu</a></p>
|
30
|
+
<ul>
|
31
|
+
<li><a href="intro/about">À propos de Debian</a></li>
|
32
|
+
<li><a href="./News/">Actualités</a></li>
|
33
|
+
<li><a href="distrib/">Obtenir Debian</a></li>
|
34
|
+
<li><a href="./support">Assistance</a></li>
|
35
|
+
<li><a href="./devel/">Le coin du développeur</a></li>
|
36
|
+
<li><a href="./sitemap">Plan du site</a></li>
|
37
|
+
<li><a href="http://search.debian.org/">Recherche</a></li>
|
38
|
+
</ul>
|
39
|
+
</div> <!-- end navbar -->
|
40
|
+
</div> <!-- end header -->
|
41
|
+
<!--/UdmComment-->
|
42
|
+
<div id="outer">
|
43
|
+
<div id="inner">
|
44
|
+
<div id="leftcol">
|
45
|
+
<!--UdmComment-->
|
46
|
+
<ul>
|
47
|
+
<li><a href="intro/about">À propos de Debian</a>
|
48
|
+
<ul>
|
49
|
+
<li><a href="./social_contract">Notre contrat social</a></li>
|
50
|
+
<li><a href="./intro/free">Logiciel libre</a></li>
|
51
|
+
<li><a href="./partners/">Partenaires</a></li>
|
52
|
+
<li><a href="./donations">Dons</a></li>
|
53
|
+
<li><a href="./contact">Nous contacter</a></li>
|
54
|
+
</ul>
|
55
|
+
</li>
|
56
|
+
<li><a href="./News/">Actualités</a>
|
57
|
+
<ul>
|
58
|
+
<li><a href="./News/project/">Nouvelles du projet</a></li>
|
59
|
+
<li><a href="./events/">Événements</a></li>
|
60
|
+
</ul>
|
61
|
+
</li>
|
62
|
+
<li><a href="distrib/">Obtenir Debian</a>
|
63
|
+
<ul>
|
64
|
+
<li><a href="CD/vendors/">Vendeurs de CD</a></li>
|
65
|
+
<li><a href="CD/">Images ISO de CD</a></li>
|
66
|
+
<li><a href="distrib/netinst">Installation par le réseau</a></li>
|
67
|
+
<li><a href="distrib/pre-installed">Préinstallée</a></li>
|
68
|
+
</ul>
|
69
|
+
</li>
|
70
|
+
<li><a href="distrib/packages">Paquets Debian</a></li>
|
71
|
+
<li><a href="doc/">Documentation</a>
|
72
|
+
<ul>
|
73
|
+
<li><a href="./releases/">Dernière version</a></li>
|
74
|
+
<li><a href="./releases/stable/installmanual">Manuel d'installation</a></li>
|
75
|
+
<li><a href="doc/books">Livres Debian</a></li>
|
76
|
+
</ul>
|
77
|
+
</li>
|
78
|
+
<li><a href="./support">Assistance</a>
|
79
|
+
<ul>
|
80
|
+
<li><a href="./international/">Debian et l'international</a></li>
|
81
|
+
<li><a href="./security/">Informations sur la sécurité</a></li>
|
82
|
+
<li><a href="Bugs/">Rapports de bogues</a></li>
|
83
|
+
<li><a href="MailingLists/">Listes de diffusion</a></li>
|
84
|
+
<li><a href="http://lists.debian.org/">Archives des listes de diffusion</a></li>
|
85
|
+
<li><a href="./ports/">Portages/Architectures</a></li>
|
86
|
+
</ul>
|
87
|
+
</li>
|
88
|
+
<li><a href="misc/">Divers</a></li>
|
89
|
+
<li><a href="./intro/help">Aider Debian</a></li>
|
90
|
+
<li><a href="./devel/">Le coin du développeur</a></li>
|
91
|
+
<li><a href="./sitemap">Plan du site</a></li>
|
92
|
+
<li><a href="http://search.debian.org/">Recherche</a></li>
|
93
|
+
</ul>
|
94
|
+
<form method="get" action="http://search.debian.org/">
|
95
|
+
<p>
|
96
|
+
<input type="text" name="q" size="12">
|
97
|
+
</p>
|
98
|
+
</form>
|
99
|
+
<p>
|
100
|
+
<a href="./sponsor.html"><img src="sponsor_img.jpg" alt="Le site de notre sponsor" width="102" height="60"></a>
|
101
|
+
</p>
|
102
|
+
<p>
|
103
|
+
<a href="http://validator.w3.org/check/referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" width="88" height="31"></a>
|
104
|
+
</p>
|
105
|
+
<p>
|
106
|
+
<img src="http://jigsaw.w3.org/css-validator/images/vcss"
|
107
|
+
alt="Valid CSS!" width="88" height="31">
|
108
|
+
</p>
|
109
|
+
<!--/UdmComment-->
|
110
|
+
</div> <!-- end leftcol -->
|
111
|
+
<div id="maincol">
|
112
|
+
<a href="./News/2009/20090214"><img src="Pics/lennybanner_indexed.png" alt="Debian 5.0 - Le système d'exploitation universel" width="380" height="310" style="margin-right: 10px; float: left;"></a>
|
113
|
+
<h2>Qu'est-ce que Debian ?</h2>
|
114
|
+
<p><a href="http://www.debian.org/">Debian</a> est un système d'exploitation
|
115
|
+
<a href="intro/free">libre</a> pour votre ordinateur. Un système d'exploitation
|
116
|
+
est la suite des programmes de base et des utilitaires qui permettent à un
|
117
|
+
ordinateur de fonctionner. Debian utilise le noyau
|
118
|
+
<a href="http://www.kernel.org/">Linux</a> (le cœur d'un système d'exploitation),
|
119
|
+
mais la plupart des outils de base du système proviennent du
|
120
|
+
<a href="http://www.gnu.org/">projet GNU</a> ; d'où le nom GNU/Linux.</p>
|
121
|
+
<p>Debian GNU/Linux est bien plus qu'un simple système d'exploitation :
|
122
|
+
il contient plus de 25000
|
123
|
+
<a href="distrib/packages">paquets</a> ; les paquets sont des composants
|
124
|
+
logiciels précompilés conçus pour s'installer facilement sur votre machine.</p>
|
125
|
+
<p><a href="intro/about">Suite...</a>
|
126
|
+
<hr>
|
127
|
+
<h2>Pour commencer</h2>
|
128
|
+
<p>La <a href="releases/stable/">dernière version stable de Debian</a> est
|
129
|
+
la 5.0. La dernière mise à jour de cette version a été publiée
|
130
|
+
le 4 septembre 2010. Vous pouvez aussi accéder aux
|
131
|
+
<a href="releases/">autres versions disponibles de Debian</a>.</p>
|
132
|
+
<p>Si vous souhaitez commencer à utiliser Debian, vous pouvez facilement
|
133
|
+
<a href="distrib/">en obtenir une copie</a>, et ensuite suivre les
|
134
|
+
<a href="releases/stable/installmanual">instructions d'installation</a>
|
135
|
+
pour l'installer.</p>
|
136
|
+
<p>Si vous mettez à niveau votre système depuis une ancienne version vers
|
137
|
+
la dernière version stable publiée, veuillez lire les
|
138
|
+
<a href="releases/stable/releasenotes">notes de publication</a>
|
139
|
+
avant de commencer.</p>
|
140
|
+
<p>Pour obtenir de l'aide concernant l'utilisation ou la configuration
|
141
|
+
de Debian, consultez nos pages sur la <a href="doc/">documentation</a>
|
142
|
+
et l'<a href="support">assistance</a>.</p>
|
143
|
+
<p>Les utilisateurs qui parlent une langue autre que l'anglais peuvent
|
144
|
+
consulter la section sur l'<a href="international/">international</a>.</p>
|
145
|
+
<p>Les personnes ayant un autre système qu'Intel x86 peuvent
|
146
|
+
consulter la section sur les <a href="ports/">portages</a>.</p>
|
147
|
+
<hr>
|
148
|
+
<h2>Actualités</h2>
|
149
|
+
<p><tt>[19 octobre 2010]</tt> <strong><a href="News/2010/20101019">Debian sur le point d'accueillir officiellement les contributeurs non empaqueteurs</a></strong><br>
|
150
|
+
<tt>[7 octobre 2010]</tt> <strong><a href="News/2010/20101007">Debian à la rencontre de la <q>Society for Neuroscience</q></a></strong><br>
|
151
|
+
<tt>[8 septembre 2010]</tt> <strong><a href="News/2010/20100908">Paris Mini-DebConf 2010</a></strong><br>
|
152
|
+
<tt>[5 septembre 2010]</tt> <strong><a href="News/2010/20100905">Le service de rétroportages (« backports ») devient officiel</a></strong><br>
|
153
|
+
<tt>[4 septembre 2010]</tt> <strong><a href="News/2010/20100904">Publication de la mise à jour de Debian GNU/Linux 5.0.6</a></strong><br>
|
154
|
+
<tt>[3 septembre 2010]</tt> <strong><a href="News/2010/20100903">Conférence 2010 de la communauté Debian italienne - du 17 au 19 septembre à Pérouse, Italie</a></strong><br>
|
155
|
+
</p>
|
156
|
+
<p>Pour les communiqués plus anciens, consultez la suite de la page <a href="./News/">actualités</a>.
|
157
|
+
Si vous voulez recevoir un courrier (en anglais) à chaque fois qu'un communiqué paraît, abonnez-vous
|
158
|
+
à la <a href="MailingLists/debian-announce">liste de diffusion debian-announce</a>.</p>
|
159
|
+
<hr>
|
160
|
+
<h2>Annonces de sécurité</h2>
|
161
|
+
<p><tt>[22 octobre 2010]</tt> <strong><a href="security/2010/dsa-2122">DSA-2122 glibc</a></strong> - missing input sanitization <br>
|
162
|
+
<tt>[19 octobre 2010]</tt> <strong><a href="security/2010/dsa-2121">DSA-2121 typo3-src</a></strong> - several vulnerabilities <br>
|
163
|
+
<tt>[12 octobre 2010]</tt> <strong><a href="security/2010/dsa-2120">DSA-2120 postgresql-8.3</a></strong> - privilege escalation <br>
|
164
|
+
<tt>[12 octobre 2010]</tt> <strong><a href="security/2010/dsa-2119">DSA-2119 poppler</a></strong> - several vulnerabilities <br>
|
165
|
+
<tt>[8 octobre 2010]</tt> <strong><a href="security/2010/dsa-2118">DSA-2118 subversion</a></strong> - logic flaw <br>
|
166
|
+
<tt>[4 octobre 2010]</tt> <strong><a href="security/2010/dsa-2117">DSA-2117 apr-util</a></strong> - denial of service <br>
|
167
|
+
<tt>[4 octobre 2010]</tt> <strong><a href="security/2010/dsa-2116">DSA-2116 freetype</a></strong> - integer overflow <br>
|
168
|
+
<tt>[29 septembre 2010]</tt> <strong><a href="security/2010/dsa-2115">DSA-2115 moodle</a></strong> - several vulnerabilities <br>
|
169
|
+
<tt>[26 septembre 2010]</tt> <strong><a href="security/2010/dsa-2114">DSA-2114 git-core</a></strong> - buffer overflow <br>
|
170
|
+
<tt>[20 septembre 2010]</tt> <strong><a href="security/2010/dsa-2113">DSA-2113 drupal6</a></strong> - several vulnerabilities <br>
|
171
|
+
<tt>[20 septembre 2010]</tt> <strong><a href="security/2010/dsa-2112">DSA-2112 bzip2</a></strong> - integer overflow <br>
|
172
|
+
</p>
|
173
|
+
<p>Pour les annonces de sécurité, consultez la <a href="./security/">
|
174
|
+
page sécurité</a>.
|
175
|
+
Si vous voulez recevoir les annonces de sécurité (en anglais) dès leur parution, abonnez-vous
|
176
|
+
à la <a href="http://lists.debian.org/debian-security-announce/">liste de diffusion debian-security-announce</a>.</p>
|
177
|
+
</div> <!-- end maincol -->
|
178
|
+
<div class="clr"></div>
|
179
|
+
</div> <!-- end inner -->
|
180
|
+
<div id="footer">
|
181
|
+
<hr class="hidecss">
|
182
|
+
<!--UdmComment-->
|
183
|
+
<p>
|
184
|
+
Cette page est aussi disponible dans les langues suivantes :
|
185
|
+
</p><p class="navpara">
|
186
|
+
<a href="index.ar.html" title="arabe" hreflang="ar" lang="ar" rel="alternate">عربية (Arabiya)</a>
|
187
|
+
<a href="index.bg.html" title="bulgare" hreflang="bg" lang="bg" rel="alternate">Български (Bəlgarski)</a>
|
188
|
+
<a href="index.ca.html" title="catalan" hreflang="ca" lang="ca" rel="alternate">català</a>
|
189
|
+
<a href="index.cs.html" title="tchèque" hreflang="cs" lang="cs" rel="alternate">česky</a>
|
190
|
+
<a href="index.da.html" title="danois" hreflang="da" lang="da" rel="alternate">dansk</a>
|
191
|
+
<a href="index.de.html" title="allemand" hreflang="de" lang="de" rel="alternate">Deutsch</a>
|
192
|
+
<a href="index.el.html" title="grec" hreflang="el" lang="el" rel="alternate">Ελληνικά (Ellinika)</a>
|
193
|
+
<a href="index.en.html" title="anglais" hreflang="en" lang="en" rel="alternate">English</a>
|
194
|
+
<a href="index.es.html" title="espagnol" hreflang="es" lang="es" rel="alternate">español</a>
|
195
|
+
<a href="index.eo.html" title="espéranto" hreflang="eo" lang="eo" rel="alternate">Esperanto</a>
|
196
|
+
<a href="index.ko.html" title="coréen" hreflang="ko" lang="ko" rel="alternate">한국어 (Hangul)</a>
|
197
|
+
<a href="index.hy.html" title="arménien" hreflang="hy" lang="hy" rel="alternate">Հայերեն (hayeren)</a>
|
198
|
+
<a href="index.hr.html" title="croate" hreflang="hr" lang="hr" rel="alternate">hrvatski</a>
|
199
|
+
<a href="index.it.html" title="italien" hreflang="it" lang="it" rel="alternate">Italiano</a>
|
200
|
+
<a href="index.he.html" title="hébreu" hreflang="he" lang="he" rel="alternate">עברית (ivrit)</a>
|
201
|
+
<a href="index.lt.html" title="lituanien" hreflang="lt" lang="lt" rel="alternate">Lietuvių</a>
|
202
|
+
<a href="index.hu.html" title="hongrois" hreflang="hu" lang="hu" rel="alternate">magyar</a>
|
203
|
+
<a href="index.nl.html" title="néerlandais" hreflang="nl" lang="nl" rel="alternate">Nederlands</a>
|
204
|
+
<a href="index.ja.html" title="japonais" hreflang="ja" lang="ja" rel="alternate">日本語 (Nihongo)</a>
|
205
|
+
<a href="index.nb.html" title="norvégien" hreflang="nb" lang="nb" rel="alternate">norsk (bokmål)</a>
|
206
|
+
<a href="index.pl.html" title="polonais" hreflang="pl" lang="pl" rel="alternate">polski</a>
|
207
|
+
<a href="index.pt.html" title="portugais" hreflang="pt" lang="pt" rel="alternate">Português</a>
|
208
|
+
<a href="index.ro.html" title="roumain" hreflang="ro" lang="ro" rel="alternate">română</a>
|
209
|
+
<a href="index.ru.html" title="russe" hreflang="ru" lang="ru" rel="alternate">Русский (Russkij)</a>
|
210
|
+
<a href="index.sk.html" title="slovaque" hreflang="sk" lang="sk" rel="alternate">slovensky</a>
|
211
|
+
<a href="index.fi.html" title="finnois" hreflang="fi" lang="fi" rel="alternate">suomi</a>
|
212
|
+
<a href="index.sv.html" title="suédois" hreflang="sv" lang="sv" rel="alternate">svenska</a>
|
213
|
+
<a href="index.ta.html" title="tamoul" hreflang="ta" lang="ta" rel="alternate">தமிழ் (Tamil)</a>
|
214
|
+
<a href="index.tr.html" title="turc" hreflang="tr" lang="tr" rel="alternate">Türkçe</a>
|
215
|
+
<a href="index.uk.html" title="ukrainien" hreflang="uk" lang="uk" rel="alternate">українська (ukrajins'ka)</a>
|
216
|
+
<a href="index.zh-cn.html" title="chinois (Chine)" hreflang="zh-CN" lang="zh-CN" rel="alternate">中文(简)</a>
|
217
|
+
<a href="index.zh-hk.html" title="chinois (Hong Kong)" hreflang="zh-HK" lang="zh-HK" rel="alternate">中文(HK)</a>
|
218
|
+
<a href="index.zh-tw.html" title="chinois (Taïwan)" hreflang="zh-TW" lang="zh-TW" rel="alternate">中文(繁)</a>
|
219
|
+
</p><p>
|
220
|
+
Comment configurer la <a href="./intro/cn">langue par défaut du document</a>
|
221
|
+
</p>
|
222
|
+
<!--/UdmComment-->
|
223
|
+
<hr>
|
224
|
+
<!--UdmComment-->
|
225
|
+
<div id="fineprint">
|
226
|
+
<p>Pour signaler un problème sur le site web, envoyez un courriel en anglais à <a href="mailto:debian-www@lists.debian.org">debian-www@lists.debian.org</a> ou en français à <a href="mailto:debian-l10n-french@lists.debian.org">debian-l10n-french@lists.debian.org</a>. Pour obtenir d'autres informations, référez-vous à la <a href="./contact">page contact</a> de Debian.</p>
|
227
|
+
<p>
|
228
|
+
Dernière modification : vendredi 22 octobre 2010 23:28:09 UTC
|
229
|
+
<br>
|
230
|
+
Copyright © 1997-2010
|
231
|
+
<a href="http://www.spi-inc.org/">SPI</a>; voir <a href="./license" rel="copyright">les termes de la licence</a>.<br>
|
232
|
+
Debian est une <a href="./trademark">marque déposée</a> de Software in the Public Interest, Inc.
|
233
|
+
</p>
|
234
|
+
</div>
|
235
|
+
<!--/UdmComment-->
|
236
|
+
</div> <!-- end footer -->
|
237
|
+
</div> <!-- end outer -->
|
238
|
+
</body>
|
239
|
+
</html>
|
data/spec/data/html5.html
CHANGED
@@ -4,6 +4,7 @@ describe ValidateWebsite do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
FakeWeb.clean_registry
|
7
|
+
@validate_website = ValidateWebsite.new
|
7
8
|
end
|
8
9
|
|
9
10
|
context('html') do
|
@@ -13,9 +14,8 @@ describe ValidateWebsite do
|
|
13
14
|
page = FakePage.new(name,
|
14
15
|
:body => open(file).read,
|
15
16
|
:content_type => 'text/html')
|
16
|
-
validate_website
|
17
|
-
validate_website.
|
18
|
-
validate_website.anemone.should have(3).pages
|
17
|
+
@validate_website.crawl(page.url)
|
18
|
+
@validate_website.anemone.should have(3).pages
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -27,27 +27,24 @@ describe ValidateWebsite do
|
|
27
27
|
.tests {background-image: url(/image/pouet_42.png)}
|
28
28
|
.tests {background-image: url(/image/pouet)}",
|
29
29
|
:content_type => 'text/css')
|
30
|
-
validate_website
|
31
|
-
validate_website.
|
32
|
-
validate_website.anemone.should have(5).pages
|
30
|
+
@validate_website.crawl(page.url)
|
31
|
+
@validate_website.anemone.should have(5).pages
|
33
32
|
end
|
34
33
|
|
35
34
|
it "should extract url with single quote" do
|
36
35
|
page = FakePage.new('test.css',
|
37
36
|
:body => ".test {background-image: url('pouet');}",
|
38
37
|
:content_type => 'text/css')
|
39
|
-
validate_website
|
40
|
-
validate_website.
|
41
|
-
validate_website.anemone.should have(2).pages
|
38
|
+
@validate_website.crawl(page.url)
|
39
|
+
@validate_website.anemone.should have(2).pages
|
42
40
|
end
|
43
41
|
|
44
42
|
it "should extract url with double quote" do
|
45
43
|
page = FakePage.new('test.css',
|
46
44
|
:body => ".test {background-image: url(\"pouet\");}",
|
47
45
|
:content_type => 'text/css')
|
48
|
-
validate_website
|
49
|
-
validate_website.
|
50
|
-
validate_website.anemone.should have(2).pages
|
46
|
+
@validate_website.crawl(page.url)
|
47
|
+
@validate_website.anemone.should have(2).pages
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
data/spec/validator_spec.rb
CHANGED
@@ -21,7 +21,6 @@ describe Validator do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "html5 should be valid" do
|
24
|
-
pending("need to work on html5")
|
25
24
|
name = 'html5'
|
26
25
|
file = File.join('spec', 'data', "#{name}.html")
|
27
26
|
page = FakePage.new(name,
|
@@ -31,4 +30,15 @@ describe Validator do
|
|
31
30
|
validator = Validator.new(@html5_page)
|
32
31
|
validator.should be_valid
|
33
32
|
end
|
33
|
+
|
34
|
+
it 'should validate html4' do
|
35
|
+
name = 'html4-strict'
|
36
|
+
file = File.join('spec', 'data', "#{name}.html")
|
37
|
+
page = FakePage.new(name,
|
38
|
+
:body => open(file).read,
|
39
|
+
:content_type => 'text/html')
|
40
|
+
@html4_strict_page = @http.fetch_page(page.url)
|
41
|
+
validator = Validator.new(@html4_strict_page)
|
42
|
+
validator.should be_valid
|
43
|
+
end
|
34
44
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validate-website
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Laurent Arnoud
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-01 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -50,25 +50,41 @@ dependencies:
|
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
-
name:
|
53
|
+
name: html5
|
54
54
|
prerelease: false
|
55
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - "="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 55
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
- 10
|
64
|
+
- 0
|
65
|
+
version: 0.10.0
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rspec
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
56
72
|
none: false
|
57
73
|
requirements:
|
58
74
|
- - ">="
|
59
75
|
- !ruby/object:Gem::Version
|
60
|
-
hash:
|
76
|
+
hash: 15
|
61
77
|
segments:
|
62
|
-
-
|
63
|
-
- 3
|
78
|
+
- 2
|
64
79
|
- 0
|
65
|
-
|
80
|
+
- 0
|
81
|
+
version: 2.0.0
|
66
82
|
type: :development
|
67
|
-
version_requirements: *
|
83
|
+
version_requirements: *id004
|
68
84
|
- !ruby/object:Gem::Dependency
|
69
85
|
name: fakeweb
|
70
86
|
prerelease: false
|
71
|
-
requirement: &
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
72
88
|
none: false
|
73
89
|
requirements:
|
74
90
|
- - ">="
|
@@ -80,8 +96,8 @@ dependencies:
|
|
80
96
|
- 0
|
81
97
|
version: 1.3.0
|
82
98
|
type: :development
|
83
|
-
version_requirements: *
|
84
|
-
description:
|
99
|
+
version_requirements: *id005
|
100
|
+
description: validate-website is a web crawler for checking the markupvalidity and not found urls.
|
85
101
|
email: laurent@spkdev.net
|
86
102
|
executables:
|
87
103
|
- validate-website
|
@@ -92,6 +108,8 @@ extra_rdoc_files: []
|
|
92
108
|
files:
|
93
109
|
- README.rdoc
|
94
110
|
- Rakefile
|
111
|
+
- LICENSE
|
112
|
+
- bin/validate-website
|
95
113
|
- lib/validator.rb
|
96
114
|
- lib/colorful_messages.rb
|
97
115
|
- lib/xhtml/xhtml-blkphras-1.xsd
|
@@ -185,9 +203,10 @@ files:
|
|
185
203
|
- lib/xhtml/xhtml-attribs-1.xsd
|
186
204
|
- lib/xhtml/xhtml-ruby-1.xsd
|
187
205
|
- lib/validate_website.rb
|
188
|
-
-
|
206
|
+
- man/man1/validate-website.1
|
189
207
|
- spec/validator_spec.rb
|
190
208
|
- spec/spec_helper.rb
|
209
|
+
- spec/data/html4-strict.html
|
191
210
|
- spec/data/html5.html
|
192
211
|
- spec/data/xhtml1-strict.html
|
193
212
|
- spec/fakeweb_helper.rb
|
@@ -222,6 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
241
|
requirements:
|
223
242
|
- spk-anemone
|
224
243
|
- rainbow
|
244
|
+
- html5
|
225
245
|
rubyforge_project:
|
226
246
|
rubygems_version: 1.3.7
|
227
247
|
signing_key:
|