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; }); }); });