w3c_rspec_validators 0.0.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/.gitignore +5 -0
- data/Gemfile +7 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/lib/w3c_rspec_validators/rspec.rb +26 -0
- data/lib/w3c_rspec_validators/version.rb +3 -0
- data/lib/w3c_rspec_validators.rb +20 -0
- data/spec/matchers_spec.rb +65 -0
- data/w3c_rspec_validators.gemspec +24 -0
- metadata +67 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# W3C rspec validations
|
2
|
+
|
3
|
+
This gem adds rspec matchers that allow you to check if the html code produced by your rails app is valid.
|
4
|
+
|
5
|
+
## Install
|
6
|
+
|
7
|
+
You need rspec for this gem to work. In addition add this to your gemfile:
|
8
|
+
|
9
|
+
gem "w3c_rspec_validators"
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Here is an example for using it in an acceptance test:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
scenario "visit landing page" do
|
17
|
+
visit "/"
|
18
|
+
page.body.should be_valid_html
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
22
|
+
If you use capybara with a headless driver or something similiar be
|
23
|
+
sure to check the original source code to be valid and not the source code that has
|
24
|
+
been parsed and eventually corrected by the browser:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
scenario "visit landing page" do
|
28
|
+
visit "/"
|
29
|
+
page.driver.source.should be_valid_html
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
If you want to check html code, that has been modified by javascript, use "page.body.should be_valid_html".
|
34
|
+
Note that a browser may correct wrongly nested tags on its own.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module W3cRspecValidators
|
2
|
+
|
3
|
+
RSpec::Matchers.define :be_valid_html do
|
4
|
+
response = nil
|
5
|
+
match do |body|
|
6
|
+
validator = MarkupValidator.new :validator_uri => HTML5Validator.validator_uri
|
7
|
+
response = validator.validate_text(body)
|
8
|
+
response.errors.length == 0
|
9
|
+
end
|
10
|
+
failure_message_for_should do |actual|
|
11
|
+
response.errors.map do |err|
|
12
|
+
seperator = "######\n"
|
13
|
+
error = /line \d.*/.match err.to_s
|
14
|
+
line_number = /line (\d*)/.match(err.to_s)[1].to_i
|
15
|
+
|
16
|
+
sbody = actual.split("\n")
|
17
|
+
context = sbody[[line_number-3,0].max...line_number-1].join("\n")
|
18
|
+
context += "\n>>" + sbody[line_number-1] + "\n"
|
19
|
+
context += sbody[line_number..line_number+2].join("\n")
|
20
|
+
|
21
|
+
seperator + error.to_s + "\n\n" + context + "\n"
|
22
|
+
end.join("\n")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "w3c_rspec_validators/version"
|
2
|
+
require "w3c_validators"
|
3
|
+
|
4
|
+
module W3cRspecValidators
|
5
|
+
include W3CValidators
|
6
|
+
|
7
|
+
class HTML5Validator
|
8
|
+
def self.validator_uri
|
9
|
+
@@validator_uri
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.validator_uri= value
|
13
|
+
@@validator_uri = value
|
14
|
+
end
|
15
|
+
|
16
|
+
self.validator_uri = "http://validator.w3.org/check"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require "w3c_rspec_validators/rspec"
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "w3c_rspec_validators"
|
2
|
+
include W3CValidators
|
3
|
+
|
4
|
+
module RSpec
|
5
|
+
module Matchers
|
6
|
+
def fail
|
7
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError)
|
8
|
+
end
|
9
|
+
|
10
|
+
def fail_with(message)
|
11
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError, message)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fail_matching(regex)
|
15
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError, regex)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
describe "be_valid_html" do
|
23
|
+
it "should be valid" do
|
24
|
+
"<!DOCTYPE HTML SYSTEM>
|
25
|
+
<html>
|
26
|
+
<head>
|
27
|
+
<title>dd</title>
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
</body>
|
31
|
+
</html>".should be_valid_html
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not be valid" do
|
35
|
+
"<!DOCTYPE HTML SYSTEM>
|
36
|
+
<html>
|
37
|
+
<head>
|
38
|
+
<titled>dd</title>
|
39
|
+
</head>
|
40
|
+
<body></body>
|
41
|
+
</html>".should_not be_valid_html
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should complain about an missing src attribute" do
|
45
|
+
lambda {
|
46
|
+
"<!DOCTYPE HTML SYSTEM>
|
47
|
+
<html>
|
48
|
+
<head>
|
49
|
+
<title>dd</title>
|
50
|
+
</head>
|
51
|
+
<body>
|
52
|
+
<img />
|
53
|
+
</body>
|
54
|
+
</html>".should be_valid_html
|
55
|
+
}.should fail_matching(/line 7: required attribute "SRC" not specified.*<img \/>/m)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should use a custom uri if provided" do
|
59
|
+
W3cRspecValidators::HTML5Validator.validator_uri = "http://blubb.de"
|
60
|
+
validator = MarkupValidator.new
|
61
|
+
MarkupValidator.should_receive(:new).with(:validator_uri => "http://blubb.de").and_return validator
|
62
|
+
|
63
|
+
"dummy".should_not be_valid_html
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "w3c_rspec_validators/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "w3c_rspec_validators"
|
7
|
+
s.version = W3cRspecValidators::VERSION
|
8
|
+
s.authors = ["Dominik Goltermann"]
|
9
|
+
s.email = ["dominik@goltermann.cc"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{This gem adds w3c validation in form of rspec matchers}
|
12
|
+
s.description = %q{At this time it allows for validation of html (including html5) produced by rspec acceptance tests. In addition you can configure the gem to use a locally installed validation service instead of the online w3c servers}
|
13
|
+
|
14
|
+
s.rubyforge_project = "w3c_rspec_validators"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "w3c_validators"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: w3c_rspec_validators
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dominik Goltermann
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: w3c_validators
|
16
|
+
requirement: &13322940 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *13322940
|
25
|
+
description: At this time it allows for validation of html (including html5) produced
|
26
|
+
by rspec acceptance tests. In addition you can configure the gem to use a locally
|
27
|
+
installed validation service instead of the online w3c servers
|
28
|
+
email:
|
29
|
+
- dominik@goltermann.cc
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- .gitignore
|
35
|
+
- Gemfile
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- lib/w3c_rspec_validators.rb
|
39
|
+
- lib/w3c_rspec_validators/rspec.rb
|
40
|
+
- lib/w3c_rspec_validators/version.rb
|
41
|
+
- spec/matchers_spec.rb
|
42
|
+
- w3c_rspec_validators.gemspec
|
43
|
+
homepage: ''
|
44
|
+
licenses: []
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
requirements: []
|
62
|
+
rubyforge_project: w3c_rspec_validators
|
63
|
+
rubygems_version: 1.8.10
|
64
|
+
signing_key:
|
65
|
+
specification_version: 3
|
66
|
+
summary: This gem adds w3c validation in form of rspec matchers
|
67
|
+
test_files: []
|