GeoRuby 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/README +16 -13
  2. data/lib/geo_ruby/shp4r/dbf.rb +234 -0
  3. data/lib/geo_ruby/shp4r/shp.rb +301 -0
  4. data/lib/geo_ruby/simple_features/geometry.rb +1 -0
  5. data/lib/geo_ruby.rb +1 -1
  6. data/rakefile.rb +4 -4
  7. data/test/data/point.dbf +0 -0
  8. data/test/data/point.shp +0 -0
  9. data/test/data/point.shx +0 -0
  10. data/test/data/polygon.dbf +0 -0
  11. data/test/data/polygon.shp +0 -0
  12. data/test/data/polygon.shx +0 -0
  13. data/test/data/polyline.dbf +0 -0
  14. data/test/data/polyline.shp +0 -0
  15. data/test/data/polyline.shx +0 -0
  16. data/test/test_shp.rb +77 -0
  17. data/tools/db.yml +6 -0
  18. data/tools/lib/spatial_adapter/MIT-LICENSE +7 -0
  19. data/tools/lib/spatial_adapter/README +116 -0
  20. data/tools/lib/spatial_adapter/init.rb +10 -0
  21. data/tools/lib/spatial_adapter/lib/common_spatial_adapter.rb +175 -0
  22. data/tools/lib/spatial_adapter/lib/mysql_spatial_adapter.rb +143 -0
  23. data/tools/lib/spatial_adapter/lib/post_gis_adapter.rb +333 -0
  24. data/tools/lib/spatial_adapter/rakefile.rb +35 -0
  25. data/tools/lib/spatial_adapter/test/access_mysql_test.rb +87 -0
  26. data/tools/lib/spatial_adapter/test/access_postgis_test.rb +151 -0
  27. data/tools/lib/spatial_adapter/test/common/common_mysql.rb +18 -0
  28. data/tools/lib/spatial_adapter/test/common/common_postgis.rb +19 -0
  29. data/tools/lib/spatial_adapter/test/db/database_mysql.yml +5 -0
  30. data/tools/lib/spatial_adapter/test/db/database_postgis.yml +4 -0
  31. data/tools/lib/spatial_adapter/test/find_mysql_test.rb +64 -0
  32. data/tools/lib/spatial_adapter/test/find_postgis_test.rb +65 -0
  33. data/tools/lib/spatial_adapter/test/migration_mysql_test.rb +136 -0
  34. data/tools/lib/spatial_adapter/test/migration_postgis_test.rb +170 -0
  35. data/tools/lib/spatial_adapter/test/models/models_mysql.rb +25 -0
  36. data/tools/lib/spatial_adapter/test/models/models_postgis.rb +41 -0
  37. data/tools/lib/spatial_adapter/test/schema/schema_mysql.rb +40 -0
  38. data/tools/lib/spatial_adapter/test/schema/schema_postgis.rb +69 -0
  39. data/tools/shp2sql.rb +91 -0
  40. metadata +47 -4
@@ -0,0 +1,35 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'rake/gempackagetask'
5
+
6
+ namespace :test do
7
+ Rake::TestTask::new(:mysql => "db:mysql" ) do |t|
8
+ t.test_files = FileList['test/*_mysql_test.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ Rake::TestTask::new(:postgis => "db:postgis" ) do |t|
13
+ t.test_files = FileList['test/*_postgis_test.rb']
14
+ t.verbose = true
15
+ end
16
+ end
17
+
18
+ namespace :db do
19
+ task :mysql do
20
+ load('test/schema/schema_mysql.rb')
21
+ end
22
+
23
+ task :postgis do
24
+ load('test/schema/schema_postgis.rb')
25
+ end
26
+ end
27
+
28
+ desc "Generate the documentation"
29
+ Rake::RDocTask::new do |rdoc|
30
+ rdoc.rdoc_dir = 'spatialadapter-doc/'
31
+ rdoc.title = "MySql Spatial Adapater for Rails Documentation"
32
+ rdoc.options << '--line-numbers' << '--inline-source'
33
+ rdoc.rdoc_files.include('README')
34
+ rdoc.rdoc_files.include('lib/**/*.rb')
35
+ end
@@ -0,0 +1,87 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'test/unit'
4
+ require 'common/common_mysql'
5
+ require 'models/models_mysql'
6
+
7
+
8
+ class AccessMysqlTest < Test::Unit::TestCase
9
+
10
+ def test_point
11
+ pt = TablePoint.new(:data => "Test", :geom => Point.from_x_y(1.2,4.5))
12
+ assert(pt.save)
13
+
14
+ pt = TablePoint.find_first
15
+ assert(pt)
16
+ assert_equal("Test",pt.data)
17
+ assert_equal(Point.from_x_y(1.2,4.5),pt.geom)
18
+
19
+ end
20
+
21
+ def test_line_string
22
+ ls = TableLineString.new(:value => 3, :geom => LineString.from_coordinates([[1.4,2.5],[1.5,6.7]]))
23
+ assert(ls.save)
24
+
25
+ ls = TableLineString.find_first
26
+ assert(ls)
27
+ assert_equal(3,ls.value)
28
+ assert_equal(LineString.from_coordinates([[1.4,2.5],[1.5,6.7]]),ls.geom)
29
+
30
+ end
31
+
32
+ def test_polygon
33
+ pg = TablePolygon.new(:geom => Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]))
34
+ assert(pg.save)
35
+
36
+ pg = TablePolygon.find_first
37
+ assert(pg)
38
+ assert_equal(Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),pg.geom)
39
+ end
40
+
41
+ def test_muti_point
42
+ mp = TableMultiPoint.new(:geom => MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]]))
43
+ assert(mp.save)
44
+
45
+ mp = TableMultiPoint.find_first
46
+ assert(mp)
47
+ assert_equal(MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]]),mp.geom)
48
+ end
49
+
50
+ def test_multi_line_string
51
+ ml = TableMultiLineString.new(:geom => MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]]),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]])]))
52
+ assert(ml.save)
53
+
54
+ ml = TableMultiLineString.find_first
55
+ assert(ml)
56
+ assert_equal(MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]]),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]])]),ml.geom)
57
+ end
58
+
59
+ def test_multi_polygon
60
+ mp = TableMultiPolygon.new( :geom => MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]])]))
61
+ assert(mp.save)
62
+
63
+ mp = TableMultiPolygon.find_first
64
+ assert(mp)
65
+ assert_equal(MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]])]),mp.geom)
66
+ end
67
+
68
+ def test_geometry
69
+ gm = TableGeometry.new(:geom => LineString.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698]]))
70
+ assert(gm.save)
71
+
72
+ gm = TableGeometry.find_first
73
+ assert(gm)
74
+ assert_equal(LineString.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698]]),gm.geom)
75
+ end
76
+
77
+ def test_geometry_collection
78
+ gc = TableGeometryCollection.new(:geom => GeometryCollection.from_geometries([Point.from_x_y(4.67,45.4),LineString.from_coordinates([[5.7,12.45],[67.55,54]])]))
79
+ assert(gc.save)
80
+
81
+ gc = TableGeometryCollection.find_first
82
+ assert(gc)
83
+ assert_equal(GeometryCollection.from_geometries([Point.from_x_y(4.67,45.4),LineString.from_coordinates([[5.7,12.45],[67.55,54]])]),gc.geom)
84
+ end
85
+
86
+
87
+ end
@@ -0,0 +1,151 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'test/unit'
4
+ require 'common/common_postgis'
5
+ require 'models/models_postgis'
6
+
7
+
8
+ class AccessPostgisTest < Test::Unit::TestCase
9
+
10
+ def test_point
11
+ pt = TablePoint.new(:data => "Test", :geom => Point.from_x_y(1.2,4.5))
12
+ assert(pt.save)
13
+
14
+ pt = TablePoint.find_first
15
+ assert(pt)
16
+ assert_equal("Test",pt.data)
17
+ assert_equal(Point.from_x_y(1.2,4.5),pt.geom)
18
+
19
+ pts = TablePoint.find_all
20
+ pts.each do |pt|
21
+ assert(pt.geom.is_a?(Point))
22
+ end
23
+
24
+ end
25
+
26
+ def test_keyword_column_point
27
+ pt = TableKeywordColumnPoint.new(:location => Point.from_x_y(1.2,4.5))
28
+ assert(pt.save)
29
+
30
+ pt = TableKeywordColumnPoint.find_first
31
+ assert(pt)
32
+ assert_equal(Point.from_x_y(1.2,4.5),pt.location)
33
+
34
+ end
35
+
36
+ def test_line_string
37
+ ls = TableLineString.new(:value => 3, :geom => LineString.from_coordinates([[1.4,2.5],[1.5,6.7]]))
38
+ assert(ls.save)
39
+
40
+ ls = TableLineString.find_first
41
+ assert(ls)
42
+ assert_equal(3,ls.value)
43
+ assert_equal(LineString.from_coordinates([[1.4,2.5],[1.5,6.7]]),ls.geom)
44
+
45
+ end
46
+
47
+ def test_polygon
48
+ pg = TablePolygon.new(:geom => Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]))
49
+ assert(pg.save)
50
+
51
+ pg = TablePolygon.find_first
52
+ assert(pg)
53
+ assert_equal(Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),pg.geom)
54
+ end
55
+
56
+ def test_muti_point
57
+ mp = TableMultiPoint.new(:geom => MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]]))
58
+ assert(mp.save)
59
+
60
+ mp = TableMultiPoint.find_first
61
+ assert(mp)
62
+ assert_equal(MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]]),mp.geom)
63
+ end
64
+
65
+ def test_multi_line_string
66
+ ml = TableMultiLineString.new(:geom => MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]]),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]])]))
67
+ assert(ml.save)
68
+
69
+ ml = TableMultiLineString.find_first
70
+ assert(ml)
71
+ assert_equal(MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]]),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]])]),ml.geom)
72
+ end
73
+
74
+ def test_multi_polygon
75
+ mp = TableMultiPolygon.new( :geom => MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]])]))
76
+ assert(mp.save)
77
+
78
+ mp = TableMultiPolygon.find_first
79
+ assert(mp)
80
+ assert_equal(MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]]),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]])]),mp.geom)
81
+ end
82
+
83
+ def test_geometry
84
+ gm = TableGeometry.new(:geom => LineString.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698]]))
85
+ assert(gm.save)
86
+
87
+ gm = TableGeometry.find_first
88
+ assert(gm)
89
+ assert_equal(LineString.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698]]),gm.geom)
90
+ end
91
+
92
+ def test_geometry_collection
93
+ gc = TableGeometryCollection.new(:geom => GeometryCollection.from_geometries([Point.from_x_y(4.67,45.4),LineString.from_coordinates([[5.7,12.45],[67.55,54]])]))
94
+ assert(gc.save)
95
+
96
+ gc = TableGeometryCollection.find_first
97
+ assert(gc)
98
+ assert_equal(GeometryCollection.from_geometries([Point.from_x_y(4.67,45.4),LineString.from_coordinates([[5.7,12.45],[67.55,54]])]),gc.geom)
99
+ end
100
+
101
+ def test_3dz_points
102
+ pt = Table3dzPoint.new(:data => "Hello!",:geom => Point.from_x_y_z(-1.6,2.8,-3.4))
103
+ assert(pt.save)
104
+
105
+ pt = Table3dzPoint.find_first
106
+ assert(pt)
107
+ assert_equal(Point.from_x_y_z(-1.6,2.8,-3.4),pt.geom)
108
+ end
109
+
110
+ def test_3dm_points
111
+ pt = Table3dmPoint.new(:geom => Point.from_x_y_m(-1.6,2.8,-3.4))
112
+ assert(pt.save)
113
+
114
+ pt = Table3dmPoint.find_first
115
+ assert(pt)
116
+ assert_equal(Point.from_x_y_m(-1.6,2.8,-3.4),pt.geom)
117
+ end
118
+
119
+ def test_4d_point
120
+ pt = Table4dPoint.new(:geom => Point.from_x_y_z_m(-1.6,2.8,-3.4,15))
121
+ assert(pt.save)
122
+
123
+ pt = Table4dPoint.find_first
124
+ assert(pt)
125
+ assert_equal(Point.from_x_y_z_m(-1.6,2.8,-3.4,15),pt.geom)
126
+ end
127
+
128
+ def test_srid_line_string
129
+ ls = TableSridLineString.new(:geom => LineString.from_coordinates([[1.4,2.5],[1.5,6.7]],123))
130
+ assert(ls.save)
131
+
132
+ ls = TableSridLineString.find_first
133
+ assert(ls)
134
+ ls_e = LineString.from_coordinates([[1.4,2.5],[1.5,6.7]],123)
135
+ assert_equal(ls_e,ls.geom)
136
+ assert_equal(ls_e.srid,ls.geom.srid)
137
+ end
138
+
139
+ def test_srid_4d_polygon
140
+ pg = TableSrid4dPolygon.new(:geom => Polygon.from_coordinates([[[0,0,2,-45.1],[4,0,2,5],[4,4,2,4.67],[0,4,2,1.34],[0,0,2,-45.1]],[[1,1,2,12.3],[3,1,2,123],[3,3,2,12.2],[1,3,2,12],[1,1,2,12.3]]],123,true,true))
141
+ assert(pg.save)
142
+
143
+ pg = TableSrid4dPolygon.find_first
144
+ assert(pg)
145
+ pg_e = Polygon.from_coordinates([[[0,0,2,-45.1],[4,0,2,5],[4,4,2,4.67],[0,4,2,1.34],[0,0,2,-45.1]],[[1,1,2,12.3],[3,1,2,123],[3,3,2,12.2],[1,3,2,12],[1,1,2,12.3]]],123,true,true)
146
+ assert_equal(pg_e,pg.geom)
147
+ assert_equal(pg_e.srid,pg.geom.srid)
148
+ end
149
+
150
+
151
+ end
@@ -0,0 +1,18 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+
3
+ require 'rubygems'
4
+ require_gem 'activerecord'
5
+
6
+ ActiveRecord::Base.establish_connection(YAML.load_file(File.dirname(__FILE__) + '/../db/database_mysql.yml'))
7
+
8
+ require File.dirname(__FILE__) + '/../../init.rb'
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
@@ -0,0 +1,19 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+
3
+ require 'rubygems'
4
+ require_gem 'activerecord'
5
+
6
+
7
+ ActiveRecord::Base.establish_connection(YAML.load_file(File.dirname(__FILE__) + '/../db/database_postgis.yml'))
8
+
9
+ require File.dirname(__FILE__) + '/../../init.rb'
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
@@ -0,0 +1,5 @@
1
+ adapter: mysql
2
+ database: spatial_adapter_plugin_test
3
+ username: root
4
+ password:
5
+ host: localhost
@@ -0,0 +1,4 @@
1
+ adapter: postgresql
2
+ database: spatial_adapter_plugin_test
3
+ username: gvellut
4
+ password:
@@ -0,0 +1,64 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'test/unit'
4
+ require 'common/common_mysql'
5
+
6
+ class Park < ActiveRecord::Base
7
+ end
8
+
9
+ class FindMysqlTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ ActiveRecord::Schema.define() do
13
+ create_table "parks", :options => "ENGINE=MyISAM" , :force => true do |t|
14
+ t.column "data" , :string, :limit => 100
15
+ t.column "geom", :point,:null=>false
16
+ end
17
+ add_index "parks","geom",:spatial=>true,:name => "example_spatial_index"
18
+ end
19
+
20
+ pt = Park.new(:data => "Point1", :geom => Point.from_x_y(1.2,0.75))
21
+ assert(pt.save)
22
+
23
+ pt = Park.new(:data => "Point2",:geom => Point.from_x_y(0.6,1.3))
24
+ assert(pt.save)
25
+
26
+ pt = Park.new(:data => "Point3", :geom => Point.from_x_y(2.5,2))
27
+ assert(pt.save)
28
+ end
29
+
30
+ def test_find_by_geom_column
31
+ #the linestring bbox is [0 0,2 2]
32
+ pts = Park.find_all_by_geom(LineString.from_coordinates([[0,0],[2,2]]))
33
+ assert(pts)
34
+ assert(pts.is_a?(Array))
35
+ assert_equal(2,pts.length)
36
+ assert(pts[0].data == "Point1" ||pts[1].data == "Point1" )
37
+ assert(pts[0].data == "Point2" ||pts[1].data == "Point2" )
38
+
39
+ #the linestring bbox is [2.49 1.99,2.51 2.01]
40
+ pts = Park.find_all_by_geom(LineString.from_coordinates([[2.49,1.99],[2.51,2.01]]))
41
+ assert(pts)
42
+ assert(pts.is_a?(Array))
43
+ assert_equal(1,pts.length)
44
+ assert(pts[0].data == "Point3")
45
+
46
+ end
47
+
48
+ def test_find_by_geom_column_bbox_condition
49
+ pts = Park.find_all_by_geom([[0,0],[2,2]])
50
+ assert(pts)
51
+ assert(pts.is_a?(Array))
52
+ assert_equal(2,pts.length)
53
+ assert(pts[0].data == "Point1" ||pts[1].data == "Point1" )
54
+ assert(pts[0].data == "Point2" ||pts[1].data == "Point2" )
55
+
56
+ pts = Park.find_all_by_geom([[2.49,1.99],[2.51,2.01]])
57
+ assert(pts)
58
+ assert(pts.is_a?(Array))
59
+ assert_equal(1,pts.length)
60
+ assert(pts[0].data == "Point3")
61
+ end
62
+
63
+
64
+ end
@@ -0,0 +1,65 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'test/unit'
4
+ require 'common/common_postgis'
5
+
6
+ class Park < ActiveRecord::Base
7
+ end
8
+
9
+ class FindPostgisTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ ActiveRecord::Schema.define() do
13
+ create_table "parks", :force => true do |t|
14
+ t.column "data" , :string, :limit => 100
15
+ t.column "geom", :point,:null=>false,:srid=>123
16
+ end
17
+ add_index "parks","geom",:spatial=>true,:name => "example_spatial_index"
18
+ end
19
+
20
+ pt = Park.new(:data => "Point1", :geom => Point.from_x_y(1.2,0.75,123))
21
+ assert(pt.save)
22
+
23
+ pt = Park.new(:data => "Point2",:geom => Point.from_x_y(0.6,1.3,123))
24
+ assert(pt.save)
25
+
26
+ pt = Park.new(:data => "Point3", :geom => Point.from_x_y(2.5,2,123))
27
+ assert(pt.save)
28
+
29
+ end
30
+
31
+ def test_find_by_geom_column
32
+
33
+ pts = Park.find_all_by_geom(LineString.from_coordinates([[0,0],[2,2]],123))
34
+ assert(pts)
35
+ assert(pts.is_a?(Array))
36
+ assert_equal(2,pts.length)
37
+ assert(pts[0].data == "Point1" ||pts[1].data == "Point1" )
38
+ assert(pts[0].data == "Point2" ||pts[1].data == "Point2" )
39
+
40
+ pts = Park.find_all_by_geom(LineString.from_coordinates([[2.49,1.99],[2.51,2.01]],123))
41
+ assert(pts)
42
+ assert(pts.is_a?(Array))
43
+ assert_equal(1,pts.length)
44
+ assert(pts[0].data == "Point3")
45
+
46
+ end
47
+
48
+ def test_find_by_geom_column_bbox_condition
49
+ pts = Park.find_all_by_geom([[0,0],[2,2],123])
50
+ assert(pts)
51
+ assert(pts.is_a?(Array))
52
+ assert_equal(2,pts.length)
53
+ assert(pts[0].data == "Point1" ||pts[1].data == "Point1" )
54
+ assert(pts[0].data == "Point2" ||pts[1].data == "Point2" )
55
+
56
+ pts = Park.find_all_by_geom([[0,0],[2,2],123])
57
+ assert(pts)
58
+ assert(pts.is_a?(Array))
59
+ assert_equal(2,pts.length)
60
+ assert(pts[0].data == "Point1" ||pts[1].data == "Point1" )
61
+ assert(pts[0].data == "Point2" ||pts[1].data == "Point2" )
62
+ end
63
+
64
+
65
+ end