-
Notifications
You must be signed in to change notification settings - Fork 1
/
test_preserved.rb
66 lines (57 loc) · 2.27 KB
/
test_preserved.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env ruby
require 'test/unit'
require 'hpricot'
require 'load_files'
class TestPreserved < Test::Unit::TestCase
def assert_roundtrip str
doc = Hpricot(str)
yield doc if block_given?
str2 = doc.to_original_html
[*str].zip([*str2]).each do |s1, s2|
assert_equal s1, s2
end
end
def assert_html str1, str2
doc = Hpricot(str2)
yield doc if block_given?
assert_equal str1, doc.to_original_html
end
def test_simple
str = "<p>Hpricot is a <b>you know <i>uh</b> fine thing.</p>"
assert_html str, str
assert_html "<p class=\"new\">Hpricot is a <b>you know <i>uh</b> fine thing.</p>", str do |doc|
(doc/:p).set('class', 'new')
end
end
def test_parent
str = "<html><base href='/'><head><title>Test</title></head><body><div id='wrap'><p>Paragraph one.</p><p>Paragraph two.</p></div></body></html>"
assert_html str, str
assert_html "<html><base href='/'><body><div id=\"all\"><div><p>Paragraph one.</p></div><div><p>Paragraph two.</p></div></div></body></html>", str do |doc|
(doc/:head).remove
(doc/:div).set('id', 'all')
(doc/:p).wrap('<div></div>')
end
end
def test_escaping_of_contents
doc = Hpricot(TestFiles::BOINGBOING)
assert_equal "Fukuda\342\200\231s Automatic Door opens around your body as you pass through it. The idea is to save energy and keep the room clean.", doc.at("img[@alt='200606131240']").next.to_s.strip
end
def test_files
assert_roundtrip TestFiles::BASIC
assert_roundtrip TestFiles::BOINGBOING
assert_roundtrip TestFiles::CY0
end
def test_escaping_of_attrs
# ampersands in URLs
str = %{<a href="http://google.com/search?q=hpricot&l=en">Google</a>}
link = (doc = Hpricot(str)).at(:a)
assert_equal "http://google.com/search?q=hpricot&l=en", link['href']
assert_equal "http://google.com/search?q=hpricot&l=en", link.attributes['href']
assert_equal "http://google.com/search?q=hpricot&l=en", link.get_attribute('href')
assert_equal "http://google.com/search?q=hpricot&l=en", link.raw_attributes['href']
assert_equal str, doc.to_html
# alter the url
link['href'] = "javascript:alert(\"AGGA-KA-BOO!\")"
assert_equal %{<a href="javascript:alert("AGGA-KA-BOO!")">Google</a>}, doc.to_html
end
end