libxml-ruby 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+ require './test_helper'
3
+ require 'test/unit'
4
+
5
+ class TestFoo < Test::Unit::TestCase
6
+ def namespaces
7
+ {'kml' => 'http://earth.google.com/kml/2.2'}
8
+ end
9
+
10
+ def doc
11
+ path = File.expand_path(File.join('model', 'kml_sample.xml'))
12
+ data = File.read(path)
13
+ parser = LibXML::XML::Parser.string(data)
14
+ doc = parser.parse
15
+ result = doc.root
16
+ doc = nil
17
+ GC.start
18
+ end
19
+
20
+ def test_read
21
+ 1000.times do
22
+ read_placemarks
23
+ GC.start
24
+ end
25
+ end
26
+
27
+ def read_placemarks
28
+ root = doc.root
29
+ result = Array.new
30
+ root.find('//kml:Placemark', self.namespaces).each do |entry|
31
+ result << self.read_placemark(entry)
32
+ end
33
+ result
34
+ end
35
+
36
+ def read_placemark(entry)
37
+ geometries = read_geoms(entry)
38
+ #stop processing this placemark if there aren't any geometries.
39
+ return if geometries.empty?
40
+ end
41
+
42
+ def read_geoms(entry)
43
+
44
+ geoms = []
45
+ entry.find('//kml:Point', self.namespaces).each do |point_entry|
46
+ geoms << parse_point(point_entry)
47
+ end
48
+
49
+ entry.find('//kml:LineString', self.namespaces).each do |point_entry|
50
+ geoms << parse_point(point_entry)
51
+ end
52
+
53
+ entry.find('//kml:Polygon', self.namespaces).each do |point_entry|
54
+ geoms << parse_polygon(point_entry)
55
+ end
56
+
57
+ geoms
58
+ end
59
+
60
+ def parse_point(entry)
61
+ coordinate_entry = entry.find('//kml:coordinates',self.namespaces).first
62
+ coordinate_entry.content.split(",")
63
+ end
64
+
65
+ def parse_coordinate_string(entry)
66
+ coordinates = entry.content.split
67
+ end
68
+
69
+ def parse_line_string(entry)
70
+ coord_sequence = parse_coordinate_string(entry.find('kml:coordinates',self.namespaces).first)
71
+ end
72
+
73
+ def parse_linear_ring(entry)
74
+ coord_sequence = parse_coordinate_string(entry.find('kml:coordinates',self.namespaces).first)
75
+ end
76
+
77
+ def parse_polygon(entry)
78
+ exterior_ring = parse_linear_ring(entry.find('kml:outerBoundaryIs/kml:LinearRing', self.namespaces).first)
79
+
80
+ interior_rings = []
81
+ entry.find('kml:innerBoundaryIs/kml:LinearRing', self.namespaces).each do |interior_ring|
82
+ interior_rings << parse_linear_ring(interior_ring)
83
+ end
84
+ interior_rings
85
+ end
86
+ end
@@ -200,6 +200,37 @@ class TestReader < Test::Unit::TestCase
200
200
  assert_equal(1, entries.length)
201
201
  end
202
202
 
203
+ def test_expand_invalid
204
+ reader = XML::Reader.file(XML_FILE)
205
+
206
+ # Expand a node before one has been read
207
+ error = assert_raise(RuntimeError) do
208
+ reader.expand
209
+ end
210
+ assert_equal("The reader does not have a document. Did you forget to call read?", error.to_s)
211
+ end
212
+
213
+ def test_expand_invalid_access
214
+ reader = XML::Reader.file(XML_FILE)
215
+
216
+ # Read a node
217
+ reader.read
218
+ reader.read
219
+
220
+ # Expand the node
221
+ node = reader.expand
222
+ assert_equal('feed', node.name)
223
+
224
+ # Read another node, this makes the last node invalid
225
+ reader.next
226
+
227
+ # The previous node is now invalid
228
+ error = assert_raise(RuntimeError) do
229
+ assert_equal('feed', node.name)
230
+ end
231
+ assert_equal("This node has already been freed.", error.to_s)
232
+ end
233
+
203
234
  def test_mode
204
235
  reader = XML::Reader.string('<xml/>')
205
236
  assert_equal(XML::Reader::MODE_INITIAL, reader.read_state)
@@ -207,4 +207,4 @@ class TestXPath < Test::Unit::TestCase
207
207
  end
208
208
  assert_equal("Error: Invalid expression.", error.to_s)
209
209
  end
210
- end
210
+ end
@@ -20,11 +20,12 @@ class TestXPathContext < Test::Unit::TestCase
20
20
  @context = nil
21
21
  end
22
22
 
23
- #def test_no_ns
24
- #assert_raise(XML::XPath::InvalidPath) do
25
- #@context.find('/soap:Envelope')
26
- #end
27
- #end
23
+ def test_no_ns
24
+ error = assert_raise(LibXML::XML::Error) do
25
+ @context.find('/soap:Envelope')
26
+ end
27
+ assert_equal("Error: Undefined namespace prefix.", error.to_s)
28
+ end
28
29
 
29
30
  def test_ns_register
30
31
  @context.register_namespace(SOAP_PREFIX, SOAP_URI)
@@ -77,4 +78,12 @@ class TestXPathContext < Test::Unit::TestCase
77
78
  @context.enable_cache(10)
78
79
  @context.disable_cache
79
80
  end
80
- end
81
+
82
+ def test_require_doc
83
+ doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
84
+ error = assert_raise(TypeError) do
85
+ @context = XML::XPath::Context.new(doc.root)
86
+ end
87
+ assert_equal("Supplied argument must be a document or node.", error.to_s)
88
+ end
89
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libxml-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 1
9
- - 1
10
- version: 2.1.1
9
+ - 2
10
+ version: 2.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ross Bamform
@@ -20,7 +20,7 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2011-08-01 00:00:00 Z
23
+ date: 2011-08-03 00:00:00 Z
24
24
  dependencies: []
25
25
 
26
26
  description: " The Libxml-Ruby project provides Ruby language bindings for the GNOME\n Libxml2 XML toolkit. It is free software, released under the MIT License.\n Libxml-ruby's primary advantage over REXML is performance - if speed\n is your need, these are good libraries to consider, as demonstrated\n by the informal benchmark below.\n"
@@ -145,6 +145,7 @@ files:
145
145
  - test/model/bands.utf-8.xml
146
146
  - test/model/bands.xml
147
147
  - test/model/books.xml
148
+ - test/model/kml_sample.xml
148
149
  - test/model/merge_bug_data.xml
149
150
  - test/model/ruby-lang.html
150
151
  - test/model/rubynet.xml
@@ -163,6 +164,7 @@ files:
163
164
  - test/tc_document_write.rb
164
165
  - test/tc_dtd.rb
165
166
  - test/tc_error.rb
167
+ - test/tc_gc.rb
166
168
  - test/tc_html_parser.rb
167
169
  - test/tc_html_parser_context.rb
168
170
  - test/tc_namespace.rb
@@ -235,6 +237,7 @@ test_files:
235
237
  - test/tc_document_write.rb
236
238
  - test/tc_dtd.rb
237
239
  - test/tc_error.rb
240
+ - test/tc_gc.rb
238
241
  - test/tc_html_parser.rb
239
242
  - test/tc_html_parser_context.rb
240
243
  - test/tc_namespace.rb