# -*- coding: utf-8 -*-
#!/usr/bin/env ruby
require 'test/unit'
require 'hpricot'
require 'load_files'
unless "".respond_to?(:lines)
require 'enumerator'
class String
def lines
Enumerable::Enumerator.new(self, :each_line)
end
end
end
class TestPreserved < Test::Unit::TestCase
def assert_roundtrip str
doc = Hpricot(str)
yield doc if block_given?
str2 = doc.to_original_html
if RUBY_VERSION =~ /^1.9/
str2.force_encoding('UTF-8')
end
str.lines.zip(str2.lines).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 = "
Hpricot is a you know uh fine thing.
"
assert_html str, str
assert_html "
Hpricot is a you know uh fine thing.
", str do |doc|
(doc/:p).set('class', 'new')
end
end
def test_parent
str = "Test
Paragraph one.
Paragraph two.
"
assert_html str, str
assert_html "
Paragraph one.
Paragraph two.
", str do |doc|
(doc/:head).remove
(doc/:div).set('id', 'all')
(doc/:p).wrap('')
end
end
def test_escaping_of_contents
doc = Hpricot(TestFiles::BOINGBOING)
assert_equal "Fukuda’s 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_fixup_link
doc = %{ht}
assert_roundtrip doc
assert_equal Hpricot(doc).to_s,
%{ht}
assert_equal Hpricot.XML(doc).to_s,
%{ht}
end
def test_escaping_of_attrs
# ampersands in URLs
str = %{Google}
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 %{Google}, doc.to_html
end
end