import { setTimeout } from 'node:timers/promises';
describe('iD.svgData', function () {
var context;
var surface;
var dispatch = d3.dispatch('change');
var projection = iD.geoRawMercator()
.translate([6934098.868981334, 4092682.5519805425])
.scale(iD.geoZoomToScale(17))
.clipExtent([[0, 0], [1000, 1000]]);
var geojson =
'{' +
' "type": "FeatureCollection",' +
' "features": [' +
' {' +
' "type": "Feature",' +
' "geometry": {' +
' "type": "Point",' +
' "coordinates": [-74.38928604125977, 40.150275473401365]' +
' },' +
' "properties": {' +
' "abbr": "N.J.",' +
' "area": 19717.8,' +
' "name": "New Jersey",' +
' "name_en": "New Jersey",' +
' "osm_id": 316973311,' +
' "flag": true,' +
' "list": [1,2,3],' +
' "null": null,' +
' "object": {}' +
' },' +
' "id": 316973311' +
' }' +
' ]' +
'}';
var gj = JSON.parse(geojson);
var gpx =
'' +
'' +
'' +
'' +
' New Jersey' +
' ' +
' N.J.' +
' 19717.8' +
' New Jersey' +
' 316973311' +
' ' +
'' +
'';
var kml =
'' +
'' +
'' +
'' +
' ' +
' ' +
' ' +
' ' +
'' +
'gpxtest' +
' ' +
' New Jersey' +
' ' +
' N.J.' +
' 19717.8' +
' New Jersey' +
' 316973311' +
' ' +
' -74.3892860412598,40.1502754734014' +
' ' +
'' +
'' +
'';
function makeFile(contents, fileName, mimeType) {
var blob = new Blob([contents], { type: mimeType });
blob.lastModifiedDate = new Date();
blob.name = fileName;
return blob;
}
beforeEach(function () {
context = iD.coreContext().assetPath('../dist/').init();
d3.select(document.createElement('div'))
.attr('class', 'main-map')
.call(context.map().centerZoom([-74.389286, 40.1502754], 17));
surface = context.surface();
});
it('creates layer-mapdata', function () {
var render = iD.svgData(projection, context, dispatch).geojson(gj);
surface.call(render);
var layers = surface.selectAll('g.layer-mapdata').nodes();
expect(layers.length).to.eql(1);
});
it('draws geojson', function () {
var render = iD.svgData(projection, context, dispatch).geojson(gj);
surface.call(render);
var path;
path = surface.selectAll('path.shadow');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
path = surface.selectAll('path.stroke');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
});
describe('#fileList', function() {
it('handles gpx files', async () => {
var files = [ makeFile(gpx, 'test.gpx', 'application/gpx+xml') ];
var render = iD.svgData(projection, context, dispatch);
var spy = sinon.spy();
dispatch.on('change', spy);
render.fileList(files);
await setTimeout(200);
expect(spy).to.have.been.calledOnce;
surface.call(render);
var path;
path = surface.selectAll('path.shadow');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
path = surface.selectAll('path.stroke');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
});
it('handles kml files', async () => {
var files = [ makeFile(kml, 'test.kml', 'application/vnd.google-earth.kml+xml') ];
var render = iD.svgData(projection, context, dispatch);
var spy = sinon.spy();
dispatch.on('change', spy);
render.fileList(files);
await setTimeout(200);
expect(spy).to.have.been.calledOnce;
surface.call(render);
var path;
path = surface.selectAll('path.shadow');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
path = surface.selectAll('path.stroke');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
});
it('handles geojson files', async () => {
var files = [ makeFile(geojson, 'test.geojson', 'application/vnd.geo+json') ];
var render = iD.svgData(projection, context, dispatch);
var spy = sinon.spy();
dispatch.on('change', spy);
render.fileList(files);
await setTimeout(200);
expect(spy).to.have.been.calledOnce;
surface.call(render);
var path;
path = surface.selectAll('path.shadow');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
path = surface.selectAll('path.stroke');
expect(path.nodes().length).to.eql(1);
expect(path.attr('d')).to.match(/^M.*z$/);
expect(render.geojson().features[0].properties.osm_id).to.be.a('string');
expect(render.geojson().features[0].properties.flag).to.be.a('string');
expect(render.geojson().features[0].properties.list).to.be.a('string');
expect(render.geojson().features[0].properties.null).to.be.a('string');
expect(render.geojson().features[0].properties.object).to.be.a('string');
});
});
describe('#showLabels', function() {
it('shows labels by default', function () {
var render = iD.svgData(projection, context, dispatch).geojson(gj);
surface.call(render);
var label = surface.selectAll('text.label');
expect(label.nodes().length).to.eql(1);
expect(label.text()).to.eql('New Jersey');
var halo = surface.selectAll('text.label-halo');
expect(halo.nodes().length).to.eql(1);
expect(halo.text()).to.eql('New Jersey');
});
it('hides labels with showLabels(false)', function () {
var render = iD.svgData(projection, context, dispatch).geojson(gj).showLabels(false);
surface.call(render);
expect(surface.selectAll('text.label').empty()).to.be.ok;
expect(surface.selectAll('text.label-halo').empty()).to.be.ok;
});
});
});