@yaga/leaflet-ng2
Version:
Angular2 module for Leaflet
385 lines • 15.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const leaflet_1 = require("leaflet");
const index_1 = require("./index");
describe("GeoJSON Directive", () => {
let map;
let layer;
beforeEach(() => {
map = new index_1.MapComponent({ nativeElement: document.createElement("div") }, new index_1.LayerGroupProvider(), new index_1.MapProvider());
map._size = leaflet_1.point(100, 100);
map._pixelOrigin = leaflet_1.point(50, 50);
map._renderer = map._renderer || new leaflet_1.SVG();
layer = new index_1.GeoJSONDirective({ ref: map }, new index_1.LayerGroupProvider(), {});
});
const TEST_VALUE = {
features: [
{
geometry: {
coordinates: [7, 51],
type: "Point",
},
properties: {
test: "OK",
},
type: "Feature",
},
],
type: "FeatureCollection",
};
describe("[(data)]", () => {
it("should be changed in Leaflet when changing in Angular", () => {
layer.data = TEST_VALUE;
chai_1.expect(layer.toGeoJSON()).to.deep.equal(TEST_VALUE);
});
it("should be changed in Angular when changing in Angular", () => {
layer.data = TEST_VALUE;
chai_1.expect(layer.data).to.deep.equal(TEST_VALUE);
});
it("should be changed data in Angular when changing in Leaflet", () => {
layer.setData(TEST_VALUE);
chai_1.expect(layer.data).to.deep.equal(TEST_VALUE);
});
it("should be changed geoJSON in Angular when adding in latlngs Leaflet", () => {
layer.addData(TEST_VALUE.features[0]);
chai_1.expect(layer.data).to.deep.equal(TEST_VALUE);
});
it("should fire an event when changing in Angular", (done) => {
layer.ngAfterContentInit();
layer.dataChange.subscribe((eventVal) => {
chai_1.expect(eventVal).to.deep.equal(TEST_VALUE);
return done();
});
layer.data = TEST_VALUE;
});
it("should fire an event when changing internal setData function", (done) => {
layer.ngAfterContentInit();
layer.dataChange.subscribe((eventVal) => {
chai_1.expect(eventVal).to.deep.equal(TEST_VALUE);
return done();
});
layer.setData(TEST_VALUE);
});
it("should fire an event when adding in Leaflet", (done) => {
layer.ngAfterContentInit();
layer.dataChange.subscribe((eventVal) => {
chai_1.expect(eventVal).to.deep.equal(TEST_VALUE);
return done();
});
layer.addData(TEST_VALUE.features[0]);
});
});
describe("[filter]", () => {
/* istanbul ignore next */
const FILTER_FN = () => {
return true;
};
it("should be changed in Leaflet when changing in Angular", () => {
layer.filter = FILTER_FN;
chai_1.expect((layer.middleware).filter)
.to.equal(FILTER_FN);
});
it("should be changed in Angular when changing in Angular", () => {
layer.filter = FILTER_FN;
chai_1.expect(layer.filter).to.equal(FILTER_FN);
});
it("should use the filter function when adding data", (done) => {
const TEST_POINT = {
geometry: {
coordinates: [0, 1],
type: "Point",
},
properties: {},
type: "Feature",
};
layer.filter = ((elem) => {
chai_1.expect(elem).to.equal(TEST_POINT);
done();
return true;
});
layer.data = {
features: [TEST_POINT],
type: "FeatureCollection",
};
});
});
describe("[pointToLayer]", () => {
/* istanbul ignore next */
const POINT_TO_LAYER_FN = (feature) => {
return new leaflet_1.Marker({ lat: feature.geometry.coordinates[1], lng: feature.geometry.coordinates[0] });
};
it("should be changed in Leaflet when changing in Angular", () => {
layer.pointToLayer = POINT_TO_LAYER_FN;
chai_1.expect((layer.middleware).pointToLayer)
.to.equal(POINT_TO_LAYER_FN);
});
it("should be changed in Angular when changing in Angular", () => {
layer.pointToLayer = POINT_TO_LAYER_FN;
chai_1.expect(layer.pointToLayer).to.equal(POINT_TO_LAYER_FN);
});
it("should use the filter function when adding data", (done) => {
const TEST_POINT = {
geometry: {
coordinates: [0, 1],
type: "Point",
},
properties: {},
type: "Feature",
};
layer.pointToLayer = (feature) => {
chai_1.expect(feature).to.equal(TEST_POINT);
done();
return new leaflet_1.Marker({ lat: feature.geometry.coordinates[1], lng: feature.geometry.coordinates[0] });
};
layer.data = {
features: [TEST_POINT],
type: "FeatureCollection",
};
});
});
describe("[styler]", () => {
/* istanbul ignore next */
const STYLER_FN = (feature, defaultStyle) => {
return {};
};
it("should be changed in Leaflet when changing in Angular", () => {
layer.styler = STYLER_FN;
chai_1.expect((layer.middleware).styler)
.to.equal(STYLER_FN);
});
it("should be changed in Angular when changing in Angular", () => {
layer.styler = STYLER_FN;
chai_1.expect(layer.styler).to.equal(STYLER_FN);
});
it("should use the filter function when adding data", (done) => {
const TEST_POINT = {
geometry: {
coordinates: [0, 1],
type: "Point",
},
properties: {},
type: "Feature",
};
/* tslint:disable:max-line-length */
layer.styler = ((feature, defaultStyle) => {
chai_1.expect(feature).to.equal(TEST_POINT);
done();
return {};
});
/* tslint:enable */
layer.data = {
features: [TEST_POINT],
type: "FeatureCollection",
};
});
});
describe("[defaultStyle]", () => {
const NEW_DEFAULT_STYLE = {};
it("should have the default style from consts as fallback", () => {
chai_1.expect(layer.defaultStyle)
.to.equal(index_1.DEFAULT_STYLE);
chai_1.expect((layer.middleware).defaultStyle)
.to.equal(index_1.DEFAULT_STYLE);
});
it("should be changed in Leaflet when changing in Angular", () => {
layer.defaultStyle = NEW_DEFAULT_STYLE;
chai_1.expect((layer.middleware).defaultStyle)
.to.equal(NEW_DEFAULT_STYLE);
});
it("should be changed in Angular when changing in Angular", () => {
layer.defaultStyle = NEW_DEFAULT_STYLE;
chai_1.expect(layer.defaultStyle).to.equal(NEW_DEFAULT_STYLE);
});
it("should use the default style from consts as fallback in the styler function", (done) => {
const TEST_POINT = {
geometry: {
coordinates: [0, 1],
type: "Point",
},
properties: {},
type: "Feature",
};
layer.styler = ((feature, defaultStyle) => {
chai_1.expect(defaultStyle).to.equal(index_1.DEFAULT_STYLE);
done();
return {};
});
layer.data = {
features: [TEST_POINT],
type: "FeatureCollection",
};
});
it("should use the given default style in the styler function", (done) => {
const TEST_POINT = {
geometry: {
coordinates: [0, 1],
type: "Point",
},
properties: {},
type: "Feature",
};
layer.styler = ((feature, defaultStyle) => {
chai_1.expect(defaultStyle).to.equal(NEW_DEFAULT_STYLE);
done();
return {};
});
layer.defaultStyle = NEW_DEFAULT_STYLE;
layer.data = {
features: [TEST_POINT],
type: "FeatureCollection",
};
});
});
const testHandle = {};
const testEvent = { testHandle };
describe("(add)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.addEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("add", testEvent);
});
});
describe("(remove)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.removeEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("remove", testEvent);
});
});
describe("(popupopen)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.popupopenEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("popupopen", testEvent);
});
});
describe("(popupclose)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.popupcloseEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("popupclose", testEvent);
});
});
describe("(tooltipopen)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.tooltipopenEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("tooltipopen", testEvent);
});
});
describe("(tooltipclose)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.tooltipcloseEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("tooltipclose", testEvent);
});
});
describe("(click)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.clickEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("click", testEvent);
});
});
describe("(dblclick)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.dblclickEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("dblclick", testEvent);
});
});
describe("(mousedown)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.mousedownEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("mousedown", testEvent);
});
});
describe("(mouseover)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.mouseoverEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("mouseover", testEvent);
});
});
describe("(mouseout)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.mouseoutEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("mouseout", testEvent);
});
});
describe("(contextmenu)", () => {
it("should fire event in Angular when firing event in Leaflet", (done) => {
layer.contextmenuEvent.subscribe((event) => {
chai_1.expect(event.testHandle).to.equal(testHandle);
return done();
});
layer.fire("contextmenu", testEvent);
});
});
describe("Popup in GeoJSON Directive", () => {
let popup;
let testDiv;
let puLayer;
before(() => {
testDiv = document.createElement("div");
puLayer = new index_1.GeoJSONDirective({ ref: map }, new index_1.LayerGroupProvider(), {});
popup = new index_1.PopupDirective({ nativeElement: testDiv }, { ref: puLayer });
});
it("should bind popup", () => {
chai_1.expect(puLayer._popup).to.equal(popup);
});
});
describe("Tooltip in GeoJSON Directive", () => {
let tooltip;
let testDiv;
let ttLayer;
before(() => {
testDiv = document.createElement("div");
ttLayer = new index_1.GeoJSONDirective({ ref: map }, new index_1.LayerGroupProvider(), {});
tooltip = new index_1.TooltipDirective({ ref: ttLayer }, { nativeElement: testDiv });
});
it("should bind tooltip", () => {
chai_1.expect(ttLayer._tooltip).to.equal(tooltip);
});
});
describe("Destroying a GeoJSON Directive", () => {
it("should remove Polyline Directive from map on destroy", () => {
/* istanbul ignore if */
if (!map.hasLayer(layer)) {
throw new Error("The layer is not part of the map before destroying");
}
layer.ngOnDestroy();
/* istanbul ignore if */
if (map.hasLayer(layer)) {
throw new Error("The layer is still part of the map after destroying");
}
});
});
});
//# sourceMappingURL=geojson.directive.spec.js.map