Make geometries event targets
Previously, the tests were using eql to make assertions about matching geometries. This is inappropriate for structures with circular references (as with goog.events.EventTarget);
This commit is contained in:
+25
-1
@@ -1,6 +1,9 @@
|
|||||||
goog.provide('ol.geom.Geometry');
|
goog.provide('ol.geom.Geometry');
|
||||||
|
goog.provide('ol.geom.GeometryEvent');
|
||||||
goog.provide('ol.geom.GeometryType');
|
goog.provide('ol.geom.GeometryType');
|
||||||
|
|
||||||
|
goog.require('goog.events.Event');
|
||||||
|
goog.require('goog.events.EventTarget');
|
||||||
goog.require('ol.Extent');
|
goog.require('ol.Extent');
|
||||||
goog.require('ol.TransformFunction');
|
goog.require('ol.TransformFunction');
|
||||||
|
|
||||||
@@ -8,8 +11,12 @@ goog.require('ol.TransformFunction');
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @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;
|
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.
|
* Geometry types.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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');
|
||||||
@@ -73,13 +73,15 @@ describe('ol.parser.GeoJSON', function() {
|
|||||||
it('encodes point', function() {
|
it('encodes point', function() {
|
||||||
var point = new ol.geom.Point([10, 20]);
|
var point = new ol.geom.Point([10, 20]);
|
||||||
var geojson = parser.write(point);
|
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() {
|
it('encodes linestring', function() {
|
||||||
var linestring = new ol.geom.LineString([[10, 20], [30, 40]]);
|
var linestring = new ol.geom.LineString([[10, 20], [30, 40]]);
|
||||||
var geojson = parser.write(linestring);
|
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() {
|
it('encodes polygon', function() {
|
||||||
@@ -88,7 +90,8 @@ describe('ol.parser.GeoJSON', function() {
|
|||||||
inner2 = [[8, 8], [9, 8], [9, 9], [8, 9], [8, 8]];
|
inner2 = [[8, 8], [9, 8], [9, 9], [8, 9], [8, 8]];
|
||||||
var polygon = new ol.geom.Polygon([outer, inner1, inner2]);
|
var polygon = new ol.geom.Polygon([outer, inner1, inner2]);
|
||||||
var geojson = parser.write(polygon);
|
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() {
|
it('encodes geometry collection', function() {
|
||||||
@@ -97,9 +100,12 @@ describe('ol.parser.GeoJSON', function() {
|
|||||||
new ol.geom.LineString([[30, 40], [50, 60]])
|
new ol.geom.LineString([[30, 40], [50, 60]])
|
||||||
]);
|
]);
|
||||||
var geojson = parser.write(collection);
|
var geojson = parser.write(collection);
|
||||||
// surprised to see read return an Array of geometries instead of
|
var got = parser.read(geojson);
|
||||||
// a true ol.geom.GeometryCollection, so compare collection.components
|
expect(collection.components.length).to.equal(got.length);
|
||||||
expect(collection.components).to.eql(parser.read(geojson));
|
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() {
|
it('encodes feature collection', function() {
|
||||||
@@ -107,9 +113,18 @@ describe('ol.parser.GeoJSON', function() {
|
|||||||
array = parser.read(str);
|
array = parser.read(str);
|
||||||
var geojson = parser.write(array);
|
var geojson = parser.write(array);
|
||||||
var result = parser.read(geojson);
|
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) {
|
for (var i = 0, ii = array.length; i < ii; ++i) {
|
||||||
expect(array[i].getGeometry()).to.eql(result[i].getGeometry());
|
got = array[i];
|
||||||
expect(array[i].getAttributes()).to.eql(result[i].getAttributes());
|
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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user