google4r-maps 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +37 -0
- data/LICENSE +22 -0
- data/README +94 -0
- data/lib/google4r/maps.rb +804 -0
- data/test/geocoder_test.rb +187 -0
- data/test/gicon_test.rb +93 -0
- data/test/gmap2_test.rb +304 -0
- data/test/gmarker_test.rb +129 -0
- metadata +54 -0
@@ -0,0 +1,187 @@
|
|
1
|
+
# Project: google4r/maps
|
2
|
+
# File: /test/test_geocoder.rb
|
3
|
+
# Author: Manuel Holtgrewe <purestorm at ggnore dot net>
|
4
|
+
# Copyright: (c) 2007 by Manuel Holtgrewe
|
5
|
+
# License: MIT License as follows:
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
# a copy of this software and associated documentation files (the
|
9
|
+
# "Software"), to deal in the Software without restriction, including
|
10
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
# distribute, sublicense, and/or sell copies of the Software, and to permit
|
12
|
+
# persons to whom the Software is furnished to do so, subject to the
|
13
|
+
# following conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be included
|
16
|
+
# in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
19
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
21
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
22
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
23
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
24
|
+
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
27
|
+
|
28
|
+
require 'google4r/maps'
|
29
|
+
|
30
|
+
require 'test/key'
|
31
|
+
|
32
|
+
# Runs tests for the Google4R::Maps::Geocoder class. You have to provide a file named
|
33
|
+
# "key.rb" in the test directory which defines the constant GOOGLE_MAPS_KEY.
|
34
|
+
# This value will be used as the key for the "real" tests against the Google
|
35
|
+
# servers.
|
36
|
+
class GeocoderTest < Test::Unit::TestCase
|
37
|
+
def setup
|
38
|
+
@test_adress = "Janitell Rd, Colorado Springs, CO"
|
39
|
+
|
40
|
+
@valid_query_result = %q{{"name":"Janitell Rd, Colorado Springs, CO","Status":{"code":200,"request":"geocode"},"Placemark":[{"address":"Janitell Rd, Colorado Springs, CO 80906, USA","AddressDetails":{"Country":{"CountryNameCode":"US","AdministrativeArea":{"AdministrativeAreaName":"CO","SubAdministrativeArea":{"SubAdministrativeAreaName":"El Paso","Locality":{"LocalityName":"Colorado Springs","Thoroughfare":{"ThoroughfareName":"Janitell Rd"},"PostalCode":{"PostalCodeNumber":"80906"}}}}},"Accuracy": 6},"Point":{"coordinates":[-104.790060,38.795330,0]}},{"address":"Janitell Rd, Stratmoor, CO 80906, USA","AddressDetails":{"Country":{"CountryNameCode":"US","AdministrativeArea":{"AdministrativeAreaName":"CO","SubAdministrativeArea":{"SubAdministrativeAreaName":"El Paso","Locality":{"LocalityName":"Stratmoor","Thoroughfare":{"ThoroughfareName":"Janitell Rd"},"PostalCode":{"PostalCodeNumber":"80906"}}}}},"Accuracy": 6},"Point":{"coordinates":[-104.790390,38.789840,0]}},{"address":"Janitell Rd, CO 80906, USA","AddressDetails":{"Country":{"CountryNameCode":"US","AdministrativeArea":{"AdministrativeAreaName":"CO","SubAdministrativeArea":{"SubAdministrativeAreaName":"El Paso","Thoroughfare":{"ThoroughfareName":"Janitell Rd"},"PostalCode":{"PostalCodeNumber":"80906"}}}},"Accuracy": 6},"Point":{"coordinates":[-104.794390,38.803230,0]}}]}}
|
41
|
+
|
42
|
+
@valid_parsed_result =
|
43
|
+
{"Status"=>{"code"=>200, "request"=>"geocode"},
|
44
|
+
"name"=>"Janitell Rd, Colorado Springs, CO",
|
45
|
+
"Placemark"=>
|
46
|
+
[{"AddressDetails"=>
|
47
|
+
{"Country"=>
|
48
|
+
{"AdministrativeArea"=>
|
49
|
+
{"SubAdministrativeArea"=>
|
50
|
+
{"Locality"=>
|
51
|
+
{"LocalityName"=>"Colorado Springs",
|
52
|
+
"Thoroughfare"=>{"ThoroughfareName"=>"Janitell Rd"},
|
53
|
+
"PostalCode"=>{"PostalCodeNumber"=>"80906"}},
|
54
|
+
"SubAdministrativeAreaName"=>"El Paso"},
|
55
|
+
"AdministrativeAreaName"=>"CO"},
|
56
|
+
"CountryNameCode"=>"US"},
|
57
|
+
"Accuracy"=>6},
|
58
|
+
"Point"=>{"coordinates"=>[-104.79006, 38.79533, 0]},
|
59
|
+
"address"=>"Janitell Rd, Colorado Springs, CO 80906, USA"},
|
60
|
+
{"AddressDetails"=>
|
61
|
+
{"Country"=>
|
62
|
+
{"AdministrativeArea"=>
|
63
|
+
{"SubAdministrativeArea"=>
|
64
|
+
{"Locality"=>
|
65
|
+
{"LocalityName"=>"Stratmoor",
|
66
|
+
"Thoroughfare"=>{"ThoroughfareName"=>"Janitell Rd"},
|
67
|
+
"PostalCode"=>{"PostalCodeNumber"=>"80906"}},
|
68
|
+
"SubAdministrativeAreaName"=>"El Paso"},
|
69
|
+
"AdministrativeAreaName"=>"CO"},
|
70
|
+
"CountryNameCode"=>"US"},
|
71
|
+
"Accuracy"=>6},
|
72
|
+
"Point"=>{"coordinates"=>[-104.79039, 38.78984, 0]},
|
73
|
+
"address"=>"Janitell Rd, Stratmoor, CO 80906, USA"},
|
74
|
+
{"AddressDetails"=>
|
75
|
+
{"Country"=>
|
76
|
+
{"AdministrativeArea"=>
|
77
|
+
{"SubAdministrativeArea"=>
|
78
|
+
{"Thoroughfare"=>{"ThoroughfareName"=>"Janitell Rd"},
|
79
|
+
"PostalCode"=>{"PostalCodeNumber"=>"80906"},
|
80
|
+
"SubAdministrativeAreaName"=>"El Paso"},
|
81
|
+
"AdministrativeAreaName"=>"CO"},
|
82
|
+
"CountryNameCode"=>"US"},
|
83
|
+
"Accuracy"=>6},
|
84
|
+
"Point"=>{"coordinates"=>[-104.79439, 38.80323, 0]},
|
85
|
+
"address"=>"Janitell Rd, CO 80906, USA"}]}
|
86
|
+
|
87
|
+
@empty_result =
|
88
|
+
{
|
89
|
+
"Status" => { "code" => :number, "request" => "request" },
|
90
|
+
"Placemark" => []
|
91
|
+
}
|
92
|
+
|
93
|
+
@invalid_key_result = %q{{"name":"Janitell Rd, Colorado Springs, CO","Status":{"code":610,"request":"geocode"}}}
|
94
|
+
end
|
95
|
+
|
96
|
+
def teardown
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
def test_query_performs_correct_query_without_client
|
101
|
+
# required parameters
|
102
|
+
query = 'query'
|
103
|
+
key = 'key'
|
104
|
+
|
105
|
+
# setup stubs & mocks
|
106
|
+
url = URI.escape(Google4R::Maps::Geocoder::GET_URL % [ @test_adress, 'json', key ])
|
107
|
+
fake_response = stub()
|
108
|
+
fake_response.stubs(:body).times(1).with().returns(@valid_query_result)
|
109
|
+
Net::HTTP.stubs(:get_response).returns(fake_response).times(1).with(URI.parse(url))
|
110
|
+
|
111
|
+
# perform query
|
112
|
+
geocoder = Google4R::Maps::Geocoder.new(key)
|
113
|
+
geocoder.query(@test_adress)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_query_performs_correct_query_with_client
|
117
|
+
# required parameters
|
118
|
+
query = 'query'
|
119
|
+
key = 'key'
|
120
|
+
|
121
|
+
# setup stubs & mocks
|
122
|
+
url = URI.escape(Google4R::Maps::Geocoder::GET_URL % [ @test_adress, 'json', key ])
|
123
|
+
fake_response = stub()
|
124
|
+
fake_response.stubs(:body).times(1).with().returns(@valid_query_result)
|
125
|
+
Net::HTTP.stubs(:get_response).returns(fake_response).times(1).with(URI.parse(url + '&client=-client-id-'))
|
126
|
+
|
127
|
+
# perform query
|
128
|
+
geocoder = Google4R::Maps::Geocoder.new(key, '-client-id-')
|
129
|
+
geocoder.query(@test_adress)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_query_without_key_raises_exception
|
133
|
+
coder = Google4R::Maps::Geocoder.new(nil)
|
134
|
+
|
135
|
+
assert_raises(Google4R::Maps::KeyException) { coder.query("") }
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_query_with_invalid_key_raises_exception
|
139
|
+
coder = Google4R::Maps::Geocoder.new("Invalid Google Maps Key")
|
140
|
+
|
141
|
+
assert_raises(Google4R::Maps::KeyException) do
|
142
|
+
coder.query(@test_adress)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Make sure that querying with a broken network connection works, i.e. Google's server
|
147
|
+
# is not accessible.
|
148
|
+
def test_query_with_broken_network_connection
|
149
|
+
Net::HTTP.stubs(:get_response).raises(Net::HTTPRequestTimeOut)
|
150
|
+
|
151
|
+
coder = Google4R::Maps::Geocoder.new(GOOGLE_MAPS_KEY)
|
152
|
+
|
153
|
+
assert_raises(Google4R::Maps::ConnectionException) do
|
154
|
+
coder.query(@test_adress)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_query_returns_nil_if_no_result_has_been_returned_and_no_fatal_problem_occured
|
159
|
+
fake_response = mock('fake response')
|
160
|
+
fake_response.stubs(:body).returns('')
|
161
|
+
Net::HTTP.stubs(:get_response).returns(fake_response)
|
162
|
+
|
163
|
+
[ Google4R::Maps::Geocoder::G_GEO_MISSING_ADDRESS,
|
164
|
+
Google4R::Maps::Geocoder::G_GEO_UNKNOWN_ADDRESS,
|
165
|
+
Google4R::Maps::Geocoder::G_UNAVAILABLE_ADDRESS
|
166
|
+
].each do |code|
|
167
|
+
empty_result = @empty_result.dup
|
168
|
+
empty_result["Status"]["code"] = code
|
169
|
+
|
170
|
+
YAML.stubs(:load).returns(empty_result)
|
171
|
+
|
172
|
+
coder = Google4R::Maps::Geocoder.new(GOOGLE_MAPS_KEY)
|
173
|
+
|
174
|
+
assert_nil coder.query(@test_adress)
|
175
|
+
assert_equal code, coder.last_status_code
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_do_query
|
180
|
+
coder = Google4R::Maps::Geocoder.new(GOOGLE_MAPS_KEY)
|
181
|
+
coder.query @test_adress
|
182
|
+
|
183
|
+
assert_equal 200, coder.last_status_code
|
184
|
+
|
185
|
+
# no assertion, just make sure that querying works
|
186
|
+
end
|
187
|
+
end
|
data/test/gicon_test.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# Project: google4r/maps
|
2
|
+
# File: /test/maps_test.rb
|
3
|
+
# Author: Manuel Holtgrewe <purestorm at ggnore dot net>
|
4
|
+
# Copyright: (c) 2007 by Manuel Holtgrewe
|
5
|
+
# License: MIT License as follows:
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
# a copy of this software and associated documentation files (the
|
9
|
+
# "Software"), to deal in the Software without restriction, including
|
10
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
# distribute, sublicense, and/or sell copies of the Software, and to permit
|
12
|
+
# persons to whom the Software is furnished to do so, subject to the
|
13
|
+
# following conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be included
|
16
|
+
# in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
19
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
21
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
22
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
23
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
24
|
+
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
27
|
+
|
28
|
+
require 'google4r/maps'
|
29
|
+
|
30
|
+
# Runs tests for the Google4R::Maps::GIcon class.
|
31
|
+
class GIconClass < Test::Unit::TestCase
|
32
|
+
def test_creator_should_work_correctly
|
33
|
+
icon = Google4R::Maps::GIcon.new
|
34
|
+
assert_equal false, icon.copy
|
35
|
+
|
36
|
+
icon = Google4R::Maps::GIcon.new(true)
|
37
|
+
assert_equal true, icon.copy
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_to_js_should_work_correctly_with_default_values
|
41
|
+
expected = %Q{function() {
|
42
|
+
var icon = new GIcon();
|
43
|
+
|
44
|
+
return icon;
|
45
|
+
}}
|
46
|
+
|
47
|
+
icon = Google4R::Maps::GIcon.new
|
48
|
+
assert_equal expected, icon.to_js
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_to_js_should_work_with_copy_icon_and_default_values
|
52
|
+
expected = %Q{function() {
|
53
|
+
var icon = new GIcon(G_DEFAULT_ICON);
|
54
|
+
|
55
|
+
return icon;
|
56
|
+
}}
|
57
|
+
|
58
|
+
icon = Google4R::Maps::GIcon.new(true)
|
59
|
+
assert_equal expected, icon.to_js
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_to_js_should_work_correctly_with_all_values_set
|
63
|
+
expected = %Q{function() {
|
64
|
+
var icon = new GIcon();
|
65
|
+
icon.image = "image";
|
66
|
+
icon.shadow = "shadow";
|
67
|
+
icon.printImage = "print image";
|
68
|
+
icon.printShadow = "print shadow";
|
69
|
+
icon.transparent = "transparent";
|
70
|
+
icon.iconSize = new GSize(1, 2);
|
71
|
+
icon.shadowSize = new GSize(3, 4);
|
72
|
+
icon.iconAnchor = new GPoint(5, 6);
|
73
|
+
icon.infoWindowAnchor = new GPoint(7, 8);
|
74
|
+
icon.imageMap = [ 10, 11, 12, 13, 14, 15 ];
|
75
|
+
|
76
|
+
return icon;
|
77
|
+
}}
|
78
|
+
|
79
|
+
icon = Google4R::Maps::GIcon.new
|
80
|
+
icon.image = 'image'
|
81
|
+
icon.shadow = 'shadow'
|
82
|
+
icon.print_image = 'print image'
|
83
|
+
icon.print_shadow = 'print shadow'
|
84
|
+
icon.transparent = 'transparent'
|
85
|
+
icon.icon_size = [ 1, 2 ]
|
86
|
+
icon.shadow_size = [ 3, 4 ]
|
87
|
+
icon.icon_anchor = [ 5, 6 ]
|
88
|
+
icon.info_window_anchor = [ 7, 8 ]
|
89
|
+
icon.image_map = [ [10,11], [12,13], [14,15] ]
|
90
|
+
|
91
|
+
assert_equal expected, icon.to_js
|
92
|
+
end
|
93
|
+
end
|
data/test/gmap2_test.rb
ADDED
@@ -0,0 +1,304 @@
|
|
1
|
+
# Project: google4r/maps
|
2
|
+
# File: /test/gmap_test.rb
|
3
|
+
# Author: Manuel Holtgrewe <purestorm at ggnore dot net>
|
4
|
+
# Copyright: (c) 2007 by Manuel Holtgrewe
|
5
|
+
# License: MIT License as follows:
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
# a copy of this software and associated documentation files (the
|
9
|
+
# "Software"), to deal in the Software without restriction, including
|
10
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
# distribute, sublicense, and/or sell copies of the Software, and to permit
|
12
|
+
# persons to whom the Software is furnished to do so, subject to the
|
13
|
+
# following conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be included
|
16
|
+
# in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
19
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
21
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
22
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
23
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
24
|
+
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
27
|
+
|
28
|
+
require 'google4r/maps'
|
29
|
+
|
30
|
+
# Runs tests for the Google4R::Maps::GMap2 class.
|
31
|
+
class GMap2Test < Test::Unit::TestCase
|
32
|
+
def test_attributes_are_correctly_set_in_creator
|
33
|
+
map = Google4R::Maps::GMap2.new("var name", "dom id")
|
34
|
+
|
35
|
+
assert_equal "dom id", map.div_id
|
36
|
+
assert_equal "var name", map.name
|
37
|
+
|
38
|
+
assert_equal [], map.icons
|
39
|
+
assert_equal [], map.markers
|
40
|
+
assert_equal [ :large_map, :scale, :map_type ], map.controls
|
41
|
+
assert_equal :normal, map.map_type
|
42
|
+
assert_equal true, map.dragging_enabled
|
43
|
+
assert_equal true, map.info_window_enabled
|
44
|
+
assert_equal false, map.double_click_zoom_enabled
|
45
|
+
assert_equal :auto, map.center
|
46
|
+
assert_equal :auto, map.zoom
|
47
|
+
assert_equal nil, map.onload_js
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_create_marker_works
|
51
|
+
map = Google4R::Maps::GMap2.new("var name", "dom id")
|
52
|
+
|
53
|
+
i = map.markers.length
|
54
|
+
maybe_marker = map.create_marker([1,2])
|
55
|
+
|
56
|
+
assert_kind_of Google4R::Maps::GMarker, maybe_marker
|
57
|
+
assert_equal [1, 2], maybe_marker.point
|
58
|
+
assert map.markers.include?(maybe_marker)
|
59
|
+
assert_equal i+1, map.markers.length
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_create_icon_works
|
63
|
+
map = Google4R::Maps::GMap2.new("var name", "dom id")
|
64
|
+
|
65
|
+
i = map.icons.length
|
66
|
+
maybe_icon = map.create_icon()
|
67
|
+
|
68
|
+
assert_kind_of Google4R::Maps::GIcon, maybe_icon
|
69
|
+
assert_equal false, maybe_icon.copy
|
70
|
+
assert map.icons.include?(maybe_icon)
|
71
|
+
assert_equal i+1, map.icons.length
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_to_html_works_correctly_with_default_values
|
75
|
+
Google4R::Maps::GMap2.any_instance.stubs(:to_js).returns("<gmap 2 js>")
|
76
|
+
|
77
|
+
map = Google4R::Maps::GMap2.new("var name", "dom id")
|
78
|
+
|
79
|
+
expected = %Q{<div id="dom id"></div>
|
80
|
+
<script type="text/javascript" charset="utf-8">
|
81
|
+
//<![CDATA[
|
82
|
+
/* Create a variable to hold the GMap2 instance and the icons in. */
|
83
|
+
var var name;
|
84
|
+
var var name_icons;
|
85
|
+
|
86
|
+
function var name_loader() {
|
87
|
+
<gmap 2 js>
|
88
|
+
}
|
89
|
+
|
90
|
+
if (window.addEventListener) { /* not MSIE */
|
91
|
+
window.addEventListener('load', function() { var name_loader(); }, false);
|
92
|
+
} else { /* MSIE */
|
93
|
+
window.attachEvent('onload', function() { var name_loader(); }, false);
|
94
|
+
}
|
95
|
+
|
96
|
+
/* Optional Javascript */
|
97
|
+
if (window.addEventListener) { /* not MSIE */
|
98
|
+
window.addEventListener('unload', function() { GUnload(); }, false);
|
99
|
+
} else { /* MSIE */
|
100
|
+
window.attachEvent('onunload', function() { GUnload(); }, false);
|
101
|
+
}
|
102
|
+
// ]]>
|
103
|
+
</script>}
|
104
|
+
|
105
|
+
assert_equal expected, map.to_html
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_to_html_works_correctly_with_no_gunload_handler
|
109
|
+
Google4R::Maps::GMap2.any_instance.stubs(:to_js).returns("<gmap 2 js>")
|
110
|
+
|
111
|
+
map = Google4R::Maps::GMap2.new("var name", "dom id")
|
112
|
+
map.options[:register_gunload] = false
|
113
|
+
|
114
|
+
expected = %Q{<div id="dom id"></div>
|
115
|
+
<script type="text/javascript" charset="utf-8">
|
116
|
+
//<![CDATA[
|
117
|
+
/* Create a variable to hold the GMap2 instance and the icons in. */
|
118
|
+
var var name;
|
119
|
+
var var name_icons;
|
120
|
+
|
121
|
+
function var name_loader() {
|
122
|
+
<gmap 2 js>
|
123
|
+
}
|
124
|
+
|
125
|
+
if (window.addEventListener) { /* not MSIE */
|
126
|
+
window.addEventListener('load', function() { var name_loader(); }, false);
|
127
|
+
} else { /* MSIE */
|
128
|
+
window.attachEvent('onload', function() { var name_loader(); }, false);
|
129
|
+
}
|
130
|
+
|
131
|
+
/* Optional Javascript */
|
132
|
+
// ]]>
|
133
|
+
</script>}
|
134
|
+
|
135
|
+
assert_equal expected, map.to_html
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
def test_to_js_works_correctly_with_default_values_and_without_icons_or_markers
|
140
|
+
map = Google4R::Maps::GMap2.new("var_name", "dom id")
|
141
|
+
|
142
|
+
expected = %Q{/* Create GMap2 instance. */
|
143
|
+
var_name = new GMap2(document.getElementById("dom id"), { });
|
144
|
+
var_name.setCenter(new GLatLng(0, 0), #{Google4R::Maps::GMap2::DEFAULT_ZOOM});
|
145
|
+
|
146
|
+
/* Set map options. */
|
147
|
+
var_name.setMapType(G_NORMAL_MAP);
|
148
|
+
var_name.enableDragging();
|
149
|
+
var_name.enableInfoWindow();
|
150
|
+
var_name.disableDoubleClickZoom();
|
151
|
+
var_name.disableContinuousZoom();
|
152
|
+
|
153
|
+
/* Add controls to the map. */
|
154
|
+
var_name.addControl(new GLargeMapControl());
|
155
|
+
var_name.addControl(new GScaleControl());
|
156
|
+
var_name.addControl(new GMapTypeControl());
|
157
|
+
|
158
|
+
/* Create global variable holding all icons. */
|
159
|
+
var_name_icons = new Array();
|
160
|
+
|
161
|
+
/* Add markers to the map. */
|
162
|
+
|
163
|
+
/* User supplied Javascript */
|
164
|
+
}
|
165
|
+
|
166
|
+
assert_equal expected, map.to_js
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_to_js_works_correctly_with_default_values
|
170
|
+
map = Google4R::Maps::GMap2.new("var_name", "dom id")
|
171
|
+
|
172
|
+
map.icons << mock()
|
173
|
+
map.icons.last.stubs(:to_js).returns('<mock icon #1 js>')
|
174
|
+
map.icons << mock()
|
175
|
+
map.icons.last.stubs(:to_js).returns('<mock icon #2 js>')
|
176
|
+
map.markers << mock()
|
177
|
+
map.markers.last.stubs(:point).returns([ 10, 10 ])
|
178
|
+
map.markers.last.stubs(:icon).returns(map.icons[1])
|
179
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #1 js>')
|
180
|
+
map.markers << mock()
|
181
|
+
map.markers.last.stubs(:point).returns([ 20, 20 ])
|
182
|
+
map.markers.last.stubs(:icon).returns(map.icons[0])
|
183
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #2 js>')
|
184
|
+
map.markers << mock()
|
185
|
+
map.markers.last.stubs(:point).returns([ 10, 10 ])
|
186
|
+
map.markers.last.stubs(:icon).returns(nil)
|
187
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #3 js>')
|
188
|
+
|
189
|
+
expected = %Q{/* Create GMap2 instance. */
|
190
|
+
var_name = new GMap2(document.getElementById("dom id"), { });
|
191
|
+
var_name.setCenter(new GLatLng(15, 15), var_name.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(10, 10), new GLatLng(20, 20))));
|
192
|
+
|
193
|
+
/* Set map options. */
|
194
|
+
var_name.setMapType(G_NORMAL_MAP);
|
195
|
+
var_name.enableDragging();
|
196
|
+
var_name.enableInfoWindow();
|
197
|
+
var_name.disableDoubleClickZoom();
|
198
|
+
var_name.disableContinuousZoom();
|
199
|
+
|
200
|
+
/* Add controls to the map. */
|
201
|
+
var_name.addControl(new GLargeMapControl());
|
202
|
+
var_name.addControl(new GScaleControl());
|
203
|
+
var_name.addControl(new GMapTypeControl());
|
204
|
+
|
205
|
+
/* Create global variable holding all icons. */
|
206
|
+
var_name_icons = new Array();
|
207
|
+
var_name_icons.push(<mock icon #1 js>());
|
208
|
+
var_name_icons.push(<mock icon #2 js>());
|
209
|
+
|
210
|
+
/* Add markers to the map. */
|
211
|
+
var_name.addOverlay(<mock marker #1 js>(var_name_icons[1]));
|
212
|
+
var_name.addOverlay(<mock marker #2 js>(var_name_icons[0]));
|
213
|
+
var_name.addOverlay(<mock marker #3 js>());
|
214
|
+
|
215
|
+
/* User supplied Javascript */
|
216
|
+
}
|
217
|
+
|
218
|
+
assert_equal expected, map.to_js
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_to_js_works_correctly_with_changed_values
|
222
|
+
map = Google4R::Maps::GMap2.new("var_name", "dom id")
|
223
|
+
map.center = [-122.083739, 37.423021 ]
|
224
|
+
map.continuous_zoom_enabled = true
|
225
|
+
map.controls = [ :small_map, :small_zoom ]
|
226
|
+
map.div_id = "other dom id"
|
227
|
+
map.double_click_zoom_enabled = true
|
228
|
+
map.draggable_cursor = 'draggable cursor'
|
229
|
+
map.dragging_cursor = 'dragging cursor'
|
230
|
+
map.dragging_enabled = false
|
231
|
+
map.info_window_enabled = false
|
232
|
+
map.map_type = :hybrid
|
233
|
+
map.name = "other_var_name"
|
234
|
+
map.size = [ 100, 200 ]
|
235
|
+
map.zoom = 10
|
236
|
+
|
237
|
+
map.icons << mock()
|
238
|
+
map.icons.last.stubs(:to_js).returns('<mock icon #1 js>')
|
239
|
+
map.icons << mock()
|
240
|
+
map.icons.last.stubs(:to_js).returns('<mock icon #2 js>')
|
241
|
+
map.markers << mock()
|
242
|
+
map.markers.last.stubs(:icon).returns(map.icons[1])
|
243
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #1 js>')
|
244
|
+
map.markers << mock()
|
245
|
+
map.markers.last.stubs(:icon).returns(map.icons[0])
|
246
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #2 js>')
|
247
|
+
map.markers << mock()
|
248
|
+
map.markers.last.stubs(:icon).returns(nil)
|
249
|
+
map.markers.last.stubs(:to_js).returns('<mock marker #3 js>')
|
250
|
+
|
251
|
+
expected = %Q{/* Create GMap2 instance. */
|
252
|
+
other_var_name = new GMap2(document.getElementById("other dom id"), { draggableCursor: "draggable cursor", draggingCursor: "dragging cursor", size: new GSize(100, 200) });
|
253
|
+
other_var_name.setCenter(new GLatLng(#{map.center[0]}, #{map.center[1]}), #{map.zoom});
|
254
|
+
|
255
|
+
/* Set map options. */
|
256
|
+
other_var_name.setMapType(G_HYBRID_MAP);
|
257
|
+
other_var_name.disableDragging();
|
258
|
+
other_var_name.disableInfoWindow();
|
259
|
+
other_var_name.enableDoubleClickZoom();
|
260
|
+
other_var_name.enableContinuousZoom();
|
261
|
+
|
262
|
+
/* Add controls to the map. */
|
263
|
+
other_var_name.addControl(new GSmallMapControl());
|
264
|
+
other_var_name.addControl(new GSmallZoomControl());
|
265
|
+
|
266
|
+
/* Create global variable holding all icons. */
|
267
|
+
other_var_name_icons = new Array();
|
268
|
+
other_var_name_icons.push(<mock icon #1 js>());
|
269
|
+
other_var_name_icons.push(<mock icon #2 js>());
|
270
|
+
|
271
|
+
/* Add markers to the map. */
|
272
|
+
other_var_name.addOverlay(<mock marker #1 js>(other_var_name_icons[1]));
|
273
|
+
other_var_name.addOverlay(<mock marker #2 js>(other_var_name_icons[0]));
|
274
|
+
other_var_name.addOverlay(<mock marker #3 js>());
|
275
|
+
|
276
|
+
/* User supplied Javascript */
|
277
|
+
}
|
278
|
+
|
279
|
+
assert_equal expected, map.to_js
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_center_auto_works_correctly
|
283
|
+
map = Google4R::Maps::GMap2.new("var_name", "dom id")
|
284
|
+
map.center = :auto
|
285
|
+
|
286
|
+
map.create_marker([10, 10])
|
287
|
+
map.create_marker([20, 20])
|
288
|
+
|
289
|
+
result = map.to_js
|
290
|
+
assert_not_nil result.index("var_name.setCenter(new GLatLng(15, 15)"), "result is #{result.inspect}"
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_zoom_auto_works_correctly
|
294
|
+
map = Google4R::Maps::GMap2.new("var_name", "dom id")
|
295
|
+
map.center = [ 0, 0 ]
|
296
|
+
map.zoom = :auto
|
297
|
+
|
298
|
+
map.create_marker([10, 10])
|
299
|
+
map.create_marker([20, 20])
|
300
|
+
|
301
|
+
result = map.to_js
|
302
|
+
assert_not_nil result.index("var_name.setCenter(new GLatLng(0, 0), var_name.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(10, 10), new GLatLng(20, 20))))"), "result is #{result.inspect}"
|
303
|
+
end
|
304
|
+
end
|