assert_valid_markup 0.6.0 → 0.6.1
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.
- data/VERSION +1 -1
- data/lib/assert_valid_markup.rb +22 -8
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.1
|
data/lib/assert_valid_markup.rb
CHANGED
@@ -4,7 +4,7 @@ require 'digest/md5'
|
|
4
4
|
require 'open-uri'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'tempfile'
|
7
|
-
require '
|
7
|
+
require 'json'
|
8
8
|
require 'cgi'
|
9
9
|
|
10
10
|
class Test::Unit::TestCase
|
@@ -30,6 +30,10 @@ class Test::Unit::TestCase
|
|
30
30
|
#
|
31
31
|
def assert_valid_markup(fragment=@response.body, options={})
|
32
32
|
opts = @@default_avm_options.merge(options)
|
33
|
+
|
34
|
+
# html5 validation is a special case
|
35
|
+
opts[:validation_service] = :w3c if fragment =~ /<!DOCTYPE html>/
|
36
|
+
|
33
37
|
result = ''
|
34
38
|
if opts[:validation_service] == :local
|
35
39
|
result = local_validate(fragment, opts[:dtd_validate], opts[:catalog_path])
|
@@ -59,12 +63,13 @@ class Test::Unit::TestCase
|
|
59
63
|
end
|
60
64
|
|
61
65
|
# Class-level method to to turn on validation for the response from any successful html request via "get"
|
62
|
-
def self.assert_all_valid_markup
|
66
|
+
def self.assert_all_valid_markup(options={})
|
67
|
+
opts = @@default_avm_options.merge(options)
|
63
68
|
self.class_eval do
|
64
69
|
# automatically check markup for all successfull GETs
|
65
|
-
|
70
|
+
define_method(:get_with_assert_valid_markup) do |*args|
|
66
71
|
get_without_assert_valid_markup(*args)
|
67
|
-
assert_valid_markup if ! @@skip_validation && @request.format.html? && @response.success?
|
72
|
+
assert_valid_markup(@response.body, opts) if ! @@skip_validation && @request.format.html? && @response.success?
|
68
73
|
end
|
69
74
|
alias_method_chain :get, :assert_valid_markup
|
70
75
|
end
|
@@ -142,7 +147,7 @@ class Test::Unit::TestCase
|
|
142
147
|
msg << l.gsub(/^[^:]*:/, "Invalid markup: line ")
|
143
148
|
if l =~ /^[^:]*:(\d+)/
|
144
149
|
line = $1.to_i
|
145
|
-
((line -
|
150
|
+
((line - 3)..(line + 3)).each do |ln|
|
146
151
|
msg << "\t#{ln}: #{xmldata.lines.to_a[ln-1]}"
|
147
152
|
end
|
148
153
|
end
|
@@ -159,13 +164,22 @@ class Test::Unit::TestCase
|
|
159
164
|
response = File.open filename {|f| Marshal.load(f) } unless ENV['NO_CACHE_VALIDATION'] rescue nil
|
160
165
|
end
|
161
166
|
if ! response
|
162
|
-
response = Net::HTTP.start('validator.w3.org').post2('/check', "fragment=#{CGI.escape(fragment)}&output=
|
167
|
+
response = Net::HTTP.start('validator.w3.org').post2('/check', "fragment=#{CGI.escape(fragment)}&output=json")
|
163
168
|
File.open filename, 'w+' do |f| Marshal.dump response, f end
|
164
169
|
end
|
165
170
|
markup_is_valid = response['x-w3c-validator-status']=='Valid'
|
166
171
|
if ! markup_is_valid
|
167
|
-
doc =
|
168
|
-
|
172
|
+
doc = JSON.parse(response.body)
|
173
|
+
msgs = []
|
174
|
+
doc['messages'].each do |m|
|
175
|
+
line = m['lastLine']
|
176
|
+
msg = "Invalid markup: line #{line}: #{CGI.unescapeHTML(m['message'])}\n"
|
177
|
+
((line - 3)..(line + 3)).each do |ln|
|
178
|
+
msg << "\t#{ln}: #{fragment.lines.to_a[ln-1]}"
|
179
|
+
end
|
180
|
+
msgs << msg
|
181
|
+
end
|
182
|
+
validation_result = msgs.join("\n")
|
169
183
|
end
|
170
184
|
rescue SocketError
|
171
185
|
# if we can't reach the validator service, just let the test pass
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 1
|
9
|
+
version: 0.6.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matt Conway
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
type: :development
|
55
55
|
version_requirements: *id003
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: json
|
58
58
|
prerelease: false
|
59
59
|
requirement: &id004 !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|