diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index 189f347421..9578c7cd5b 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -1,6 +1,9 @@ goog.provide('ol.geom.Geometry'); +goog.provide('ol.geom.GeometryEvent'); goog.provide('ol.geom.GeometryType'); +goog.require('goog.events.Event'); +goog.require('goog.events.EventTarget'); goog.require('ol.Extent'); goog.require('ol.TransformFunction'); @@ -8,8 +11,12 @@ goog.require('ol.TransformFunction'); /** * @constructor + * @extends {goog.events.EventTarget} */ -ol.geom.Geometry = function() {}; +ol.geom.Geometry = function() { + goog.base(this); +}; +goog.inherits(ol.geom.Geometry, goog.events.EventTarget); /** @@ -48,6 +55,23 @@ ol.geom.Geometry.prototype.getType = goog.abstractMethod; ol.geom.Geometry.prototype.transform = goog.abstractMethod; + +/** + * Constructor for geometry events. + * @constructor + * @extends {goog.events.Event} + * @param {string} type Event type. + * @param {ol.geom.Geometry} target The target geometry. + * @param {ol.Extent} oldExtent The previous geometry extent. + */ +ol.geom.GeometryEvent = function(type, target, oldExtent) { + goog.base(this, type, target); + + this.oldExtent = oldExtent; +}; +goog.inherits(ol.geom.GeometryEvent, goog.events.Event); + + /** * Geometry types. * diff --git a/test/spec/ol/geom/geometry.test.js b/test/spec/ol/geom/geometry.test.js new file mode 100644 index 0000000000..71da801eee --- /dev/null +++ b/test/spec/ol/geom/geometry.test.js @@ -0,0 +1,37 @@ +goog.provide('ol.test.geom.Geometry'); + +describe('ol.geom.Geometry', function() { + + describe('constructor', function() { + it('creates a new geometry', function() { + var geom = new ol.geom.Geometry(); + expect(geom).to.be.a(ol.geom.Geometry); + expect(geom).to.be.a(goog.events.EventTarget); + }); + }); + +}); + +describe('ol.geom.GeometryEvent', function() { + + describe('constructor', function() { + + it('creates a new event', function() { + var point = new ol.geom.Point([1, 2]); + var bounds = point.getBounds(); + var evt = new ol.geom.GeometryEvent('change', point, bounds); + expect(evt).to.be.a(ol.geom.GeometryEvent); + expect(evt).to.be.a(goog.events.Event); + expect(evt.target).to.be(point); + expect(evt.oldExtent).to.be(bounds); + }); + + }); + +}); + +goog.require('goog.events.Event'); +goog.require('goog.events.EventTarget'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryEvent'); +goog.require('ol.geom.Point'); diff --git a/test/spec/ol/parser/geojson.test.js b/test/spec/ol/parser/geojson.test.js index 281e21eea7..ade32cbbbd 100644 --- a/test/spec/ol/parser/geojson.test.js +++ b/test/spec/ol/parser/geojson.test.js @@ -73,13 +73,15 @@ describe('ol.parser.GeoJSON', function() { it('encodes point', function() { var point = new ol.geom.Point([10, 20]); var geojson = parser.write(point); - expect(point).to.eql(parser.read(geojson)); + expect(point.getCoordinates()).to.eql( + parser.read(geojson).getCoordinates()); }); it('encodes linestring', function() { var linestring = new ol.geom.LineString([[10, 20], [30, 40]]); var geojson = parser.write(linestring); - expect(linestring).to.eql(parser.read(geojson)); + expect(linestring.getCoordinates()).to.eql( + parser.read(geojson).getCoordinates()); }); it('encodes polygon', function() { @@ -88,7 +90,8 @@ describe('ol.parser.GeoJSON', function() { inner2 = [[8, 8], [9, 8], [9, 9], [8, 9], [8, 8]]; var polygon = new ol.geom.Polygon([outer, inner1, inner2]); var geojson = parser.write(polygon); - expect(polygon).to.eql(parser.read(geojson)); + expect(polygon.getCoordinates()).to.eql( + parser.read(geojson).getCoordinates()); }); it('encodes geometry collection', function() { @@ -97,9 +100,12 @@ describe('ol.parser.GeoJSON', function() { new ol.geom.LineString([[30, 40], [50, 60]]) ]); var geojson = parser.write(collection); - // surprised to see read return an Array of geometries instead of - // a true ol.geom.GeometryCollection, so compare collection.components - expect(collection.components).to.eql(parser.read(geojson)); + var got = parser.read(geojson); + expect(collection.components.length).to.equal(got.length); + for (var i = 0, ii = collection.components.length; i < ii; ++i) { + expect(collection.components[i].getCoordinates()).to.eql( + got[i].getCoordinates()); + } }); it('encodes feature collection', function() { @@ -107,9 +113,18 @@ describe('ol.parser.GeoJSON', function() { array = parser.read(str); var geojson = parser.write(array); var result = parser.read(geojson); + expect(array.length).to.equal(result.length); + var got, exp, gotAttr, expAttr; for (var i = 0, ii = array.length; i < ii; ++i) { - expect(array[i].getGeometry()).to.eql(result[i].getGeometry()); - expect(array[i].getAttributes()).to.eql(result[i].getAttributes()); + got = array[i]; + exp = result[i]; + expect(got.getGeometry().getCoordinates()).to.eql( + exp.getGeometry().getCoordinates()); + gotAttr = got.getAttributes(); + delete gotAttr.geometry; + expAttr = exp.getAttributes(); + delete expAttr.geometry; + expect(gotAttr).to.eql(expAttr); } });