describe("Creating a map", function() {
|
var basic_map, advanced_map, map_with_events, map_with_custom_controls;
|
|
it("should throw an error if element is not defined", function() {
|
expect(function() { new GMaps({}); }).toThrow(new Error('No element defined.'));
|
});
|
|
describe("With basic options", function() {
|
beforeEach(function() {
|
basic_map = basic_map || new GMaps({
|
el : '#basic-map',
|
lat: -12.0433,
|
lng: -77.0283,
|
zoom: 12
|
});
|
});
|
|
it("should create a GMaps object", function() {
|
expect(basic_map).toBeDefined();
|
});
|
|
it("should have centered the map at the initial coordinates", function() {
|
var lat = basic_map.getCenter().lat();
|
var lng = basic_map.getCenter().lng();
|
|
expect(lat).toEqual(-12.0433);
|
expect(lng).toEqual(-77.0283);
|
});
|
|
it("should have the correct zoom", function() {
|
expect(basic_map.getZoom()).toEqual(12);
|
});
|
});
|
|
describe("With advanced controls", function() {
|
beforeEach(function() {
|
advanced_map = advanced_map || new GMaps({
|
el : '#advanced-map',
|
lat: -12.0433,
|
lng: -77.0283,
|
zoomControl : true,
|
panControl : false,
|
streetViewControl : false,
|
mapTypeControl: false,
|
overviewMapControl: false
|
});
|
});
|
|
it("should show the defined controls", function() {
|
expect(advanced_map.map.zoomControl).toBeTruthy();
|
expect(advanced_map.map.panControl).toBeFalsy();
|
expect(advanced_map.map.streetViewControl).toBeFalsy();
|
expect(advanced_map.map.mapTypeControl).toBeFalsy();
|
expect(advanced_map.map.overviewMapControl).toBeFalsy();
|
});
|
});
|
|
describe("With events", function() {
|
var callbacks, current_zoom = 0, current_center = null;
|
|
beforeEach(function() {
|
callbacks = {
|
onclick : function(e) {
|
var lat = e.latLng.lat();
|
var lng = e.latLng.lng();
|
|
map_with_events.addMarker({
|
lat : lat,
|
lng : lng,
|
title : 'New Marker'
|
});
|
},
|
onzoomchanged : function() {
|
console.log('onzoomchanged');
|
current_zoom = this.getZoom();
|
},
|
oncenterchanged : function() {
|
console.log('oncenterchanged');
|
current_center = this.getCenter();
|
}
|
};
|
|
spyOn(callbacks, 'onclick').andCallThrough();
|
spyOn(callbacks, 'onzoomchanged').andCallThrough();
|
spyOn(callbacks, 'oncenterchanged').andCallThrough();
|
|
map_with_events = map_with_events || new GMaps({
|
el : '#map-with-events',
|
lat : -12.0433,
|
lng : -77.0283,
|
click : callbacks.onclick,
|
zoom_changed : callbacks.onzoomchanged,
|
center_changed : callbacks.oncenterchanged
|
});
|
});
|
|
it("should respond to zoom_changed event", function() {
|
map_with_events.map.setZoom(16);
|
|
expect(callbacks.onzoomchanged).toHaveBeenCalled();
|
expect(current_zoom).toEqual(16);
|
});
|
|
it("should respond to center_changed event", function() {
|
map_with_events.map.setCenter(new google.maps.LatLng(-12.0907, -77.0227));
|
|
// Fix for floating-point bug
|
var lat = parseFloat(current_center.lat().toFixed(4));
|
var lng = parseFloat(current_center.lng().toFixed(4));
|
|
expect(callbacks.oncenterchanged).toHaveBeenCalled();
|
expect(lat).toEqual(-12.0907);
|
expect(lng).toEqual(-77.0227);
|
});
|
|
it("should respond to click event", function() {
|
google.maps.event.trigger(map_with_events.map, 'click', {
|
latLng : new google.maps.LatLng(-12.0433, -77.0283)
|
});
|
|
expect(callbacks.onclick).toHaveBeenCalled();
|
expect(map_with_events.markers.length).toEqual(1);
|
});
|
|
afterEach(function() {
|
document.getElementById('map-with-events').innerHTML = '';
|
map_with_events = null;
|
});
|
});
|
|
describe("With custom controls", function() {
|
var callbacks, markers_in_map = 0;
|
|
beforeEach(function() {
|
callbacks = {
|
onclick : function() {
|
map_with_custom_controls.addMarker({
|
lat : map_with_custom_controls.getCenter().lat(),
|
lng : map_with_custom_controls.getCenter().lng()
|
});
|
}
|
}
|
|
spyOn(callbacks, 'onclick').andCallThrough();
|
|
map_with_custom_controls = new GMaps({
|
el : '#map-with-custom-controls',
|
lat : -12.0433,
|
lng : -77.0283
|
});
|
|
map_with_custom_controls.addControl({
|
position : 'top_right',
|
content : 'Add marker at the center',
|
style : {
|
margin: '5px',
|
padding: '1px 6px',
|
border: 'solid 1px #717B87',
|
background: '#fff'
|
},
|
events : {
|
click: callbacks.onclick
|
}
|
});
|
});
|
|
it("should add the control to the controls collection", function() {
|
expect(map_with_custom_controls.controls.length).toEqual(1);
|
});
|
|
it("should respond to click event attached to the custom control", function() {
|
google.maps.event.trigger(map_with_custom_controls.controls[0], 'click');
|
|
expect(callbacks.onclick).toHaveBeenCalled();
|
expect(map_with_custom_controls.markers.length).toEqual(1);
|
});
|
});
|
});
|