lib/leaflet/spec/suites/layer/GeoJSONSpec.js in leaflet-js-0.6.beta4 vs lib/leaflet/spec/suites/layer/GeoJSONSpec.js in leaflet-js-0.7.0
- old
+ new
@@ -1,86 +1,282 @@
+describe("L.GeoJSON", function () {
+ describe("addData", function () {
+ var geoJSON = {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [20, 10, 5]
+ }
+ };
+
+ it("sets feature property on member layers", function () {
+ var layer = new L.GeoJSON();
+ layer.addData(geoJSON);
+ expect(layer.getLayers()[0].feature).to.eql(geoJSON);
+ });
+
+ it("normalizes a geometry to a Feature", function () {
+ var layer = new L.GeoJSON();
+ layer.addData(geoJSON.geometry);
+ expect(layer.getLayers()[0].feature).to.eql(geoJSON);
+ });
+ });
+});
+
describe("L.Marker#toGeoJSON", function () {
- it("returns a Point object", function () {
+ it("returns a 2D Point object", function () {
var marker = new L.Marker([10, 20]);
- expect(marker.toGeoJSON()).to.eql({
+ expect(marker.toGeoJSON().geometry).to.eql({
type: 'Point',
coordinates: [20, 10]
});
});
+
+ it("returns a 3D Point object", function () {
+ var marker = new L.Marker([10, 20, 30]);
+ expect(marker.toGeoJSON().geometry).to.eql({
+ type: 'Point',
+ coordinates: [20, 10, 30]
+ });
+ });
});
+describe("L.Circle#toGeoJSON", function () {
+ it("returns a 2D Point object", function () {
+ var circle = new L.Circle([10, 20], 100);
+ expect(circle.toGeoJSON().geometry).to.eql({
+ type: 'Point',
+ coordinates: [20, 10]
+ });
+ });
+
+ it("returns a 3D Point object", function () {
+ var circle = new L.Circle([10, 20, 30], 100);
+ expect(circle.toGeoJSON().geometry).to.eql({
+ type: 'Point',
+ coordinates: [20, 10, 30]
+ });
+ });
+});
+
+describe("L.CircleMarker#toGeoJSON", function () {
+ it("returns a 2D Point object", function () {
+ var marker = new L.CircleMarker([10, 20]);
+ expect(marker.toGeoJSON().geometry).to.eql({
+ type: 'Point',
+ coordinates: [20, 10]
+ });
+ });
+
+ it("returns a 3D Point object", function () {
+ var marker = new L.CircleMarker([10, 20, 30]);
+ expect(marker.toGeoJSON().geometry).to.eql({
+ type: 'Point',
+ coordinates: [20, 10, 30]
+ });
+ });
+});
+
describe("L.Polyline#toGeoJSON", function () {
- it("returns a LineString object", function () {
+ it("returns a 2D LineString object", function () {
var polyline = new L.Polyline([[10, 20], [2, 5]]);
- expect(polyline.toGeoJSON()).to.eql({
+ expect(polyline.toGeoJSON().geometry).to.eql({
type: 'LineString',
coordinates: [[20, 10], [5, 2]]
});
});
+
+ it("returns a 3D LineString object", function () {
+ var polyline = new L.Polyline([[10, 20, 30], [2, 5, 10]]);
+ expect(polyline.toGeoJSON().geometry).to.eql({
+ type: 'LineString',
+ coordinates: [[20, 10, 30], [5, 2, 10]]
+ });
+ });
});
describe("L.MultiPolyline#toGeoJSON", function () {
- it("returns a MultiLineString object", function () {
+ it("returns a 2D MultiLineString object", function () {
var multiPolyline = new L.MultiPolyline([[[10, 20], [2, 5]], [[1, 2], [3, 4]]]);
- expect(multiPolyline.toGeoJSON()).to.eql({
+ expect(multiPolyline.toGeoJSON().geometry).to.eql({
type: 'MultiLineString',
coordinates: [
[[20, 10], [5, 2]],
[[2, 1], [4, 3]]
]
});
});
+
+ it("returns a 3D MultiLineString object", function () {
+ var multiPolyline = new L.MultiPolyline([[[10, 20, 30], [2, 5, 10]], [[1, 2, 3], [4, 5, 6]]]);
+ expect(multiPolyline.toGeoJSON().geometry).to.eql({
+ type: 'MultiLineString',
+ coordinates: [
+ [[20, 10, 30], [5, 2, 10]],
+ [[2, 1, 3], [5, 4, 6]]
+ ]
+ });
+ });
});
describe("L.Polygon#toGeoJSON", function () {
- it("returns a Polygon object (no holes)", function () {
+ it("returns a 2D Polygon object (no holes)", function () {
var polygon = new L.Polygon([[1, 2], [3, 4], [5, 6]]);
- expect(polygon.toGeoJSON()).to.eql({
+ expect(polygon.toGeoJSON().geometry).to.eql({
type: 'Polygon',
coordinates: [[[2, 1], [4, 3], [6, 5], [2, 1]]]
});
});
- it("returns a Polygon object (with holes)", function () {
+ it("returns a 3D Polygon object (no holes)", function () {
+ var polygon = new L.Polygon([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
+ expect(polygon.toGeoJSON().geometry).to.eql({
+ type: 'Polygon',
+ coordinates: [[[2, 1, 3], [5, 4, 6], [8, 7, 9], [2, 1, 3]]]
+ });
+ });
+
+ it("returns a 2D Polygon object (with holes)", function () {
var polygon = new L.Polygon([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]);
- expect(polygon.toGeoJSON()).to.eql({
+ expect(polygon.toGeoJSON().geometry).to.eql({
type: 'Polygon',
coordinates: [
[[2, 1], [4, 3], [6, 5], [2, 1]],
[[8, 7], [10, 9], [12, 11], [8, 7]]
]
});
});
+
+ it("returns a 3D Polygon object (with holes)", function () {
+ var polygon = new L.Polygon([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]);
+ expect(polygon.toGeoJSON().geometry).to.eql({
+ type: 'Polygon',
+ coordinates: [
+ [[2, 1, 3], [5, 4, 6], [8, 7, 9], [2, 1, 3]],
+ [[11, 10, 12], [14, 13, 15], [17, 16, 18], [11, 10, 12]]
+ ]
+ });
+ });
});
describe("L.MultiPolygon#toGeoJSON", function () {
- it("returns a MultiPolygon object", function () {
+ it("returns a 2D MultiPolygon object", function () {
var multiPolygon = new L.MultiPolygon([[[1, 2], [3, 4], [5, 6]]]);
- expect(multiPolygon.toGeoJSON()).to.eql({
+ expect(multiPolygon.toGeoJSON().geometry).to.eql({
type: 'MultiPolygon',
coordinates: [
[[[2, 1], [4, 3], [6, 5], [2, 1]]]
]
});
});
+
+ it("returns a 3D MultiPolygon object", function () {
+ var multiPolygon = new L.MultiPolygon([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]);
+ expect(multiPolygon.toGeoJSON().geometry).to.eql({
+ type: 'MultiPolygon',
+ coordinates: [
+ [[[2, 1, 3], [5, 4, 6], [8, 7, 9], [2, 1, 3]]]
+ ]
+ });
+ });
});
describe("L.LayerGroup#toGeoJSON", function () {
- it("returns a GeometryCollection object", function () {
+ it("returns a 2D FeatureCollection object", function () {
var marker = new L.Marker([10, 20]),
polyline = new L.Polyline([[10, 20], [2, 5]]),
layerGroup = new L.LayerGroup([marker, polyline]);
expect(layerGroup.toGeoJSON()).to.eql({
- type: 'GeometryCollection',
- geometries: [marker.toGeoJSON(), polyline.toGeoJSON()]
+ type: 'FeatureCollection',
+ features: [marker.toGeoJSON(), polyline.toGeoJSON()]
});
});
+ it("returns a 3D FeatureCollection object", function () {
+ var marker = new L.Marker([10, 20, 30]),
+ polyline = new L.Polyline([[10, 20, 30], [2, 5, 10]]),
+ layerGroup = new L.LayerGroup([marker, polyline]);
+ expect(layerGroup.toGeoJSON()).to.eql({
+ type: 'FeatureCollection',
+ features: [marker.toGeoJSON(), polyline.toGeoJSON()]
+ });
+ });
+
+ it("ensures that every member is a Feature", function () {
+ var tileLayer = new L.TileLayer(),
+ layerGroup = new L.LayerGroup([tileLayer]);
+
+ tileLayer.toGeoJSON = function () {
+ return {
+ type: 'Point',
+ coordinates: [20, 10]
+ };
+ };
+
+ expect(layerGroup.toGeoJSON()).to.eql({
+ type: 'FeatureCollection',
+ features: [{
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [20, 10]
+ }
+ }]
+ });
+ });
+
+ it('roundtrips GeometryCollection features', function () {
+ var json = {
+ "type": "FeatureCollection",
+ "features": [{
+ "type": "Feature",
+ "geometry": {
+ "type": "GeometryCollection",
+ "geometries": [{
+ "type": "LineString",
+ "coordinates": [[-122.4425587930444, 37.80666418607323], [-122.4428379594768, 37.80663578323093]]
+ }, {
+ "type": "LineString",
+ "coordinates": [
+ [-122.4425509770566, 37.80662588061205],
+ [-122.4428340530617, 37.8065999493009]
+ ]
+ }]
+ },
+ "properties": {
+ "name": "SF Marina Harbor Master"
+ }
+ }]
+ };
+
+ expect(L.geoJson(json).toGeoJSON()).to.eql(json);
+ });
+
+ it('roundtrips MiltiPoint features', function () {
+ var json = {
+ "type": "FeatureCollection",
+ "features": [{
+ "type": "Feature",
+ "geometry": {
+ "type": "MultiPoint",
+ "coordinates": [[-122.4425587930444, 37.80666418607323], [-122.4428379594768, 37.80663578323093]]
+ },
+ "properties": {
+ "name": "Test MultiPoints"
+ }
+ }]
+ };
+
+ expect(L.geoJson(json).toGeoJSON()).to.eql(json);
+ });
+
it("omits layers which do not implement toGeoJSON", function () {
var tileLayer = new L.TileLayer(),
layerGroup = new L.LayerGroup([tileLayer]);
expect(layerGroup.toGeoJSON()).to.eql({
- type: 'GeometryCollection',
- geometries: []
+ type: 'FeatureCollection',
+ features: []
});
});
});