camelpunch-markup_validity 1.1.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/.autotest +23 -0
- data/CHANGELOG.rdoc +22 -0
- data/Manifest.txt +105 -0
- data/README.rdoc +101 -0
- data/Rakefile +15 -0
- data/lib/markup_validity.rb +12 -0
- data/lib/markup_validity/MarkUp.html +1095 -0
- data/lib/markup_validity/SCHEMA.html +90 -0
- data/lib/markup_validity/assertions.rb +32 -0
- data/lib/markup_validity/examples.html +25 -0
- data/lib/markup_validity/rspec.rb +77 -0
- data/lib/markup_validity/templates.html +15 -0
- data/lib/markup_validity/validator.rb +65 -0
- data/lib/markup_validity/xframes-1.xsd +166 -0
- data/lib/markup_validity/xhtml-access-1.xsd +43 -0
- data/lib/markup_validity/xhtml-applet-1.xsd +66 -0
- data/lib/markup_validity/xhtml-attribs-1.xsd +67 -0
- data/lib/markup_validity/xhtml-base-1.xsd +31 -0
- data/lib/markup_validity/xhtml-basic-form-1.xsd +195 -0
- data/lib/markup_validity/xhtml-basic-table-1.xsd +169 -0
- data/lib/markup_validity/xhtml-basic10-model-1.xsd +385 -0
- data/lib/markup_validity/xhtml-basic10-module-redefines-1.xsd +61 -0
- data/lib/markup_validity/xhtml-basic10-modules-1.xsd +233 -0
- data/lib/markup_validity/xhtml-basic10.xsd +99 -0
- data/lib/markup_validity/xhtml-basic11-model-1.xsd +622 -0
- data/lib/markup_validity/xhtml-basic11-modules-1.xsd +508 -0
- data/lib/markup_validity/xhtml-basic11.xsd +105 -0
- data/lib/markup_validity/xhtml-bdo-1.xsd +72 -0
- data/lib/markup_validity/xhtml-blkphras-1.xsd +155 -0
- data/lib/markup_validity/xhtml-blkpres-1.xsd +32 -0
- data/lib/markup_validity/xhtml-blkstruct-1.xsd +44 -0
- data/lib/markup_validity/xhtml-charent-1.xsd +38 -0
- data/lib/markup_validity/xhtml-copyright-1.xsd +29 -0
- data/lib/markup_validity/xhtml-csismap-1.xsd +91 -0
- data/lib/markup_validity/xhtml-datatypes-1.xsd +177 -0
- data/lib/markup_validity/xhtml-edit-1.xsd +34 -0
- data/lib/markup_validity/xhtml-events-1.xsd +130 -0
- data/lib/markup_validity/xhtml-form-1.xsd +321 -0
- data/lib/markup_validity/xhtml-frames-1.xsd +113 -0
- data/lib/markup_validity/xhtml-framework-1.xsd +62 -0
- data/lib/markup_validity/xhtml-hypertext-1.xsd +47 -0
- data/lib/markup_validity/xhtml-iframe-1.xsd +68 -0
- data/lib/markup_validity/xhtml-image-1.xsd +40 -0
- data/lib/markup_validity/xhtml-inlphras-1.xsd +158 -0
- data/lib/markup_validity/xhtml-inlpres-1.xsd +34 -0
- data/lib/markup_validity/xhtml-inlstruct-1.xsd +45 -0
- data/lib/markup_validity/xhtml-inlstyle-1.xsd +22 -0
- data/lib/markup_validity/xhtml-inputmode-1.xsd +35 -0
- data/lib/markup_validity/xhtml-lat1.ent +196 -0
- data/lib/markup_validity/xhtml-legacy-1.xsd +97 -0
- data/lib/markup_validity/xhtml-link-1.xsd +45 -0
- data/lib/markup_validity/xhtml-list-1.xsd +94 -0
- data/lib/markup_validity/xhtml-meta-1.xsd +54 -0
- data/lib/markup_validity/xhtml-metaAttributes-1.xsd +39 -0
- data/lib/markup_validity/xhtml-misc-1.xsd +441 -0
- data/lib/markup_validity/xhtml-nameident-1.xsd +63 -0
- data/lib/markup_validity/xhtml-notations-1.xsd +69 -0
- data/lib/markup_validity/xhtml-object-1.xsd +71 -0
- data/lib/markup_validity/xhtml-param-1.xsd +46 -0
- data/lib/markup_validity/xhtml-pres-1.xsd +46 -0
- data/lib/markup_validity/xhtml-print-1.xsd +85 -0
- data/lib/markup_validity/xhtml-print-model-1.xsd +604 -0
- data/lib/markup_validity/xhtml-print-modules-1.xsd +422 -0
- data/lib/markup_validity/xhtml-rdfa-1.dtd +438 -0
- data/lib/markup_validity/xhtml-rdfa-1.xsd +116 -0
- data/lib/markup_validity/xhtml-rdfa-model-1.xsd +461 -0
- data/lib/markup_validity/xhtml-rdfa-modules-1.xsd +548 -0
- data/lib/markup_validity/xhtml-ruby-1.xsd +170 -0
- data/lib/markup_validity/xhtml-ruby-basic-1.xsd +84 -0
- data/lib/markup_validity/xhtml-script-1.xsd +65 -0
- data/lib/markup_validity/xhtml-special.ent +80 -0
- data/lib/markup_validity/xhtml-ssismap-1.xsd +38 -0
- data/lib/markup_validity/xhtml-struct-1.xsd +85 -0
- data/lib/markup_validity/xhtml-style-1.xsd +47 -0
- data/lib/markup_validity/xhtml-symbol.ent +237 -0
- data/lib/markup_validity/xhtml-table-1.xsd +267 -0
- data/lib/markup_validity/xhtml-target-1.xsd +49 -0
- data/lib/markup_validity/xhtml-text-1.xsd +62 -0
- data/lib/markup_validity/xhtml1-strict.dtd +978 -0
- data/lib/markup_validity/xhtml1-strict.xsd +2211 -0
- data/lib/markup_validity/xhtml1-transitional.dtd +1201 -0
- data/lib/markup_validity/xhtml1-transitional.xsd +2755 -0
- data/lib/markup_validity/xhtml11-model-1.xsd +715 -0
- data/lib/markup_validity/xhtml11-module-redefines-1.xsd +335 -0
- data/lib/markup_validity/xhtml11-modules-1.xsd +605 -0
- data/lib/markup_validity/xhtml11.xsd +107 -0
- data/lib/markup_validity/xhtml2.xsd +21 -0
- data/lib/markup_validity/xml-events-1.xsd +73 -0
- data/lib/markup_validity/xml-events-2.xsd +73 -0
- data/lib/markup_validity/xml-events-attribs-1.xsd +73 -0
- data/lib/markup_validity/xml-events-attribs-2.xsd +75 -0
- data/lib/markup_validity/xml-events-copyright-1.xsd +34 -0
- data/lib/markup_validity/xml-events-copyright-2.xsd +34 -0
- data/lib/markup_validity/xml-handlers-1.xsd +136 -0
- data/lib/markup_validity/xml-handlers-2.xsd +98 -0
- data/lib/markup_validity/xml-script-1.xsd +38 -0
- data/lib/markup_validity/xml.xsd +286 -0
- data/spec/matcher_spec.rb +55 -0
- data/test/assets/invalid_entity.xhtml +109 -0
- data/test/assets/invalid_entity_transitional.xhtml +109 -0
- data/test/assets/order.xml +24 -0
- data/test/assets/shipment.xsd +33 -0
- data/test/helper.rb +96 -0
- data/test/test_markup_validity.rb +105 -0
- metadata +198 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'markup_validity'
|
3
|
+
require 'test/helper'
|
4
|
+
|
5
|
+
module Spec
|
6
|
+
module Matchers
|
7
|
+
extend MarkupValidity::TestHelper
|
8
|
+
describe "[actual.should] be_xhtml_transitional" do
|
9
|
+
it "is transitional xhtml" do
|
10
|
+
Matchers.valid_document.should be_xhtml_transitional
|
11
|
+
end
|
12
|
+
|
13
|
+
it "is xhtml" do
|
14
|
+
Matchers.valid_document.should be_xhtml
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is strict xhtml" do
|
18
|
+
Matchers.valid_document.should be_xhtml_strict
|
19
|
+
end
|
20
|
+
|
21
|
+
it "is not transitional xhtml" do
|
22
|
+
Matchers.invalid_document.should_not be_xhtml_transitional
|
23
|
+
end
|
24
|
+
|
25
|
+
it "is not strict xhtml" do
|
26
|
+
Matchers.invalid_document.should_not be_xhtml_strict
|
27
|
+
end
|
28
|
+
|
29
|
+
it "is xhtml+rdfa" do
|
30
|
+
Matchers.valid_document.should be_xhtml_rdfa
|
31
|
+
end
|
32
|
+
|
33
|
+
it "is no xhtml+rdfa" do
|
34
|
+
Matchers.invalid_document.should_not be_xhtml_rdfa
|
35
|
+
end
|
36
|
+
|
37
|
+
XSD = File.read(
|
38
|
+
File.expand_path(
|
39
|
+
File.join(File.dirname(__FILE__),'..','test','assets','shipment.xsd')
|
40
|
+
)
|
41
|
+
)
|
42
|
+
XML = File.read(
|
43
|
+
File.join(File.dirname(__FILE__), '..','test', 'assets', 'order.xml')
|
44
|
+
)
|
45
|
+
|
46
|
+
it "is valid given spec" do
|
47
|
+
XML.should be_valid_with_schema XSD
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is not valid given spec" do
|
51
|
+
XML.gsub(/<name>[^<]*<\/name>/, '').should_not be_valid_with_schema XSD
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
6
|
+
<title>Welcome. It's crantastic!</title>
|
7
|
+
|
8
|
+
<link href="/stylesheets/application.css?1245016196" media="screen, projection" rel="stylesheet" type="text/css" />
|
9
|
+
<link href="/stylesheets/jquery.rating.css?1245016196" media="screen, projection" rel="stylesheet" type="text/css" />
|
10
|
+
<link href="/stylesheets/print.css?1245016196" media="print" rel="stylesheet" type="text/css" />
|
11
|
+
<!--[if IE]>
|
12
|
+
<link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
|
13
|
+
<![endif]-->
|
14
|
+
|
15
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> <script src="/javascripts/jquery.livequery.js?1245016196" type="text/javascript"></script>
|
16
|
+
<script src="/javascripts/jquery.MetaData.js?1245016196" type="text/javascript"></script>
|
17
|
+
<script src="/javascripts/jquery.delayedObserver.js?1245016196" type="text/javascript"></script>
|
18
|
+
<script src="/javascripts/jquery.rating.pack.js?1245016196" type="text/javascript"></script>
|
19
|
+
<script src="/javascripts/jquery.validate.pack.js?1245016196" type="text/javascript"></script>
|
20
|
+
<script src="/javascripts/application.js?1245016196" type="text/javascript"></script> <script type="text/javascript">
|
21
|
+
//<![CDATA[
|
22
|
+
window.AUTH_TOKEN = '0VzQJqzXsuP5dw0Etja9QAsM58pR/e2PAdNJHSpuvJ8=';
|
23
|
+
//]]>
|
24
|
+
|
25
|
+
</script>
|
26
|
+
|
27
|
+
|
28
|
+
<meta name="verify-v1" content="YtXicWGGldm5yUfU718DJMAreQ9gf2gtsSCe5VysH10=" />
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
|
32
|
+
<div id="container">
|
33
|
+
<div id="main">
|
34
|
+
|
35
|
+
<p>
|
36
|
+
Welcome to crantastic, a community site for R packages where you
|
37
|
+
can search for, review and tag CRAN packages.
|
38
|
+
</p>
|
39
|
+
<!-- <h2>What's happening?</h2>
|
40
|
+
<p>List of events (ratings?, versions, tags, users?)</p> -->
|
41
|
+
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div id="sidebar">
|
45
|
+
<h1 class="title"><a href="/">crantastic!</a></h1>
|
46
|
+
|
47
|
+
<div class="box">
|
48
|
+
<ul>
|
49
|
+
<li><a href="/packages">Packages</a></li>
|
50
|
+
<li><a href="/authors">Authors</a></li>
|
51
|
+
|
52
|
+
<li><a href="/reviews">Reviews</a></li>
|
53
|
+
<li><a href="/tags">Tags</a></li>
|
54
|
+
</ul>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div id="search-box" class="box">
|
58
|
+
<form action="/search" method="get"> <p style="margin: 0;"><input id="q" name="q" type="text" />
|
59
|
+
|
60
|
+
<input name="commit" type="submit" value="Search" /></p>
|
61
|
+
</form> </div>
|
62
|
+
|
63
|
+
<div class="box">
|
64
|
+
<form action="/session/new" method="get"> <p style="margin: 0;">
|
65
|
+
<input name="commit" type="submit" value="Log in" /> or <a href="/signup">Sign up!</a>
|
66
|
+
</p>
|
67
|
+
|
68
|
+
</form> </div>
|
69
|
+
</div>
|
70
|
+
|
71
|
+
<div id="footer">
|
72
|
+
<p>Brought to you by <a href="http://had.co.nz">Hadley Wickham</a>
|
73
|
+
and <a href="http://chrononaut.net/">Bjørn Mæland</a>.
|
74
|
+
Like it? Hate it? Let me know at
|
75
|
+
<a href="mailto:cranatic@gmail.com">cranatic@gmail.com</a>.
|
76
|
+
<a href="http://crantastic.org/about">About crantastic</a>.</p>
|
77
|
+
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<script type="text/javascript">
|
82
|
+
var uservoiceJsHost = ("https:" == document.location.protocol) ? "https://uservoice.com" : "http://cdn.uservoice.com";
|
83
|
+
document.write(unescape("%3Cscript src='" + uservoiceJsHost + "/javascripts/widgets/tab.js' type='text/javascript'%3E%3C/script%3E"))
|
84
|
+
</script>
|
85
|
+
<script type="text/javascript">
|
86
|
+
UserVoice.Tab.show({
|
87
|
+
key: 'crantastic',
|
88
|
+
host: 'crantastic.uservoice.com',
|
89
|
+
forum: 'general',
|
90
|
+
alignment: 'left', /* 'left', 'right' */
|
91
|
+
background_color:'#f00',
|
92
|
+
text_color: 'white', /* 'white', 'black' */
|
93
|
+
hover_color: '#06C',
|
94
|
+
lang: 'en' /* 'en', 'de', 'nl', 'es', 'fr' */
|
95
|
+
})
|
96
|
+
</script>
|
97
|
+
|
98
|
+
<script type="text/javascript">
|
99
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
100
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
101
|
+
</script>
|
102
|
+
<script type="text/javascript">
|
103
|
+
var pageTracker = _gat._getTracker("UA-67989-10");
|
104
|
+
pageTracker._initData();
|
105
|
+
pageTracker._trackPageview();
|
106
|
+
</script>
|
107
|
+
|
108
|
+
</body>
|
109
|
+
</html>
|
@@ -0,0 +1,109 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
6
|
+
<title>Welcome. It's crantastic!</title>
|
7
|
+
|
8
|
+
<link href="/stylesheets/application.css?1245016196" media="screen, projection" rel="stylesheet" type="text/css" />
|
9
|
+
<link href="/stylesheets/jquery.rating.css?1245016196" media="screen, projection" rel="stylesheet" type="text/css" />
|
10
|
+
<link href="/stylesheets/print.css?1245016196" media="print" rel="stylesheet" type="text/css" />
|
11
|
+
<!--[if IE]>
|
12
|
+
<link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
|
13
|
+
<![endif]-->
|
14
|
+
|
15
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> <script src="/javascripts/jquery.livequery.js?1245016196" type="text/javascript"></script>
|
16
|
+
<script src="/javascripts/jquery.MetaData.js?1245016196" type="text/javascript"></script>
|
17
|
+
<script src="/javascripts/jquery.delayedObserver.js?1245016196" type="text/javascript"></script>
|
18
|
+
<script src="/javascripts/jquery.rating.pack.js?1245016196" type="text/javascript"></script>
|
19
|
+
<script src="/javascripts/jquery.validate.pack.js?1245016196" type="text/javascript"></script>
|
20
|
+
<script src="/javascripts/application.js?1245016196" type="text/javascript"></script> <script type="text/javascript">
|
21
|
+
//<![CDATA[
|
22
|
+
window.AUTH_TOKEN = '0VzQJqzXsuP5dw0Etja9QAsM58pR/e2PAdNJHSpuvJ8=';
|
23
|
+
//]]>
|
24
|
+
|
25
|
+
</script>
|
26
|
+
|
27
|
+
|
28
|
+
<meta name="verify-v1" content="YtXicWGGldm5yUfU718DJMAreQ9gf2gtsSCe5VysH10=" />
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
|
32
|
+
<div id="container">
|
33
|
+
<div id="main">
|
34
|
+
|
35
|
+
<p>
|
36
|
+
Welcome to crantastic, a community site for R packages where you
|
37
|
+
can search for, review and tag CRAN packages.
|
38
|
+
</p>
|
39
|
+
<!-- <h2>What's happening?</h2>
|
40
|
+
<p>List of events (ratings?, versions, tags, users?)</p> -->
|
41
|
+
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div id="sidebar">
|
45
|
+
<h1 class="title"><a href="/">crantastic!</a></h1>
|
46
|
+
|
47
|
+
<div class="box">
|
48
|
+
<ul>
|
49
|
+
<li><a href="/packages">Packages</a></li>
|
50
|
+
<li><a href="/authors">Authors</a></li>
|
51
|
+
|
52
|
+
<li><a href="/reviews">Reviews</a></li>
|
53
|
+
<li><a href="/tags">Tags</a></li>
|
54
|
+
</ul>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div id="search-box" class="box">
|
58
|
+
<form action="/search" method="get"> <p style="margin: 0;"><input id="q" name="q" type="text" />
|
59
|
+
|
60
|
+
<input name="commit" type="submit" value="Search" /></p>
|
61
|
+
</form> </div>
|
62
|
+
|
63
|
+
<div class="box">
|
64
|
+
<form action="/session/new" method="get"> <p style="margin: 0;">
|
65
|
+
<input name="commit" type="submit" value="Log in" /> or <a href="/signup">Sign up!</a>
|
66
|
+
</p>
|
67
|
+
|
68
|
+
</form> </div>
|
69
|
+
</div>
|
70
|
+
|
71
|
+
<div id="footer">
|
72
|
+
<p>Brought to you by <a href="http://had.co.nz">Hadley Wickham</a>
|
73
|
+
and <a href="http://chrononaut.net/">Bjørn Mæland</a>.
|
74
|
+
Like it? Hate it? Let me know at
|
75
|
+
<a href="mailto:cranatic@gmail.com">cranatic@gmail.com</a>.
|
76
|
+
<a href="http://crantastic.org/about">About crantastic</a>.</p>
|
77
|
+
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<script type="text/javascript">
|
82
|
+
var uservoiceJsHost = ("https:" == document.location.protocol) ? "https://uservoice.com" : "http://cdn.uservoice.com";
|
83
|
+
document.write(unescape("%3Cscript src='" + uservoiceJsHost + "/javascripts/widgets/tab.js' type='text/javascript'%3E%3C/script%3E"))
|
84
|
+
</script>
|
85
|
+
<script type="text/javascript">
|
86
|
+
UserVoice.Tab.show({
|
87
|
+
key: 'crantastic',
|
88
|
+
host: 'crantastic.uservoice.com',
|
89
|
+
forum: 'general',
|
90
|
+
alignment: 'left', /* 'left', 'right' */
|
91
|
+
background_color:'#f00',
|
92
|
+
text_color: 'white', /* 'white', 'black' */
|
93
|
+
hover_color: '#06C',
|
94
|
+
lang: 'en' /* 'en', 'de', 'nl', 'es', 'fr' */
|
95
|
+
})
|
96
|
+
</script>
|
97
|
+
|
98
|
+
<script type="text/javascript">
|
99
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
100
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
101
|
+
</script>
|
102
|
+
<script type="text/javascript">
|
103
|
+
var pageTracker = _gat._getTracker("UA-67989-10");
|
104
|
+
pageTracker._initData();
|
105
|
+
pageTracker._trackPageview();
|
106
|
+
</script>
|
107
|
+
|
108
|
+
</body>
|
109
|
+
</html>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-1"?>
|
2
|
+
|
3
|
+
<shiporder orderid="889923"
|
4
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
5
|
+
xsi:noNamespaceSchemaLocation="shiporder.xsd">
|
6
|
+
<orderperson>John Smith</orderperson>
|
7
|
+
<shipto>
|
8
|
+
<name>Ola Nordmann</name>
|
9
|
+
<address>Langgt 23</address>
|
10
|
+
<city>4000 Stavanger</city>
|
11
|
+
<country>Norway</country>
|
12
|
+
</shipto>
|
13
|
+
<item>
|
14
|
+
<title>Empire Burlesque</title>
|
15
|
+
<note>Special Edition</note>
|
16
|
+
<quantity>1</quantity>
|
17
|
+
<price>10.90</price>
|
18
|
+
</item>
|
19
|
+
<item>
|
20
|
+
<title>Hide your heart</title>
|
21
|
+
<quantity>1</quantity>
|
22
|
+
<price>9.90</price>
|
23
|
+
</item>
|
24
|
+
</shiporder>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
2
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
3
|
+
|
4
|
+
<xs:element name="shiporder">
|
5
|
+
<xs:complexType>
|
6
|
+
<xs:sequence>
|
7
|
+
<xs:element name="orderperson" type="xs:string"/>
|
8
|
+
<xs:element name="shipto">
|
9
|
+
<xs:complexType>
|
10
|
+
<xs:sequence>
|
11
|
+
<xs:element name="name" type="xs:string"/>
|
12
|
+
<xs:element name="address" type="xs:string"/>
|
13
|
+
<xs:element name="city" type="xs:string"/>
|
14
|
+
<xs:element name="country" type="xs:string"/>
|
15
|
+
</xs:sequence>
|
16
|
+
</xs:complexType>
|
17
|
+
</xs:element>
|
18
|
+
<xs:element name="item" maxOccurs="unbounded">
|
19
|
+
<xs:complexType>
|
20
|
+
<xs:sequence>
|
21
|
+
<xs:element name="title" type="xs:string"/>
|
22
|
+
<xs:element name="note" type="xs:string" minOccurs="0"/>
|
23
|
+
<xs:element name="quantity" type="xs:positiveInteger"/>
|
24
|
+
<xs:element name="price" type="xs:decimal"/>
|
25
|
+
</xs:sequence>
|
26
|
+
</xs:complexType>
|
27
|
+
</xs:element>
|
28
|
+
</xs:sequence>
|
29
|
+
<xs:attribute name="orderid" type="xs:string" use="required"/>
|
30
|
+
</xs:complexType>
|
31
|
+
</xs:element>
|
32
|
+
|
33
|
+
</xs:schema>
|
data/test/helper.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
module MarkupValidity
|
2
|
+
module TestHelper
|
3
|
+
def valid_document
|
4
|
+
<<-eoxhtml
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title>hello world</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
</body>
|
11
|
+
</html>
|
12
|
+
eoxhtml
|
13
|
+
end
|
14
|
+
|
15
|
+
def document_with_no_legend_in_fieldset
|
16
|
+
<<-eoxhtml
|
17
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
18
|
+
<head>
|
19
|
+
<title>hello world</title>
|
20
|
+
</head>
|
21
|
+
<body>
|
22
|
+
<fieldset>
|
23
|
+
<ol>
|
24
|
+
<li>Hello</li>
|
25
|
+
</ol>
|
26
|
+
</fieldset>
|
27
|
+
</body>
|
28
|
+
</html>
|
29
|
+
eoxhtml
|
30
|
+
end
|
31
|
+
|
32
|
+
def invalid_document
|
33
|
+
<<-eoxhtml
|
34
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
35
|
+
<head>
|
36
|
+
</head>
|
37
|
+
<body>
|
38
|
+
<p>
|
39
|
+
<p>
|
40
|
+
Hello
|
41
|
+
</p>
|
42
|
+
</p>
|
43
|
+
</body>
|
44
|
+
</html>
|
45
|
+
eoxhtml
|
46
|
+
end
|
47
|
+
|
48
|
+
# snippets taken from http://www.w3.org/TR/rdfa-syntax/
|
49
|
+
def valid_document_xhtml_rdfa
|
50
|
+
<<-eoxhtml
|
51
|
+
<html
|
52
|
+
xmlns="http://www.w3.org/1999/xhtml"
|
53
|
+
xmlns:foaf="http://xmlns.com/foaf/0.1/"
|
54
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
55
|
+
xmlns:cal="http://www.w3.org/2002/12/cal/ical#"
|
56
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
57
|
+
>
|
58
|
+
<head>
|
59
|
+
<title>My home-page</title>
|
60
|
+
<meta property="dc:creator" content="Mark Birbeck" />
|
61
|
+
<link rel="foaf:topic" href="http://www.formsPlayer.com/#us" />
|
62
|
+
</head>
|
63
|
+
<body>
|
64
|
+
<div>
|
65
|
+
<p>
|
66
|
+
I'm holding
|
67
|
+
<span property="cal:summary">
|
68
|
+
one last summer Barbecue
|
69
|
+
</span>,
|
70
|
+
on
|
71
|
+
<span property="cal:dtstart" content="2007-09-16T16:00:00-05:00"
|
72
|
+
datatype="xsd:dateTime">
|
73
|
+
September 16th at 4pm
|
74
|
+
</span>.
|
75
|
+
</p>
|
76
|
+
|
77
|
+
<a xmlns:cc="http://creativecommons.org/ns#"
|
78
|
+
rel="cc:license"
|
79
|
+
href="http://creativecommons.org/licenses/by-nc-nd/3.0/">
|
80
|
+
Creative Commons License
|
81
|
+
</a>.
|
82
|
+
</div>
|
83
|
+
</body>
|
84
|
+
</html>
|
85
|
+
eoxhtml
|
86
|
+
end
|
87
|
+
|
88
|
+
def invalid_entity_document
|
89
|
+
File.read(File.join(File.dirname(__FILE__), 'assets', 'invalid_entity.xhtml'))
|
90
|
+
end
|
91
|
+
|
92
|
+
def invalid_entity_document_transitional
|
93
|
+
File.read(File.join(File.dirname(__FILE__), 'assets', 'invalid_entity_transitional.xhtml'))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require 'helper'
|
3
|
+
require "markup_validity"
|
4
|
+
|
5
|
+
class TestMarkupValidity < Test::Unit::TestCase
|
6
|
+
include MarkupValidity::TestHelper
|
7
|
+
|
8
|
+
class FakeUnit
|
9
|
+
include MarkupValidity::Assertions
|
10
|
+
|
11
|
+
attr_reader :assertions
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@assertions = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def assert *args
|
18
|
+
@assertions << args
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup
|
23
|
+
@fu = FakeUnit.new
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_strict_invalid_entity_error
|
27
|
+
assert_xhtml_strict invalid_entity_document
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_transitional_invalid_entity_error
|
31
|
+
assert_xhtml_transitional invalid_entity_document_transitional
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_line_numbers_do_not_roll_over
|
35
|
+
validator = MarkupValidity::Validator.new('foo')
|
36
|
+
assert !validator.valid?
|
37
|
+
assert_no_match(/-1/, validator.inspect)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_line_numbers_do_not_roll_over_line_1
|
41
|
+
validator = MarkupValidity::Validator.new("\nfoo")
|
42
|
+
assert !validator.valid?
|
43
|
+
assert_no_match(/-1/, validator.inspect)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_valid_xhtml_transitional
|
47
|
+
@fu.assert_xhtml_transitional valid_document
|
48
|
+
assert_equal [true, ''], @fu.assertions.first
|
49
|
+
assert_xhtml_transitional valid_document
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_valid_xhtml
|
53
|
+
@fu.assert_xhtml valid_document
|
54
|
+
assert_equal [true, ''], @fu.assertions.first
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_valid_xhtml_strict
|
58
|
+
@fu.assert_xhtml_strict valid_document
|
59
|
+
assert_equal [true, ''], @fu.assertions.first
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_valid_xhtml_rdfa
|
63
|
+
@fu.assert_xhtml_rdfa valid_document_xhtml_rdfa
|
64
|
+
assert_equal [true, ''], @fu.assertions.first
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_invalid_xhtml
|
68
|
+
@fu.assert_xhtml_transitional invalid_document
|
69
|
+
assert_equal false, @fu.assertions.first.first
|
70
|
+
assert_match('Missing child element', @fu.assertions.first.last)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_invalid_xhtml_strict
|
74
|
+
@fu.assert_xhtml_strict invalid_document
|
75
|
+
assert_equal false, @fu.assertions.first.first
|
76
|
+
assert_match('Missing child element', @fu.assertions.first.last)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_invalid_xhtml_rdfa
|
80
|
+
@fu.assert_xhtml_rdfa invalid_document
|
81
|
+
assert_equal false, @fu.assertions.first.first
|
82
|
+
assert_match('Missing child element', @fu.assertions.first.last)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_valid_schema
|
86
|
+
xsd = File.join(File.dirname(__FILE__), 'assets', 'shipment.xsd')
|
87
|
+
xml = File.join(File.dirname(__FILE__), 'assets', 'order.xml')
|
88
|
+
@fu.assert_schema File.read(xsd), File.read(xml)
|
89
|
+
assert_equal [true, ''], @fu.assertions.first
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_invalid_schema
|
93
|
+
xsd = File.join(File.dirname(__FILE__), 'assets', 'shipment.xsd')
|
94
|
+
xml = File.read File.join(File.dirname(__FILE__), 'assets', 'order.xml')
|
95
|
+
xml.gsub!(/<name>[^<]*<\/name>/, '')
|
96
|
+
@fu.assert_schema File.read(xsd), xml
|
97
|
+
assert_equal false, @fu.assertions.first.first
|
98
|
+
assert_match('This element is not', @fu.assertions.first.last)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_no_legend_does_not_invalidate
|
102
|
+
@fu.assert_xhtml_strict document_with_no_legend_in_fieldset
|
103
|
+
assert_equal [true, ''], @fu.assertions.first
|
104
|
+
end
|
105
|
+
end
|