nokogiri 1.3.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (256) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG.ja.rdoc +233 -0
  3. data/CHANGELOG.rdoc +222 -0
  4. data/Manifest.txt +247 -0
  5. data/README.ja.rdoc +103 -0
  6. data/README.rdoc +117 -0
  7. data/Rakefile +205 -0
  8. data/bin/nokogiri +47 -0
  9. data/ext/nokogiri/extconf.rb +89 -0
  10. data/ext/nokogiri/html_document.c +183 -0
  11. data/ext/nokogiri/html_document.h +10 -0
  12. data/ext/nokogiri/html_element_description.c +272 -0
  13. data/ext/nokogiri/html_element_description.h +10 -0
  14. data/ext/nokogiri/html_entity_lookup.c +30 -0
  15. data/ext/nokogiri/html_entity_lookup.h +8 -0
  16. data/ext/nokogiri/html_sax_parser.c +57 -0
  17. data/ext/nokogiri/html_sax_parser.h +11 -0
  18. data/ext/nokogiri/iconv.dll +0 -0
  19. data/ext/nokogiri/libexslt.dll +0 -0
  20. data/ext/nokogiri/libxml2.dll +0 -0
  21. data/ext/nokogiri/libxslt.dll +0 -0
  22. data/ext/nokogiri/nokogiri.c +81 -0
  23. data/ext/nokogiri/nokogiri.h +149 -0
  24. data/ext/nokogiri/xml_attr.c +92 -0
  25. data/ext/nokogiri/xml_attr.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +53 -0
  27. data/ext/nokogiri/xml_cdata.h +9 -0
  28. data/ext/nokogiri/xml_comment.c +51 -0
  29. data/ext/nokogiri/xml_comment.h +9 -0
  30. data/ext/nokogiri/xml_document.c +308 -0
  31. data/ext/nokogiri/xml_document.h +21 -0
  32. data/ext/nokogiri/xml_document_fragment.c +48 -0
  33. data/ext/nokogiri/xml_document_fragment.h +10 -0
  34. data/ext/nokogiri/xml_dtd.c +102 -0
  35. data/ext/nokogiri/xml_dtd.h +8 -0
  36. data/ext/nokogiri/xml_entity_reference.c +50 -0
  37. data/ext/nokogiri/xml_entity_reference.h +9 -0
  38. data/ext/nokogiri/xml_io.c +24 -0
  39. data/ext/nokogiri/xml_io.h +10 -0
  40. data/ext/nokogiri/xml_namespace.c +69 -0
  41. data/ext/nokogiri/xml_namespace.h +12 -0
  42. data/ext/nokogiri/xml_node.c +928 -0
  43. data/ext/nokogiri/xml_node.h +14 -0
  44. data/ext/nokogiri/xml_node_set.c +386 -0
  45. data/ext/nokogiri/xml_node_set.h +9 -0
  46. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  47. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  48. data/ext/nokogiri/xml_reader.c +572 -0
  49. data/ext/nokogiri/xml_reader.h +10 -0
  50. data/ext/nokogiri/xml_relax_ng.c +106 -0
  51. data/ext/nokogiri/xml_relax_ng.h +9 -0
  52. data/ext/nokogiri/xml_sax_parser.c +336 -0
  53. data/ext/nokogiri/xml_sax_parser.h +10 -0
  54. data/ext/nokogiri/xml_sax_push_parser.c +86 -0
  55. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  56. data/ext/nokogiri/xml_schema.c +107 -0
  57. data/ext/nokogiri/xml_schema.h +9 -0
  58. data/ext/nokogiri/xml_syntax_error.c +203 -0
  59. data/ext/nokogiri/xml_syntax_error.h +12 -0
  60. data/ext/nokogiri/xml_text.c +47 -0
  61. data/ext/nokogiri/xml_text.h +9 -0
  62. data/ext/nokogiri/xml_xpath.c +53 -0
  63. data/ext/nokogiri/xml_xpath.h +11 -0
  64. data/ext/nokogiri/xml_xpath_context.c +252 -0
  65. data/ext/nokogiri/xml_xpath_context.h +9 -0
  66. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  67. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  68. data/ext/nokogiri/zlib1.dll +0 -0
  69. data/lib/action-nokogiri.rb +36 -0
  70. data/lib/nokogiri.rb +110 -0
  71. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  72. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  73. data/lib/nokogiri/css.rb +25 -0
  74. data/lib/nokogiri/css/generated_parser.rb +748 -0
  75. data/lib/nokogiri/css/generated_tokenizer.rb +144 -0
  76. data/lib/nokogiri/css/node.rb +107 -0
  77. data/lib/nokogiri/css/parser.rb +82 -0
  78. data/lib/nokogiri/css/parser.y +227 -0
  79. data/lib/nokogiri/css/syntax_error.rb +7 -0
  80. data/lib/nokogiri/css/tokenizer.rb +11 -0
  81. data/lib/nokogiri/css/tokenizer.rex +54 -0
  82. data/lib/nokogiri/css/xpath_visitor.rb +172 -0
  83. data/lib/nokogiri/decorators.rb +2 -0
  84. data/lib/nokogiri/decorators/hpricot.rb +3 -0
  85. data/lib/nokogiri/decorators/hpricot/node.rb +56 -0
  86. data/lib/nokogiri/decorators/hpricot/node_set.rb +54 -0
  87. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +30 -0
  88. data/lib/nokogiri/decorators/slop.rb +33 -0
  89. data/lib/nokogiri/ffi/html/document.rb +37 -0
  90. data/lib/nokogiri/ffi/html/element_description.rb +85 -0
  91. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  92. data/lib/nokogiri/ffi/html/sax/parser.rb +21 -0
  93. data/lib/nokogiri/ffi/io_callbacks.rb +32 -0
  94. data/lib/nokogiri/ffi/libxml.rb +314 -0
  95. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  96. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  97. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  98. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  99. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  100. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  102. data/lib/nokogiri/ffi/structs/xml_dtd.rb +26 -0
  103. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  104. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  105. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  106. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  107. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  108. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  109. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +14 -0
  110. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  111. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  112. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  113. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  114. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  115. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  117. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  118. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  119. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  120. data/lib/nokogiri/ffi/xml/document.rb +107 -0
  121. data/lib/nokogiri/ffi/xml/document_fragment.rb +26 -0
  122. data/lib/nokogiri/ffi/xml/dtd.rb +42 -0
  123. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  124. data/lib/nokogiri/ffi/xml/namespace.rb +38 -0
  125. data/lib/nokogiri/ffi/xml/node.rb +380 -0
  126. data/lib/nokogiri/ffi/xml/node_set.rb +130 -0
  127. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  128. data/lib/nokogiri/ffi/xml/reader.rb +217 -0
  129. data/lib/nokogiri/ffi/xml/relax_ng.rb +51 -0
  130. data/lib/nokogiri/ffi/xml/sax/parser.rb +148 -0
  131. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +38 -0
  132. data/lib/nokogiri/ffi/xml/schema.rb +55 -0
  133. data/lib/nokogiri/ffi/xml/syntax_error.rb +76 -0
  134. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  135. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  136. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  137. data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
  138. data/lib/nokogiri/hpricot.rb +62 -0
  139. data/lib/nokogiri/html.rb +34 -0
  140. data/lib/nokogiri/html/builder.rb +35 -0
  141. data/lib/nokogiri/html/document.rb +71 -0
  142. data/lib/nokogiri/html/document_fragment.rb +15 -0
  143. data/lib/nokogiri/html/element_description.rb +23 -0
  144. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  145. data/lib/nokogiri/html/sax/parser.rb +47 -0
  146. data/lib/nokogiri/nokogiri.rb +1 -0
  147. data/lib/nokogiri/syntax_error.rb +4 -0
  148. data/lib/nokogiri/version.rb +29 -0
  149. data/lib/nokogiri/version_warning.rb +11 -0
  150. data/lib/nokogiri/xml.rb +62 -0
  151. data/lib/nokogiri/xml/attr.rb +9 -0
  152. data/lib/nokogiri/xml/builder.rb +254 -0
  153. data/lib/nokogiri/xml/cdata.rb +11 -0
  154. data/lib/nokogiri/xml/document.rb +100 -0
  155. data/lib/nokogiri/xml/document_fragment.rb +49 -0
  156. data/lib/nokogiri/xml/dtd.rb +11 -0
  157. data/lib/nokogiri/xml/entity_declaration.rb +11 -0
  158. data/lib/nokogiri/xml/fragment_handler.rb +55 -0
  159. data/lib/nokogiri/xml/namespace.rb +7 -0
  160. data/lib/nokogiri/xml/node.rb +745 -0
  161. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  162. data/lib/nokogiri/xml/node_set.rb +238 -0
  163. data/lib/nokogiri/xml/notation.rb +6 -0
  164. data/lib/nokogiri/xml/parse_options.rb +80 -0
  165. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  166. data/lib/nokogiri/xml/reader.rb +66 -0
  167. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  168. data/lib/nokogiri/xml/sax.rb +3 -0
  169. data/lib/nokogiri/xml/sax/document.rb +143 -0
  170. data/lib/nokogiri/xml/sax/parser.rb +101 -0
  171. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  172. data/lib/nokogiri/xml/schema.rb +65 -0
  173. data/lib/nokogiri/xml/syntax_error.rb +34 -0
  174. data/lib/nokogiri/xml/xpath.rb +10 -0
  175. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  176. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  177. data/lib/nokogiri/xslt.rb +48 -0
  178. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  179. data/lib/xsd/xmlparser/nokogiri.rb +64 -0
  180. data/tasks/test.rb +161 -0
  181. data/test/css/test_nthiness.rb +160 -0
  182. data/test/css/test_parser.rb +277 -0
  183. data/test/css/test_tokenizer.rb +176 -0
  184. data/test/css/test_xpath_visitor.rb +76 -0
  185. data/test/ffi/test_document.rb +35 -0
  186. data/test/files/address_book.rlx +12 -0
  187. data/test/files/address_book.xml +10 -0
  188. data/test/files/dont_hurt_em_why.xml +422 -0
  189. data/test/files/exslt.xml +8 -0
  190. data/test/files/exslt.xslt +35 -0
  191. data/test/files/po.xml +32 -0
  192. data/test/files/po.xsd +66 -0
  193. data/test/files/staff.xml +59 -0
  194. data/test/files/staff.xslt +32 -0
  195. data/test/files/tlm.html +850 -0
  196. data/test/helper.rb +123 -0
  197. data/test/hpricot/files/basic.xhtml +17 -0
  198. data/test/hpricot/files/boingboing.html +2266 -0
  199. data/test/hpricot/files/cy0.html +3653 -0
  200. data/test/hpricot/files/immob.html +400 -0
  201. data/test/hpricot/files/pace_application.html +1320 -0
  202. data/test/hpricot/files/tenderlove.html +16 -0
  203. data/test/hpricot/files/uswebgen.html +220 -0
  204. data/test/hpricot/files/utf8.html +1054 -0
  205. data/test/hpricot/files/week9.html +1723 -0
  206. data/test/hpricot/files/why.xml +19 -0
  207. data/test/hpricot/load_files.rb +11 -0
  208. data/test/hpricot/test_alter.rb +68 -0
  209. data/test/hpricot/test_builder.rb +20 -0
  210. data/test/hpricot/test_parser.rb +426 -0
  211. data/test/hpricot/test_paths.rb +15 -0
  212. data/test/hpricot/test_preserved.rb +77 -0
  213. data/test/hpricot/test_xml.rb +30 -0
  214. data/test/html/sax/test_parser.rb +52 -0
  215. data/test/html/test_builder.rb +156 -0
  216. data/test/html/test_document.rb +361 -0
  217. data/test/html/test_document_encoding.rb +46 -0
  218. data/test/html/test_document_fragment.rb +97 -0
  219. data/test/html/test_element_description.rb +95 -0
  220. data/test/html/test_named_characters.rb +14 -0
  221. data/test/html/test_node.rb +165 -0
  222. data/test/test_convert_xpath.rb +186 -0
  223. data/test/test_css_cache.rb +56 -0
  224. data/test/test_gc.rb +15 -0
  225. data/test/test_memory_leak.rb +77 -0
  226. data/test/test_nokogiri.rb +127 -0
  227. data/test/test_reader.rb +316 -0
  228. data/test/test_xslt_transforms.rb +131 -0
  229. data/test/xml/node/test_save_options.rb +20 -0
  230. data/test/xml/node/test_subclass.rb +44 -0
  231. data/test/xml/sax/test_parser.rb +169 -0
  232. data/test/xml/sax/test_push_parser.rb +92 -0
  233. data/test/xml/test_attr.rb +38 -0
  234. data/test/xml/test_builder.rb +73 -0
  235. data/test/xml/test_cdata.rb +38 -0
  236. data/test/xml/test_comment.rb +23 -0
  237. data/test/xml/test_document.rb +397 -0
  238. data/test/xml/test_document_encoding.rb +26 -0
  239. data/test/xml/test_document_fragment.rb +76 -0
  240. data/test/xml/test_dtd.rb +42 -0
  241. data/test/xml/test_dtd_encoding.rb +31 -0
  242. data/test/xml/test_entity_reference.rb +21 -0
  243. data/test/xml/test_namespace.rb +43 -0
  244. data/test/xml/test_node.rb +808 -0
  245. data/test/xml/test_node_attributes.rb +34 -0
  246. data/test/xml/test_node_encoding.rb +84 -0
  247. data/test/xml/test_node_set.rb +368 -0
  248. data/test/xml/test_parse_options.rb +52 -0
  249. data/test/xml/test_processing_instruction.rb +30 -0
  250. data/test/xml/test_reader_encoding.rb +126 -0
  251. data/test/xml/test_relax_ng.rb +60 -0
  252. data/test/xml/test_schema.rb +65 -0
  253. data/test/xml/test_text.rb +18 -0
  254. data/test/xml/test_unparented_node.rb +381 -0
  255. data/test/xml/test_xpath.rb +106 -0
  256. metadata +409 -0
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestParseOptions < Nokogiri::TestCase
6
+ def test_new
7
+ options = Nokogiri::XML::ParseOptions.new
8
+ assert_equal 0, options.options
9
+ end
10
+
11
+ def test_to_i
12
+ options = Nokogiri::XML::ParseOptions.new
13
+ assert_equal 0, options.to_i
14
+ end
15
+
16
+ ParseOptions.constants.each do |constant|
17
+ next if constant == 'STRICT'
18
+ class_eval %{
19
+ def test_predicate_#{constant.downcase}
20
+ options = ParseOptions.new(ParseOptions::#{constant})
21
+ assert options.#{constant.downcase}?
22
+
23
+ assert ParseOptions.new.#{constant.downcase}.#{constant.downcase}?
24
+ end
25
+ }
26
+ end
27
+
28
+ def test_strict_noent
29
+ options = ParseOptions.new.recover.noent
30
+ assert !options.strict?
31
+ end
32
+
33
+ def test_new_with_argument
34
+ options = Nokogiri::XML::ParseOptions.new 1 << 1
35
+ assert_equal 1 << 1, options.options
36
+ end
37
+
38
+ def test_chaining
39
+ options = Nokogiri::XML::ParseOptions.new.recover.noent
40
+ assert options.recover?
41
+ assert options.noent?
42
+ end
43
+
44
+ def test_inspect
45
+ options = Nokogiri::XML::ParseOptions.new.recover.noent
46
+ ins = options.inspect
47
+ assert_match(/recover/, ins)
48
+ assert_match(/noent/, ins)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,30 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestProcessingInstruction < Nokogiri::TestCase
6
+ def setup
7
+ super
8
+ @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
9
+ end
10
+
11
+ def test_type
12
+ assert_equal(Node::PI_NODE, @xml.children[0].type)
13
+ end
14
+
15
+ def test_name
16
+ assert_equal 'TEST-STYLE', @xml.children[0].name
17
+ end
18
+
19
+ def test_new
20
+ assert ref = ProcessingInstruction.new(@xml, 'name', 'content')
21
+ assert_instance_of ProcessingInstruction, ref
22
+ end
23
+
24
+ def test_many_new
25
+ 100.times { ProcessingInstruction.new(@xml, 'foo', 'bar') }
26
+ @xml.root << ProcessingInstruction.new(@xml, 'foo', 'bar')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,126 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
3
+
4
+ module Nokogiri
5
+ module XML
6
+ if RUBY_VERSION =~ /^1\.9/
7
+ class TestReaderEncoding < Nokogiri::TestCase
8
+ def setup
9
+ super
10
+ @reader = Nokogiri::XML::Reader(
11
+ File.read(XML_FILE),
12
+ XML_FILE,
13
+ 'UTF-8'
14
+ )
15
+ end
16
+
17
+ def test_attribute_at
18
+ @reader.each do |node|
19
+ next unless attribute = node.attribute_at(0)
20
+ assert_equal @reader.encoding, attribute.encoding.name
21
+ end
22
+ end
23
+
24
+ def test_attributes
25
+ @reader.each do |node|
26
+ node.attributes.each do |k,v|
27
+ assert_equal @reader.encoding, k.encoding.name
28
+ assert_equal @reader.encoding, v.encoding.name
29
+ end
30
+ end
31
+ end
32
+
33
+ def test_attribute
34
+ xml = <<-eoxml
35
+ <x xmlns:tenderlove='http://tenderlovemaking.com/'>
36
+ <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
37
+ </x>
38
+ eoxml
39
+ reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
40
+ reader.each do |node|
41
+ next unless attribute = node.attribute('awesome')
42
+ assert_equal reader.encoding, attribute.encoding.name
43
+ end
44
+ end
45
+
46
+ def test_xml_version
47
+ @reader.each do |node|
48
+ next unless version = node.xml_version
49
+ assert_equal @reader.encoding, version.encoding.name
50
+ end
51
+ end
52
+
53
+ def test_lang
54
+ xml = <<-eoxml
55
+ <awesome>
56
+ <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
57
+ <p xml:lang="ja">日本語が上手です</p>
58
+ </awesome>
59
+ eoxml
60
+
61
+ reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
62
+ reader.each do |node|
63
+ next unless lang = node.lang
64
+ assert_equal reader.encoding, lang.encoding.name
65
+ end
66
+ end
67
+
68
+ def test_value
69
+ called = false
70
+ @reader.each do |node|
71
+ next unless value = node.value
72
+ assert_equal @reader.encoding, value.encoding.name
73
+ called = true
74
+ end
75
+ assert called
76
+ end
77
+
78
+ def test_prefix
79
+ xml = <<-eoxml
80
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
81
+ <edi:foo>hello</edi:foo>
82
+ </x>
83
+ eoxml
84
+ reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
85
+ reader.each do |node|
86
+ next unless prefix = node.prefix
87
+ assert_equal reader.encoding, prefix.encoding.name
88
+ end
89
+ end
90
+
91
+ def test_ns_uri
92
+ xml = <<-eoxml
93
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
94
+ <edi:foo>hello</edi:foo>
95
+ </x>
96
+ eoxml
97
+ reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
98
+ reader.each do |node|
99
+ next unless uri = node.namespace_uri
100
+ assert_equal reader.encoding, uri.encoding.name
101
+ end
102
+ end
103
+
104
+ def test_local_name
105
+ xml = <<-eoxml
106
+ <x xmlns:edi='http://ecommerce.example.org/schema'>
107
+ <edi:foo>hello</edi:foo>
108
+ </x>
109
+ eoxml
110
+ reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
111
+ reader.each do |node|
112
+ next unless lname = node.local_name
113
+ assert_equal reader.encoding, lname.encoding.name
114
+ end
115
+ end
116
+
117
+ def test_name
118
+ @reader.each do |node|
119
+ next unless name = node.name
120
+ assert_equal @reader.encoding, name.encoding.name
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,60 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestRelaxNG < Nokogiri::TestCase
6
+ def setup
7
+ assert @schema = Nokogiri::XML::RelaxNG(File.read(ADDRESS_SCHEMA_FILE))
8
+ end
9
+
10
+ def test_parse_with_memory
11
+ assert_instance_of Nokogiri::XML::RelaxNG, @schema
12
+ assert_equal 0, @schema.errors.length
13
+ end
14
+
15
+ def test_new
16
+ assert schema = Nokogiri::XML::RelaxNG.new(
17
+ File.read(ADDRESS_SCHEMA_FILE))
18
+ assert_instance_of Nokogiri::XML::RelaxNG, schema
19
+ end
20
+
21
+ def test_parse_with_io
22
+ xsd = nil
23
+ File.open(ADDRESS_SCHEMA_FILE, 'rb') { |f|
24
+ assert xsd = Nokogiri::XML::RelaxNG(f)
25
+ }
26
+ assert_equal 0, xsd.errors.length
27
+ end
28
+
29
+ def test_parse_with_errors
30
+ xml = File.read(ADDRESS_SCHEMA_FILE).sub(/name="/, 'name=')
31
+ assert_raises(Nokogiri::XML::SyntaxError) {
32
+ Nokogiri::XML::RelaxNG(xml)
33
+ }
34
+ end
35
+
36
+ def test_validate_document
37
+ doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
38
+ assert errors = @schema.validate(doc)
39
+ assert_equal 0, errors.length
40
+ end
41
+
42
+ def test_validate_invalid_document
43
+ # Empty address book is not allowed
44
+ read_doc = '<addressBook></addressBook>'
45
+
46
+ assert errors = @schema.validate(Nokogiri::XML(read_doc))
47
+ assert_equal 1, errors.length
48
+ end
49
+
50
+ def test_valid?
51
+ valid_doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
52
+
53
+ invalid_doc = Nokogiri::XML('<addressBook></addressBook>')
54
+
55
+ assert(@schema.valid?(valid_doc))
56
+ assert(!@schema.valid?(invalid_doc))
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,65 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestSchema < Nokogiri::TestCase
6
+ def setup
7
+ assert @xsd = Nokogiri::XML::Schema(File.read(PO_SCHEMA_FILE))
8
+ end
9
+
10
+ def test_parse_with_memory
11
+ assert_instance_of Nokogiri::XML::Schema, @xsd
12
+ assert_equal 0, @xsd.errors.length
13
+ end
14
+
15
+ def test_new
16
+ assert xsd = Nokogiri::XML::Schema.new(File.read(PO_SCHEMA_FILE))
17
+ assert_instance_of Nokogiri::XML::Schema, xsd
18
+ end
19
+
20
+ def test_parse_with_io
21
+ xsd = nil
22
+ File.open(PO_SCHEMA_FILE, 'rb') { |f|
23
+ assert xsd = Nokogiri::XML::Schema(f)
24
+ }
25
+ assert_equal 0, xsd.errors.length
26
+ end
27
+
28
+ def test_parse_with_errors
29
+ xml = File.read(PO_SCHEMA_FILE).sub(/name="/, 'name=')
30
+ assert_raises(Nokogiri::XML::SyntaxError) {
31
+ Nokogiri::XML::Schema(xml)
32
+ }
33
+ end
34
+
35
+ def test_validate_document
36
+ doc = Nokogiri::XML(File.read(PO_XML_FILE))
37
+ assert errors = @xsd.validate(doc)
38
+ assert_equal 0, errors.length
39
+ end
40
+
41
+ def test_validate_file
42
+ assert errors = @xsd.validate(PO_XML_FILE)
43
+ assert_equal 0, errors.length
44
+ end
45
+
46
+ def test_validate_invalid_document
47
+ read_doc = File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
48
+
49
+ assert errors = @xsd.validate(Nokogiri::XML(read_doc))
50
+ assert_equal 2, errors.length
51
+ end
52
+
53
+ def test_valid?
54
+ valid_doc = Nokogiri::XML(File.read(PO_XML_FILE))
55
+
56
+ invalid_doc = Nokogiri::XML(
57
+ File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
58
+ )
59
+
60
+ assert(@xsd.valid?(valid_doc))
61
+ assert(!@xsd.valid?(invalid_doc))
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestText < Nokogiri::TestCase
6
+ def test_new
7
+ node = Text.new('hello world', Document.new)
8
+ assert node
9
+ assert_equal('hello world', node.content)
10
+ assert_instance_of Nokogiri::XML::Text, node
11
+ end
12
+
13
+ def test_lots_of_text
14
+ 100.times { Text.new('hello world', Document.new) }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,381 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
+
3
+ require 'stringio'
4
+
5
+ module Nokogiri
6
+ module XML
7
+ class TestUnparentedNode < Nokogiri::TestCase
8
+ def setup
9
+ begin
10
+ xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
11
+ @node = xml.at('staff')
12
+ @node.unlink
13
+ end
14
+ GC.start # try to GC the document
15
+ end
16
+
17
+ def test_node_still_has_document
18
+ assert @node.document
19
+ end
20
+
21
+ def test_add_namespace
22
+ node = @node.at('address')
23
+ node.unlink
24
+ node.add_namespace('foo', 'http://tenderlovemaking.com')
25
+ assert_equal 'http://tenderlovemaking.com', node.namespaces['xmlns:foo']
26
+ end
27
+
28
+ def test_write_to
29
+ io = StringIO.new
30
+ @node.write_to io
31
+ io.rewind
32
+ assert_equal @node.to_xml, io.read
33
+ end
34
+
35
+ def test_attribute_with_symbol
36
+ assert_equal 'Yes', @node.css('address').first[:domestic]
37
+ end
38
+
39
+ def test_write_to_with_block
40
+ called = false
41
+ io = StringIO.new
42
+ conf = nil
43
+ @node.write_to io do |config|
44
+ called = true
45
+ conf = config
46
+ config.format.as_html.no_empty_tags
47
+ end
48
+ io.rewind
49
+ assert called
50
+ assert_equal @node.serialize(:save_with => conf.options), io.read
51
+ end
52
+
53
+ %w{ xml html xhtml }.each do |type|
54
+ define_method(:"test_write_#{type}_to") do
55
+ io = StringIO.new
56
+ assert @node.send(:"write_#{type}_to", io)
57
+ io.rewind
58
+ assert_match @node.send(:"to_#{type}"), io.read
59
+ end
60
+ end
61
+
62
+ def test_serialize_with_block
63
+ called = false
64
+ conf = nil
65
+ string = @node.serialize do |config|
66
+ called = true
67
+ conf = config
68
+ config.format.as_html.no_empty_tags
69
+ end
70
+ assert called
71
+ assert_equal @node.serialize(nil, conf.options), string
72
+ end
73
+
74
+ def test_values
75
+ assert_equal %w{ Yes Yes }, @node.xpath('.//address')[1].values
76
+ end
77
+
78
+ def test_keys
79
+ assert_equal %w{ domestic street }, @node.xpath('.//address')[1].keys
80
+ end
81
+
82
+ def test_each
83
+ attributes = []
84
+ @node.xpath('.//address')[1].each do |key, value|
85
+ attributes << [key, value]
86
+ end
87
+ assert_equal [['domestic', 'Yes'], ['street', 'Yes']], attributes
88
+ end
89
+
90
+ def test_new
91
+ assert node = Nokogiri::XML::Node.new('input', @node)
92
+ assert_equal 1, node.node_type
93
+ end
94
+
95
+ def test_to_str
96
+ assert name = @node.xpath('.//name').first
97
+ assert_match(/Margaret/, '' + name)
98
+ assert_equal('Margaret Martin', '' + name.children.first)
99
+ end
100
+
101
+ def test_ancestors
102
+ assert(address = @node.xpath('.//address').first)
103
+ assert_equal 2, address.ancestors.length
104
+ assert_equal ['employee', 'staff'],
105
+ address.ancestors.map { |x| x ? x.name : x }
106
+ end
107
+
108
+ def test_read_only?
109
+ assert entity_decl = @node.internal_subset.children.find { |x|
110
+ x.type == Node::ENTITY_DECL
111
+ }
112
+ assert entity_decl.read_only?
113
+ end
114
+
115
+ def test_remove_attribute
116
+ address = @node.xpath('./employee/address').first
117
+ assert_equal 'Yes', address['domestic']
118
+ address.remove_attribute 'domestic'
119
+ assert_nil address['domestic']
120
+ end
121
+
122
+ def test_delete
123
+ address = @node.xpath('./employee/address').first
124
+ assert_equal 'Yes', address['domestic']
125
+ address.delete 'domestic'
126
+ assert_nil address['domestic']
127
+ end
128
+
129
+ def test_add_child_in_same_document
130
+ child = @node.css('employee').first
131
+
132
+ assert previous_last_child = child.children.last
133
+ assert new_child = child.children.first
134
+
135
+ last = child.children.last
136
+
137
+ child.add_child(new_child)
138
+ assert_equal new_child, child.children.last
139
+ assert_equal last, child.children.last
140
+ end
141
+
142
+ def test_add_child_from_other_document
143
+ d1 = Nokogiri::XML("<root><item>1</item><item>2</item></root>")
144
+ d2 = Nokogiri::XML("<root><item>3</item><item>4</item></root>")
145
+
146
+ d2.at('root').search('item').each do |i|
147
+ d1.at('root').add_child i
148
+ end
149
+
150
+ assert_equal 0, d2.search('item').size
151
+ assert_equal 4, d1.search('item').size
152
+ end
153
+
154
+ def test_add_child
155
+ xml = Nokogiri::XML(<<-eoxml)
156
+ <root>
157
+ <a>Hello world</a>
158
+ </root>
159
+ eoxml
160
+ text_node = Nokogiri::XML::Text.new('hello', xml)
161
+ assert_equal Nokogiri::XML::Node::TEXT_NODE, text_node.type
162
+ xml.root.add_child text_node
163
+ assert_match 'hello', xml.to_s
164
+ end
165
+
166
+ def test_chevron_works_as_add_child
167
+ xml = Nokogiri::XML(<<-eoxml)
168
+ <root>
169
+ <a>Hello world</a>
170
+ </root>
171
+ eoxml
172
+ text_node = Nokogiri::XML::Text.new('hello', xml)
173
+ xml.root << text_node
174
+ assert_match 'hello', xml.to_s
175
+ end
176
+
177
+ def test_add_previous_sibling
178
+ xml = Nokogiri::XML(<<-eoxml)
179
+ <root>
180
+ <a>Hello world</a>
181
+ </root>
182
+ eoxml
183
+ b_node = Nokogiri::XML::Node.new('a', xml)
184
+ assert_equal Nokogiri::XML::Node::ELEMENT_NODE, b_node.type
185
+ b_node.content = 'first'
186
+ a_node = xml.xpath('.//a').first
187
+ a_node.add_previous_sibling(b_node)
188
+ assert_equal('first', xml.xpath('.//a').first.text)
189
+ end
190
+
191
+ def test_add_previous_sibling_merge
192
+ xml = Nokogiri::XML(<<-eoxml)
193
+ <root>
194
+ <a>Hello world</a>
195
+ </root>
196
+ eoxml
197
+
198
+ assert a_tag = xml.css('a').first
199
+
200
+ left_space = a_tag.previous
201
+ right_space = a_tag.next
202
+ assert left_space.text?
203
+ assert right_space.text?
204
+
205
+ left_space.add_previous_sibling(right_space)
206
+ assert_equal left_space, right_space
207
+ end
208
+
209
+ def test_add_next_sibling_merge
210
+ xml = Nokogiri::XML(<<-eoxml)
211
+ <root>
212
+ <a>Hello world</a>
213
+ </root>
214
+ eoxml
215
+
216
+ assert a_tag = xml.css('a').first
217
+
218
+ left_space = a_tag.previous
219
+ right_space = a_tag.next
220
+ assert left_space.text?
221
+ assert right_space.text?
222
+
223
+ right_space.add_next_sibling(left_space)
224
+ assert_equal left_space, right_space
225
+ end
226
+
227
+ def test_find_by_css_with_tilde_eql
228
+ xml = Nokogiri::XML.parse(<<-eoxml)
229
+ <root>
230
+ <a>Hello world</a>
231
+ <a class='foo bar'>Bar</a>
232
+ <a class='bar foo'>Bar</a>
233
+ <a class='bar'>Bar</a>
234
+ <a class='baz bar foo'>Bar</a>
235
+ <a class='bazbarfoo'>Awesome</a>
236
+ <a class='bazbar'>Awesome</a>
237
+ </root>
238
+ eoxml
239
+ set = xml.css('a[@class~="bar"]')
240
+ assert_equal 4, set.length
241
+ assert_equal ['Bar'], set.map { |node| node.content }.uniq
242
+ end
243
+
244
+ def test_unlink
245
+ xml = Nokogiri::XML.parse(<<-eoxml)
246
+ <root>
247
+ <a class='foo bar'>Bar</a>
248
+ <a class='bar foo'>Bar</a>
249
+ <a class='bar'>Bar</a>
250
+ <a>Hello world</a>
251
+ <a class='baz bar foo'>Bar</a>
252
+ <a class='bazbarfoo'>Awesome</a>
253
+ <a class='bazbar'>Awesome</a>
254
+ </root>
255
+ eoxml
256
+ node = xml.xpath('.//a')[3]
257
+ assert_equal('Hello world', node.text)
258
+ assert_match(/Hello world/, xml.to_s)
259
+ assert node.parent
260
+ assert node.document
261
+ assert node.previous_sibling
262
+ assert node.next_sibling
263
+ node.unlink
264
+ assert !node.parent
265
+ # assert !node.document
266
+ assert !node.previous_sibling
267
+ assert !node.next_sibling
268
+ assert_no_match(/Hello world/, xml.to_s)
269
+ end
270
+
271
+ def test_next_sibling
272
+ assert sibling = @node.child.next_sibling
273
+ assert_equal('employee', sibling.name)
274
+ end
275
+
276
+ def test_previous_sibling
277
+ assert sibling = @node.child.next_sibling
278
+ assert_equal('employee', sibling.name)
279
+ assert_equal(sibling.previous_sibling, @node.child)
280
+ end
281
+
282
+ def test_name=
283
+ @node.name = 'awesome'
284
+ assert_equal('awesome', @node.name)
285
+ end
286
+
287
+ def test_child
288
+ assert child = @node.child
289
+ assert_equal('text', child.name)
290
+ end
291
+
292
+ def test_key?
293
+ assert node = @node.search('.//address').first
294
+ assert(!node.key?('asdfasdf'))
295
+ end
296
+
297
+ def test_set_property
298
+ assert node = @node.search('.//address').first
299
+ node['foo'] = 'bar'
300
+ assert_equal('bar', node['foo'])
301
+ end
302
+
303
+ def test_attributes
304
+ assert node = @node.search('.//address').first
305
+ assert_nil(node['asdfasdfasdf'])
306
+ assert_equal('Yes', node['domestic'])
307
+
308
+ assert node = @node.search('.//address')[2]
309
+ attr = node.attributes
310
+ assert_equal 2, attr.size
311
+ assert_equal 'Yes', attr['domestic'].value
312
+ assert_equal 'Yes', attr['domestic'].to_s
313
+ assert_equal 'No', attr['street'].value
314
+ end
315
+
316
+ def test_path
317
+ assert set = @node.search('.//employee')
318
+ assert node = set.first
319
+ assert_equal('/staff/employee[1]', node.path)
320
+ end
321
+
322
+ def test_search_by_symbol
323
+ assert set = @node.search(:employee)
324
+ assert 5, set.length
325
+
326
+ assert node = @node.at(:employee)
327
+ assert node.text =~ /EMP0001/
328
+ end
329
+
330
+ def test_new_node
331
+ node = Nokogiri::XML::Node.new('form', @node.document)
332
+ assert_equal('form', node.name)
333
+ assert(node.document)
334
+ end
335
+
336
+ def test_encode_special_chars
337
+ foo = @node.css('employee').first.encode_special_chars('&')
338
+ assert_equal '&amp;', foo
339
+ end
340
+
341
+ def test_content
342
+ node = Nokogiri::XML::Node.new('form', @node)
343
+ assert_equal('', node.content)
344
+
345
+ node.content = 'hello world!'
346
+ assert_equal('hello world!', node.content)
347
+ end
348
+
349
+ def test_whitespace_nodes
350
+ doc = Nokogiri::XML.parse("<root><b>Foo</b>\n<i>Bar</i> <p>Bazz</p></root>")
351
+ children = doc.at('.//root').children.collect{|j| j.to_s}
352
+ assert_equal "\n", children[1]
353
+ assert_equal " ", children[3]
354
+ end
355
+
356
+ def test_replace
357
+ set = @node.search('.//employee')
358
+ assert 5, set.length
359
+ assert 0, @node.search('.//form').length
360
+
361
+ first = set[0]
362
+ second = set[1]
363
+
364
+ node = Nokogiri::XML::Node.new('form', @node)
365
+ first.replace(node)
366
+
367
+ assert set = @node.search('.//employee')
368
+ assert_equal 4, set.length
369
+ assert 1, @node.search('.//form').length
370
+
371
+ assert_equal set[0].to_xml, second.to_xml
372
+ end
373
+
374
+ def test_illegal_replace_of_node_with_doc
375
+ new_node = Nokogiri::XML.parse('<foo>bar</foo>')
376
+ old_node = @node.at('.//employee')
377
+ assert_raises(ArgumentError){ old_node.replace new_node }
378
+ end
379
+ end
380
+ end
381
+ end