-
-
Notifications
You must be signed in to change notification settings - Fork 897
/
test_nokogiri.rb
138 lines (113 loc) · 3.69 KB
/
test_nokogiri.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
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