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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
require "helper"
class TestNokogiri < Nokogiri::TestCase
def test_versions
version_match = /\d+\.\d+\.\d+/
assert_match version_match, Nokogiri::VERSION
assert_equal Nokogiri::VERSION_INFO['ruby']['version'], ::RUBY_VERSION
assert_equal Nokogiri::VERSION_INFO['ruby']['platform'], ::RUBY_PLATFORM
if Nokogiri.uses_libxml?
assert_match version_match, Nokogiri::LIBXML_VERSION
assert_equal 'extension', Nokogiri::VERSION_INFO['libxml']['binding']
assert_match version_match, Nokogiri::VERSION_INFO['libxml']['compiled']
assert_equal Nokogiri::LIBXML_VERSION, Nokogiri::VERSION_INFO['libxml']['compiled']
assert_match version_match, Nokogiri::VERSION_INFO['libxml']['loaded']
Nokogiri::LIBXML_PARSER_VERSION =~ /(\d)(\d{2})(\d{2})/
major = $1.to_i
minor = $2.to_i
bug = $3.to_i
assert_equal "#{major}.#{minor}.#{bug}", Nokogiri::VERSION_INFO['libxml']['loaded']
end
end
def test_libxml_iconv
assert Nokogiri.const_defined?(:LIBXML_ICONV_ENABLED) if Nokogiri.uses_libxml?
end
def test_parse_with_io
doc = Nokogiri.parse(
StringIO.new("<html><head><title></title><body></body></html>")
)
assert_instance_of Nokogiri::HTML::Document, doc
end
def test_xml?
doc = Nokogiri.parse(File.read(XML_FILE))
assert doc.xml?
assert !doc.html?
end
def test_atom_is_xml?
doc = Nokogiri.parse(File.read(XML_ATOM_FILE))
assert doc.xml?
assert !doc.html?
end
def test_html?
doc = Nokogiri.parse(File.read(HTML_FILE))
assert !doc.xml?
assert doc.html?
end
def test_nokogiri_method_with_html
doc1 = Nokogiri(File.read(HTML_FILE))
doc2 = Nokogiri.parse(File.read(HTML_FILE))
assert_equal doc1.serialize, doc2.serialize
end
def test_nokogiri_method_with_block
doc = Nokogiri { b "bold tag" }
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
end
def test_make_with_html
doc = Nokogiri.make("<b>bold tag</b>")
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
end
def test_make_with_block
doc = Nokogiri.make { b "bold tag" }
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
end
SLOP_HTML = <<-END
<html>
<body>
<ul>
<li class='red'>one</li>
<li class='blue'>two</li>
</ul>
<div>
one
<div>div two</div>
</div>
</body>
</html>
END
def test_slop_css
doc = Nokogiri::Slop(<<-eohtml)
<html>
<body>
<div>
one
<div class='foo'>
div two
<div class='foo'>
div three
</div>
</div>
</div>
</body>
</html>
eohtml
assert_equal "div", doc.html.body.div.div('.foo').name
end
def test_slop
doc = Nokogiri::Slop(SLOP_HTML)
assert_equal "one", doc.html.body.ul.li.first.text
assert_equal "two", doc.html.body.ul.li(".blue").text
assert_equal "div two", doc.html.body.div.div.text
assert_equal "two", doc.html.body.ul.li(:css => ".blue").text
assert_equal "two", doc.html.body.ul.li(:xpath => "position()=2").text
assert_equal "one", doc.html.body.ul.li(:xpath => ["contains(text(),'o')"]).first.text
assert_equal "two", doc.html.body.ul.li(:xpath => ["contains(text(),'o')","contains(text(),'t')"]).text
assert_raise(NoMethodError) { doc.nonexistent }
end
def test_slop_decorator
doc = Nokogiri(SLOP_HTML)
assert !doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
doc.slop!
assert doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
doc.slop!
assert_equal 1, doc.decorators(Nokogiri::XML::Node).select { |d| d == Nokogiri::Decorators::Slop }.size
end
end
|