raakt 0.5.2 → 0.5.4
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/lib/raakt.rb +49 -8
- data/tests/difficult_words1.htm +18 -0
- data/tests/difficult_words2.htm +18 -0
- data/tests/difficult_words3.htm +18 -0
- data/tests/difficult_words4.htm +16 -0
- data/tests/difficult_words5.htm +16 -0
- data/tests/difficult_words6.htm +18 -0
- data/tests/difficult_words7.htm +8 -0
- data/tests/raakt_test.rb +96 -0
- data/tests/tabledoc7.htm +1 -0
- metadata +58 -42
data/lib/raakt.rb
CHANGED
@@ -44,10 +44,11 @@ module Raakt
|
|
44
44
|
:missing_input_alt => "Missing alt attribute for image button with id/name '%s'.",
|
45
45
|
:missing_input_alt_text => "Missing alt text for image button with id/name '%s'.",
|
46
46
|
:missing_area_alt => "Missing alt attribute for area with id/name '%s'.",
|
47
|
-
:missing_area_alt_text => "Missing alt text for area with id/name '%s'."
|
47
|
+
:missing_area_alt_text => "Missing alt text for area with id/name '%s'.",
|
48
|
+
:difficult_word => "Vocabulary: %s"
|
48
49
|
}
|
49
50
|
|
50
|
-
VERSION = "0.5.
|
51
|
+
VERSION = "0.5.4"
|
51
52
|
|
52
53
|
class ErrorMessage
|
53
54
|
|
@@ -78,19 +79,21 @@ module Raakt
|
|
78
79
|
|
79
80
|
class Test
|
80
81
|
|
81
|
-
attr_accessor :html, :headers, :
|
82
|
+
attr_accessor :html, :headers, :ignore_bi, :wordlist
|
82
83
|
|
83
|
-
def initialize(html=nil, headers=nil)
|
84
|
+
def initialize(html=nil, headers=nil, wordlist=nil)
|
84
85
|
@html = html
|
85
86
|
@headers = headers
|
87
|
+
@wordlist = wordlist
|
86
88
|
self.doc = @html if html
|
87
89
|
self.headers = @headers if headers
|
90
|
+
self.wordlist = @wordlist if wordlist
|
88
91
|
@ignore_bi = false
|
89
92
|
end
|
90
93
|
|
91
94
|
# Set the HTML used in the test.
|
92
95
|
def doc=(html)
|
93
|
-
Hpricot.buffer_size =
|
96
|
+
Hpricot.buffer_size = 524288 #Allow for asp.net bastard-sized viewstate attributes...
|
94
97
|
@doc = Hpricot(html)
|
95
98
|
end
|
96
99
|
|
@@ -226,7 +229,7 @@ module Raakt
|
|
226
229
|
|
227
230
|
# Verify that the document has at least one h1 element.
|
228
231
|
def check_has_heading
|
229
|
-
return [ErrorMessage.new(:missing_heading)] if (@doc/
|
232
|
+
return [ErrorMessage.new(:missing_heading)] if (@doc/"h1").empty?
|
230
233
|
[]
|
231
234
|
end
|
232
235
|
|
@@ -257,7 +260,7 @@ module Raakt
|
|
257
260
|
end
|
258
261
|
|
259
262
|
|
260
|
-
# Verify that the document does not have any nested
|
263
|
+
# Verify that the document does not have any nested tables. This is indicative of a table-based layout.
|
261
264
|
def check_for_nested_tables
|
262
265
|
|
263
266
|
messages = []
|
@@ -283,6 +286,7 @@ module Raakt
|
|
283
286
|
hasth = false
|
284
287
|
hasth = true unless (table/">tr>th").empty?
|
285
288
|
hasth = true unless (table/">thead>tr>th").empty?
|
289
|
+
hasth = true unless (table/">tbody>tr>th").empty?
|
286
290
|
|
287
291
|
messages << ErrorMessage.new(:missing_th, currenttable.to_s) unless hasth
|
288
292
|
|
@@ -418,8 +422,45 @@ module Raakt
|
|
418
422
|
end.map { ErrorMessage.new(:has_meta_refresh) }
|
419
423
|
end
|
420
424
|
|
425
|
+
|
426
|
+
def check_difficult_words
|
427
|
+
messages = []
|
428
|
+
if @wordlist
|
429
|
+
|
430
|
+
# get document text (and all title and ait attributes but remove blockquote and q elements)
|
431
|
+
|
432
|
+
# remove q and blockquotes
|
433
|
+
@doc.search("blockquote").remove
|
434
|
+
@doc.search("q").remove
|
435
|
+
|
436
|
+
doctext = @doc.inner_text
|
437
|
+
|
438
|
+
#add alt texts
|
439
|
+
@doc.search("*[@alt]").each { |item|
|
440
|
+
doctext += " " + item['alt']
|
441
|
+
doctext += ", "
|
442
|
+
}
|
443
|
+
|
444
|
+
#add title texts
|
445
|
+
@doc.search("*[@title]").each { |item|
|
446
|
+
doctext += " " + item['title']
|
447
|
+
doctext += ", "
|
448
|
+
}
|
449
|
+
|
450
|
+
@wordlist.each { |key, value|
|
451
|
+
re = Regexp.new("\\b" + key.sub(/ /, "\\s+") + "\\b", true)
|
452
|
+
if doctext =~ re
|
453
|
+
# loop over all keys in wordlist
|
454
|
+
messages << ErrorMessage.new(:difficult_word, value)
|
455
|
+
end
|
456
|
+
}
|
457
|
+
|
458
|
+
|
459
|
+
end
|
460
|
+
return messages
|
461
|
+
end
|
421
462
|
|
422
|
-
#Utility methods
|
463
|
+
# Utility methods
|
423
464
|
|
424
465
|
def headings
|
425
466
|
headings = []
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Difficult words. Reticent and taciturn should be found</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p>He was reticent. This is the text for the first news item. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><a href="/news2" title="This is the word taciturn in a title attribute">New sitem 2</a></h2>
|
10
|
+
<p>This is the text for the second news item. <a href="/news2">
|
11
|
+
Read more</a></p>
|
12
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
13
|
+
<p>This is the text for the third news item. <a href="/news3">Read
|
14
|
+
more</a></p>
|
15
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
16
|
+
<p>This is the text for the fourth news item. <a href="/news4">Read more</a></p>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Difficult words, on ein the alt attribute</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p>This is the text for the first news item. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><img src="/news2" alt="This is the word taciturn in an alt attribute">New sitem 2</h2>
|
10
|
+
<p>This is the text for the second news item. <a href="/news2">
|
11
|
+
Read more</a></p>
|
12
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
13
|
+
<p>This is the text for the third news item. <a href="/news3">Read
|
14
|
+
more</a></p>
|
15
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
16
|
+
<p>This is the text for the fourth news item. <a href="/news4">Read more</a></p>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Difficult words, on in the title attribute</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p>This is the text for the first news item. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><img src="/news2" alt="This is the word taciturn in an alt attribute">New sitem 2</h2>
|
10
|
+
<p title="And here is reticent.">This is the text for the second news item. <a href="/news2">
|
11
|
+
Read more</a></p>
|
12
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
13
|
+
<p>This is the text for the third news item. <a href="/news3">Read
|
14
|
+
more</a></p>
|
15
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
16
|
+
<p>This is the text for the fourth news item. <a href="/news4">Read more</a></p>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Difficult words, on in the title attribute</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p>This is the text for the first news item. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><img src="/news2" alt="This is the word taciturn and reticent in an alt attribute">New sitem 2</h2>
|
10
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
11
|
+
<p>This is the text for the third news item. <a href="/news3">Read
|
12
|
+
more</a></p>
|
13
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
14
|
+
<p>This is the text for the fourth news item. <a href="/news4">Read more</a></p>
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Words that are not in the list</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p>This is the superreticent text for the first news item. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><img src="/news2" alt="">New sitem 2</h2>
|
10
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
11
|
+
<p>This is the text for the third news item. <a href="/news3">Read
|
12
|
+
more</a></p>
|
13
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
14
|
+
<p>This is the text for the fourth news item. <a href="/news4">Read more</a></p>
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>This is a document with some difficult words</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Checking for a phrase.</h1>
|
7
|
+
<h2><a href="/news1">New sitem 1</a></h2>
|
8
|
+
<p><q>Reticent</q> he said. <a href="/news1">Read more </a></p>
|
9
|
+
<h2><img src="/news2" alt="">New sitem 2</h2>
|
10
|
+
<h2><a href="/news1">New sitem 3</a></h2>
|
11
|
+
<p>Here are some accented chars: "anhängiggöra". <a href="/news3">Read
|
12
|
+
more</a></p>
|
13
|
+
<h2><a href="/news1">New sitem 4</a></h2>
|
14
|
+
<blockquote>
|
15
|
+
<p>This is the word reticent inside of a blockquote.</p>
|
16
|
+
</blockquote>
|
17
|
+
</body>
|
18
|
+
</html>
|
data/tests/raakt_test.rb
CHANGED
@@ -205,6 +205,9 @@ class RaaktTest < Test::Unit::TestCase
|
|
205
205
|
@raakt.doc = data_tabledoc2
|
206
206
|
assert_equal 2, @raakt.check_tables.length
|
207
207
|
|
208
|
+
@raakt.doc = data_tabledoc7
|
209
|
+
assert_equal 0, @raakt.check_tables.length
|
210
|
+
|
208
211
|
# More accurate count here due to hpricot
|
209
212
|
@raakt.doc = data_full_berg
|
210
213
|
assert_equal 21, @raakt.check_tables.length
|
@@ -412,5 +415,98 @@ class RaaktTest < Test::Unit::TestCase
|
|
412
415
|
@raakt.doc = data_xhtmldoc1
|
413
416
|
assert_equal 0, @raakt.check_refresh.length
|
414
417
|
end
|
418
|
+
|
419
|
+
|
420
|
+
|
421
|
+
|
422
|
+
def test_difficult_words_combinations
|
423
|
+
#words tat are part of other words should not be flagged
|
424
|
+
@raakt.wordlist = {
|
425
|
+
"reticent" => "Use a 'did not want to say' instead.",
|
426
|
+
"taciturn" => "Use a different phrase.",
|
427
|
+
}
|
428
|
+
|
429
|
+
@raakt.doc = data_difficult_words5
|
430
|
+
assert_equal 0, @raakt.check_difficult_words.length
|
431
|
+
end
|
432
|
+
|
433
|
+
|
434
|
+
def test_difficult_words_ignore_case
|
435
|
+
#words tat are part of other words should not be flagged
|
436
|
+
@raakt.wordlist = {
|
437
|
+
"reticent" => "Use a 'did not want to say' instead.",
|
438
|
+
}
|
439
|
+
|
440
|
+
@raakt.doc = data_difficult_words7
|
441
|
+
assert_equal 1, @raakt.check_difficult_words.length
|
442
|
+
end
|
443
|
+
|
444
|
+
|
445
|
+
def test_difficult_words_exclude_blockquoted_text
|
446
|
+
#words that are part of a blockquote should not be flagged
|
447
|
+
@raakt.wordlist = {
|
448
|
+
"reticent" => "Use a 'did not want to say' instead.",
|
449
|
+
}
|
450
|
+
@raakt.doc = data_difficult_words6
|
451
|
+
assert_equal 0, @raakt.check_difficult_words.length
|
452
|
+
end
|
453
|
+
|
454
|
+
|
455
|
+
def test_difficult_words_exclude_text_in_q_elements
|
456
|
+
#words that are part of a q-element should not be flagged
|
457
|
+
@raakt.wordlist = {
|
458
|
+
"reticent" => "Use a 'did not want to say' instead.",
|
459
|
+
}
|
460
|
+
@raakt.doc = data_difficult_words6
|
461
|
+
assert_equal 0, @raakt.check_difficult_words.length
|
462
|
+
end
|
463
|
+
|
464
|
+
|
465
|
+
|
466
|
+
def test_difficult_words_accented_chars
|
467
|
+
#Phrases
|
468
|
+
@raakt.wordlist = {
|
469
|
+
"anhängiggöra" => "Använd 'väcka/inleda' istället",
|
470
|
+
}
|
471
|
+
|
472
|
+
@raakt.doc = data_difficult_words6
|
473
|
+
assert_equal 1, @raakt.check_difficult_words.length
|
474
|
+
end
|
475
|
+
|
476
|
+
|
477
|
+
def test_difficult_words_phrases
|
478
|
+
#Phrases
|
479
|
+
@raakt.wordlist = {
|
480
|
+
"a phrase" => "Use something else instead.",
|
481
|
+
}
|
482
|
+
|
483
|
+
@raakt.doc = data_difficult_words6
|
484
|
+
assert_equal 1, @raakt.check_difficult_words.length
|
485
|
+
end
|
415
486
|
|
487
|
+
|
488
|
+
def test_difficult_words
|
489
|
+
@raakt.wordlist = {
|
490
|
+
"reticent" => "Use a 'did not want to say' instead.",
|
491
|
+
"taciturn" => "Use a different phrase.",
|
492
|
+
}
|
493
|
+
|
494
|
+
@raakt.doc = data_xhtmldoc1
|
495
|
+
assert_equal 0, @raakt.check_difficult_words.length
|
496
|
+
|
497
|
+
@raakt.doc = data_difficult_words1
|
498
|
+
assert_equal 2, @raakt.check_difficult_words.length
|
499
|
+
|
500
|
+
#Make sure text in alt attribute is found
|
501
|
+
@raakt.doc = data_difficult_words2
|
502
|
+
assert_equal 1, @raakt.check_difficult_words.length
|
503
|
+
|
504
|
+
#Make sure text in title attribute is found
|
505
|
+
@raakt.doc = data_difficult_words3
|
506
|
+
assert_equal 2, @raakt.check_difficult_words.length
|
507
|
+
|
508
|
+
@raakt.doc = data_difficult_words4
|
509
|
+
assert_equal 2, @raakt.check_difficult_words.length
|
510
|
+
end
|
511
|
+
|
416
512
|
end
|
data/tests/tabledoc7.htm
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<table><tbody><tr><th>Fondkapital</th><td>227,5 mdkr</td></tr></tbody></table>
|
metadata
CHANGED
@@ -1,33 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: raakt
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
7
|
-
date: 2007-03-31 00:00:00 +02:00
|
8
|
-
summary: A toolkit to find accessibility issues in HTML documents.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: peter.krantzNODAMNSPAM@gmail.com
|
12
|
-
homepage: http://raakt.rubyforge.org
|
13
|
-
rubyforge_project: raakt
|
14
|
-
description:
|
15
|
-
autorequire: raakt
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.2
|
24
|
-
version:
|
4
|
+
version: 0.5.4
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Peter Krantz
|
8
|
+
autorequire: raakt
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-19 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hpricot
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.5"
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email: peter.krantzNODAMNSPAM@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
31
33
|
files:
|
32
34
|
- lib/iso_language_codes.rb
|
33
35
|
- lib/raakt.rb
|
@@ -37,6 +39,13 @@ files:
|
|
37
39
|
- tests/bdoc.htm
|
38
40
|
- tests/charset_nocharset_specified.htm
|
39
41
|
- tests/charset_utf8.htm
|
42
|
+
- tests/difficult_words1.htm
|
43
|
+
- tests/difficult_words2.htm
|
44
|
+
- tests/difficult_words3.htm
|
45
|
+
- tests/difficult_words4.htm
|
46
|
+
- tests/difficult_words5.htm
|
47
|
+
- tests/difficult_words6.htm
|
48
|
+
- tests/difficult_words7.htm
|
40
49
|
- tests/embeddoc1.htm
|
41
50
|
- tests/empty.htm
|
42
51
|
- tests/emptytitledoc.htm
|
@@ -90,28 +99,35 @@ files:
|
|
90
99
|
- tests/tabledoc4.htm
|
91
100
|
- tests/tabledoc5.htm
|
92
101
|
- tests/tabledoc6.htm
|
102
|
+
- tests/tabledoc7.htm
|
93
103
|
- tests/tablelayoutdoc.htm
|
94
104
|
- tests/test_helper.rb
|
95
105
|
- tests/xhtmldoc1.htm
|
96
|
-
|
97
|
-
|
106
|
+
has_rdoc: true
|
107
|
+
homepage: http://raakt.rubyforge.org
|
108
|
+
post_install_message:
|
98
109
|
rdoc_options: []
|
99
110
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.8.2
|
118
|
+
version:
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: "0"
|
124
|
+
version:
|
106
125
|
requirements: []
|
107
126
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: "0.5"
|
117
|
-
version:
|
127
|
+
rubyforge_project: raakt
|
128
|
+
rubygems_version: 1.3.1
|
129
|
+
signing_key:
|
130
|
+
specification_version: 2
|
131
|
+
summary: A toolkit to find accessibility issues in HTML documents.
|
132
|
+
test_files:
|
133
|
+
- tests/raakt_test.rb
|