From 47c5c0a2f040a75b6a4bc8687af0e3c3ec1c7fcb Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Wed, 19 Mar 2025 08:16:38 +0100 Subject: [PATCH] chore: remove old JS tests Those are not ran since more than one year, so let's trash. fix #2260 --- umap/static/umap/test/.eslintrc | 21 -- umap/static/umap/test/DataLayer.js | 463 ----------------------------- umap/static/umap/test/Feature.js | 131 -------- umap/static/umap/test/Map.js | 37 --- umap/static/umap/test/Marker.js | 126 -------- umap/static/umap/test/Polygon.js | 111 ------- umap/static/umap/test/Polyline.js | 286 ------------------ umap/static/umap/test/Util.js | 28 -- umap/static/umap/test/_pre.js | 455 ---------------------------- umap/static/umap/test/index.html | 139 --------- 10 files changed, 1797 deletions(-) delete mode 100644 umap/static/umap/test/.eslintrc delete mode 100644 umap/static/umap/test/DataLayer.js delete mode 100644 umap/static/umap/test/Feature.js delete mode 100644 umap/static/umap/test/Map.js delete mode 100644 umap/static/umap/test/Marker.js delete mode 100644 umap/static/umap/test/Polygon.js delete mode 100644 umap/static/umap/test/Polyline.js delete mode 100644 umap/static/umap/test/Util.js delete mode 100644 umap/static/umap/test/_pre.js delete mode 100644 umap/static/umap/test/index.html diff --git a/umap/static/umap/test/.eslintrc b/umap/static/umap/test/.eslintrc deleted file mode 100644 index cdc6bb73..00000000 --- a/umap/static/umap/test/.eslintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "globals": { - "describe": true, - "happen": true, - "assert": true, - "before": true, - "after": true, - "it": true, - "sinon": true, - "enableEdit": true, - "disableEdit": true, - "changeInputValue": true, - "resetMap": true, - "initMap": true, - "clickCancel": true, - "map": true, - "qs": true, - "qsa": true, - "qst": true - } -} diff --git a/umap/static/umap/test/DataLayer.js b/umap/static/umap/test/DataLayer.js deleted file mode 100644 index 26ba7d61..00000000 --- a/umap/static/umap/test/DataLayer.js +++ /dev/null @@ -1,463 +0,0 @@ -describe('U.DataLayer', () => { - let path = '/map/99/datalayer/update/62/', - map, - datalayer - - before(async () => { - fetchMock.mock(/\/datalayer\/62\/\?.*/, JSON.stringify(RESPONSES.datalayer62_GET)) - fetchMock.sticky('/map/99/update/settings/', { id: 99 }) - this.options = { - umap_id: 99, - } - MAP = map = initMap({ umap_id: 99 }) - const datalayer_options = defaultDatalayerData() - await map.initDataLayers([datalayer_options]) - datalayer = map.getDataLayerByUmapId(62) - enableEdit() - }) - after(() => { - fetchMock.restore() - resetMap() - }) - - describe('#init()', () => { - it('should be added in datalayers index', () => { - assert.notEqual(map.datalayers_index.indexOf(datalayer), -1) - }) - }) - - describe('#edit()', () => { - var editButton, form, input, forceButton - - it('row in control should be active', () => { - assert.notOk( - qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(datalayer) + '.off') - ) - }) - - it('should have edit button', () => { - editButton = qs('#browse_data_toggle_' + L.stamp(datalayer) + ' .layer-edit') - assert.ok(editButton) - }) - - it('should have toggle visibility element', () => { - assert.ok(qs('.leaflet-control-browse i.layer-toggle')) - }) - - it('should exist only one datalayer', () => { - assert.equal(qsa('.leaflet-control-browse i.layer-toggle').length, 1) - }) - - it('should build a form on edit button click', () => { - happen.click(editButton) - form = qs('form.umap-form') - input = qs('form.umap-form input[name="name"]') - assert.ok(form) - assert.ok(input) - }) - - it('should update name on input change', () => { - var new_name = 'This is a new name' - input.value = new_name - happen.once(input, { type: 'input' }) - assert.equal(datalayer.options.name, new_name) - }) - - it('should have made datalayer dirty', () => { - assert.ok(datalayer.isDirty) - assert.notEqual(map.dirty_datalayers.indexOf(datalayer), -1) - }) - - it('should have made Map dirty', () => { - assert.ok(map.isDirty) - }) - - it('should call datalayer.save on save button click', (done) => { - const postDatalayer = fetchMock.post(path, () => { - return defaultDatalayerData() - }) - clickSave() - window.setTimeout(() => { - assert(fetchMock.called(path)) - done() - }, 500) - }) - - it('should show alert if server respond 412', (done) => { - cleanAlert() - fetchMock.restore() - fetchMock.post(path, 412) - happen.click(editButton) - input = qs('form.umap-form input[name="name"]') - input.value = 'a new name' - happen.once(input, { type: 'input' }) - clickSave() - window.setTimeout(() => { - assert(L.DomUtil.hasClass(map._container, 'umap-alert')) - assert.notEqual(map.dirty_datalayers.indexOf(datalayer), -1) - const forceButton = qs('#umap-alert-container .umap-action') - assert.ok(forceButton) - done() - }, 500) - }) - - it('should save anyway on force save button click', (done) => { - const forceButton = qs('#umap-alert-container .umap-action') - fetchMock.restore() - fetchMock.post(path, defaultDatalayerData) - happen.click(forceButton) - window.setTimeout(() => { - assert.notOk(qs('#umap-alert-container .umap-action')) - assert(fetchMock.called(path)) - assert.equal(map.dirty_datalayers.indexOf(datalayer), -1) - done() - }, 500) - }) - }) - - describe('#save() new', () => { - let newLayerButton, form, input, newDatalayer, editButton, manageButton - - it('should have a manage datalayers action', () => { - enableEdit() - manageButton = qs('.manage-datalayers') - assert.ok(manageButton) - happen.click(manageButton) - }) - - it('should have a new layer button', () => { - newLayerButton = qs('.panel.right.on .add-datalayer') - assert.ok(newLayerButton) - }) - - it('should build a form on new layer button click', () => { - happen.click(newLayerButton) - form = qs('form.umap-form') - input = qs('form.umap-form input[name="name"]') - assert.ok(form) - assert.ok(input) - }) - - it('should have an empty name', () => { - assert.notOk(input.value) - }) - - it('should have created a new datalayer', () => { - assert.equal(map.datalayers_index.length, 2) - newDatalayer = map.datalayers_index[1] - }) - - it('should have made Map dirty', () => { - assert.ok(map.isDirty) - }) - - it('should update name on input change', () => { - var new_name = 'This is a new name' - input.value = new_name - happen.once(input, { type: 'input' }) - assert.equal(newDatalayer.options.name, new_name) - }) - - it('should set umap_id on save callback', async () => { - assert.notOk(newDatalayer.umap_id) - fetchMock.post('/map/99/datalayer/create/', defaultDatalayerData({ id: 63 })) - clickSave() - return new Promise((resolve) => { - window.setTimeout(() => { - assert.equal(newDatalayer.umap_id, 63) - resolve() - }, 1000) - }) - }) - - it('should have unset map dirty', () => { - assert.notOk(map.isDirty) - }) - - it('should have edit button', () => { - editButton = qs('#browse_data_toggle_' + L.stamp(newDatalayer) + ' .layer-edit') - assert.ok(editButton) - }) - - it('should call update if we edit again', async () => { - happen.click(editButton) - assert.notOk(map.isDirty) - input = qs('form.umap-form input[name="name"]') - input.value = "a new name again but we don't care which" - happen.once(input, { type: 'input' }) - assert.ok(map.isDirty) - var response = () => { - return defaultDatalayerData({ pk: 63 }) - } - var spy = sinon.spy(response) - fetchMock.post('/map/99/datalayer/update/63/', spy) - return new Promise((resolve) => { - clickSave() - window.setTimeout(() => { - assert.ok(spy.calledOnce) - resolve() - }, 1000) - }) - }) - }) - - describe('#iconClassChange()', () => { - it('should change icon class', () => { - happen.click(qs('[data-id="' + datalayer._leaflet_id + '"] .layer-edit')) - changeSelectValue( - qs('form#datalayer-advanced-properties select[name=iconClass]'), - 'Circle' - ) - assert.notOk(qs('div.umap-div-icon')) - assert.ok(qs('div.umap-circle-icon')) - happen.click( - qs('form#datalayer-advanced-properties .umap-field-iconClass .undefine') - ) - assert.notOk(qs('div.umap-circle-icon')) - assert.ok(qs('div.umap-div-icon')) - clickCancel() - }) - }) - - describe('#show/hide', () => { - it('should hide features on hide', () => { - assert.ok(qs('div.umap-div-icon')) - assert.ok(qs('path[fill="none"]')) - datalayer.hide() - assert.notOk(qs('div.umap-div-icon')) - assert.notOk(qs('path[fill="none"]')) - }) - - it('should show features on show', () => { - assert.notOk(qs('div.umap-div-icon')) - assert.notOk(qs('path[fill="none"]')) - datalayer.show() - assert.ok(qs('div.umap-div-icon')) - assert.ok(qs('path[fill="none"]')) - }) - }) - - describe('#clone()', () => { - it('should clone everything but the id and the name', () => { - enableEdit() - var clone = datalayer.clone() - assert.notOk(clone.umap_id) - assert.notEqual(clone.options.name, datalayer.name) - assert.ok(clone.options.name) - assert.equal(clone.options.color, datalayer.options.color) - assert.equal(clone.options.stroke, datalayer.options.stroke) - clone._delete() - clickSave() - }) - }) - - describe('#restore()', () => { - var oldConfirm, - newConfirm = () => { - return true - } - - before(() => { - oldConfirm = window.confirm - window.confirm = newConfirm - }) - after(() => { - window.confirm = oldConfirm - }) - - it('should restore everything', (done) => { - enableEdit() - var geojson = L.Util.CopyJSON(RESPONSES.datalayer62_GET) - geojson.features.push({ - geometry: { - type: 'Point', - coordinates: [-1.274658203125, 50.57634993749885], - }, - type: 'Feature', - id: 1807, - properties: { _umap_options: {}, name: 'new point from restore' }, - }) - geojson._umap_options.color = 'Chocolate' - fetchMock.get('/datalayer/62/olderversion.geojson', geojson) - sinon.spy(window, 'confirm') - datalayer.restore('olderversion.geojson') - window.setTimeout(() => { - assert(window.confirm.calledOnce) - window.confirm.restore() - assert.equal(datalayer.umap_id, 62) - assert.ok(datalayer.isDirty) - assert.equal(datalayer._index.length, 4) - assert.ok(qs('path[fill="Chocolate"]')) - done() - }, 1000) - }) - - it('should revert anything on cancel click', () => { - clickCancel() - assert.equal(datalayer._index.length, 3) - assert.notOk(qs('path[fill="Chocolate"]')) - }) - }) - - describe('#smart-options()', () => { - let poly, marker - before(() => { - datalayer.eachLayer(function (layer) { - if (!poly && layer instanceof L.Polygon) { - poly = layer - } - if (!marker && layer instanceof L.Marker) { - marker = layer - } - }) - }) - - it('should parse color variable', () => { - let icon = qs('div.umap-div-icon .icon_container') - poly.properties.mycolor = 'DarkGoldenRod' - marker.properties.mycolor = 'DarkRed' - marker.properties._umap_options.color = undefined - assert.notOk(qs('path[fill="DarkGoldenRod"]')) - assert.equal(icon.style.backgroundColor, 'olivedrab') - datalayer.options.color = '{mycolor}' - datalayer.options.fillColor = '{mycolor}' - datalayer.indexProperties(poly) - datalayer.indexProperties(marker) - datalayer.redraw() - icon = qs('div.umap-div-icon .icon_container') - assert.equal(icon.style.backgroundColor, 'darkred') - assert.ok(qs('path[fill="DarkGoldenRod"]')) - }) - }) - - describe('#facet-search()', () => { - before(async () => { - fetchMock.get(/\/datalayer\/63\/\?.*/, RESPONSES.datalayer63_GET) - map.options.facetKey = 'name' - await map.initDataLayers([RESPONSES.datalayer63_GET._umap_options]) - }) - it('should not impact non browsable layer', () => { - assert.ok(qs('path[fill="SteelBlue"]')) - }) - it('should allow advanced filter', () => { - map.openFacet() - assert.ok(qs('div.umap-facet-search')) - // This one if from the normal datalayer - // it's name is "test", so it should be hidden - // by the filter - assert.ok(qs('path[fill="none"]')) - happen.click(qs('input[data-value="name poly"]')) - assert.notOk(qs('path[fill="none"]')) - // This one comes from a non browsable layer - // so it should not be affected by the filter - assert.ok(qs('path[fill="SteelBlue"]')) - happen.click(qs('input[data-value="name poly"]')) // Undo - }) - it('should allow to control facet label', () => { - map.options.facetKey = 'name|Nom' - map.openFacet() - assert.ok(qs('div.umap-facet-search h5')) - assert.equal(qs('div.umap-facet-search h5').textContent, 'Nom') - }) - }) - describe('#zoomEnd', () => { - it('should honour the fromZoom option', () => { - map.setZoom(6, { animate: false }) - assert.ok(qs('path[fill="none"]')) - datalayer.options.fromZoom = 6 - map.setZoom(5, { animate: false }) - assert.notOk(qs('path[fill="none"]')) - map.setZoom(6, { animate: false }) - assert.ok(qs('path[fill="none"]')) - }) - - it('should honour the toZoom option', () => { - map.setZoom(6, { animate: false }) - assert.ok(qs('path[fill="none"]')) - datalayer.options.toZoom = 6 - map.setZoom(7, { animate: false }) - assert.notOk(qs('path[fill="none"]')) - map.setZoom(6, { animate: false }) - assert.ok(qs('path[fill="none"]')) - }) - }) - - describe('#displayOnLoad', () => { - before(() => { - fetchMock.get(/\/datalayer\/64\/\?.*/, RESPONSES.datalayer64_GET) - }) - - beforeEach(async () => { - await map.initDataLayers([RESPONSES.datalayer64_GET._umap_options]) - datalayer = map.getDataLayerByUmapId(64) - map.setZoom(10, { animate: false }) - }) - - afterEach(() => { - datalayer._delete() - }) - - it('should not display layer at load', () => { - assert.notOk(qs('path[fill="AliceBlue"]')) - }) - - it('should display on click', (done) => { - happen.click(qs(`[data-id='${L.stamp(datalayer)}'] .layer-toggle`)) - window.setTimeout(() => { - assert.ok(qs('path[fill="AliceBlue"]')) - done() - }, 500) - }) - - it('should not display on zoom', (done) => { - map.setZoom(9, { animate: false }) - window.setTimeout(() => { - assert.notOk(qs('path[fill="AliceBlue"]')) - done() - }, 500) - }) - }) - - describe('#delete()', () => { - let deleteLink, - deletePath = '/map/99/datalayer/delete/62/' - before(() => { - datalayer = map.getDataLayerByUmapId(62) - }) - - it('should have a delete link in update form', () => { - enableEdit() - happen.click(qs('#browse_data_toggle_' + L.stamp(datalayer) + ' .layer-edit')) - deleteLink = qs('button.delete_datalayer_button') - assert.ok(deleteLink) - }) - - it('should delete features on datalayer delete', () => { - happen.click(deleteLink) - assert.notOk(qs('div.icon_container')) - }) - - it('should have set map dirty', () => { - assert.ok(map.isDirty) - }) - - it('should delete layer control row on delete', () => { - assert.notOk( - qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(datalayer)) - ) - }) - - it('should be removed from map.datalayers_index', () => { - assert.equal(map.datalayers_index.indexOf(datalayer), -1) - }) - - it('should be removed from map.datalayers', () => { - assert.notOk(map.datalayers[L.stamp(datalayer)]) - }) - - it('should be visible again on edit cancel', () => { - clickCancel() - assert.ok(qs('div.icon_container')) - }) - }) -}) diff --git a/umap/static/umap/test/Feature.js b/umap/static/umap/test/Feature.js deleted file mode 100644 index 2fdb8929..00000000 --- a/umap/static/umap/test/Feature.js +++ /dev/null @@ -1,131 +0,0 @@ -describe('U.FeatureMixin', function () { - let map, datalayer - before(async () => { - await fetchMock.mock( - /\/datalayer\/62\/\?.*/, - JSON.stringify(RESPONSES.datalayer62_GET) - ) - this.options = { - umap_id: 99, - } - MAP = map = initMap({ umap_id: 99 }) - const datalayer_options = defaultDatalayerData() - await map.initDataLayers([datalayer_options]) - datalayer = map.getDataLayerByUmapId(62) - }) - after(function () { - fetchMock.restore() - resetMap() - }) - - describe('#utils()', function () { - var poly, marker - function setFeatures(datalayer) { - datalayer.eachLayer(function (layer) { - if (!poly && layer instanceof L.Polygon) { - poly = layer - } - if (!marker && layer instanceof L.Marker) { - marker = layer - } - }) - } - it('should generate a valid geojson', function () { - setFeatures(datalayer) - assert.ok(poly) - assert.deepEqual(poly.toGeoJSON().geometry, { - type: 'Polygon', - coordinates: [ - [ - [11.25, 53.585984], - [10.151367, 52.975108], - [12.689209, 52.167194], - [14.084473, 53.199452], - [12.634277, 53.618579], - [11.25, 53.585984], - [11.25, 53.585984], - ], - ], - }) - // Ensure original latlngs has not been modified - assert.equal(poly.getLatLngs()[0].length, 6) - }) - - it('should remove empty _umap_options from exported geojson', function () { - setFeatures(datalayer) - assert.ok(poly) - assert.deepEqual(poly.toGeoJSON().properties, { name: 'name poly' }) - assert.ok(marker) - assert.deepEqual(marker.toGeoJSON().properties, { - _umap_options: { color: 'OliveDrab' }, - name: 'test', - }) - }) - }) - - describe('#properties()', function () { - it('should rename property', function () { - var poly = datalayer._lineToLayer({}, [ - [0, 0], - [0, 1], - [0, 2], - ]) - poly.properties.prop1 = 'xxx' - poly.renameProperty('prop1', 'prop2') - assert.equal(poly.properties.prop2, 'xxx') - assert.ok(typeof poly.properties.prop1 === 'undefined') - }) - - it('should not create property when renaming', function () { - var poly = datalayer._lineToLayer({}, [ - [0, 0], - [0, 1], - [0, 2], - ]) - delete poly.properties.prop2 // Make sure it doesn't exist - poly.renameProperty('prop1', 'prop2') - assert.ok(typeof poly.properties.prop2 === 'undefined') - }) - - it('should delete property', function () { - var poly = datalayer._lineToLayer({}, [ - [0, 0], - [0, 1], - [0, 2], - ]) - poly.properties.prop = 'xxx' - assert.equal(poly.properties.prop, 'xxx') - poly.deleteProperty('prop') - assert.ok(typeof poly.properties.prop === 'undefined') - }) - }) - - describe('#matchFilter()', function () { - var poly - - it('should filter on properties', function () { - poly = datalayer._lineToLayer({}, [ - [0, 0], - [0, 1], - [0, 2], - ]) - poly.properties.name = 'mooring' - assert.ok(poly.matchFilter('moo', ['name'])) - assert.notOk(poly.matchFilter('foo', ['name'])) - }) - - it('should be case unsensitive', function () { - assert.ok(poly.matchFilter('Moo', ['name'])) - }) - - it('should match also in the middle of a string', function () { - assert.ok(poly.matchFilter('oor', ['name'])) - }) - - it('should handle multiproperties', function () { - poly.properties.city = 'Teulada' - assert.ok(poly.matchFilter('eul', ['name', 'city', 'foo'])) - }) - }) - -}) diff --git a/umap/static/umap/test/Map.js b/umap/static/umap/test/Map.js deleted file mode 100644 index c6e6fc53..00000000 --- a/umap/static/umap/test/Map.js +++ /dev/null @@ -1,37 +0,0 @@ -describe('U.Map', () => { - let map, datalayer - before(async () => { - await fetchMock.mock( - /\/datalayer\/62\/\?.*/, - JSON.stringify(RESPONSES.datalayer62_GET) - ) - this.options = { - umap_id: 99, - } - map = initMap({ umap_id: 99 }) - const datalayer_options = defaultDatalayerData() - await map.initDataLayers([datalayer_options]) - datalayer = map.getDataLayerByUmapId(62) - }) - after(() => { - fetchMock.restore() - clickCancel() - resetMap() - }) - - describe('#localizeUrl()', function () { - it('should replace known variables', function () { - assert.equal( - map.localizeUrl('http://example.org/{zoom}'), - 'http://example.org/' + map.getZoom() - ) - }) - - it('should keep unknown variables', function () { - assert.equal( - map.localizeUrl('http://example.org/{unkown}'), - 'http://example.org/{unkown}' - ) - }) - }) -}) diff --git a/umap/static/umap/test/Marker.js b/umap/static/umap/test/Marker.js deleted file mode 100644 index c7d0b0f7..00000000 --- a/umap/static/umap/test/Marker.js +++ /dev/null @@ -1,126 +0,0 @@ -describe('U.Marker', () => { - let map, datalayer - before(async () => { - const datalayer_response = JSON.parse(JSON.stringify(RESPONSES.datalayer62_GET)) // Copy. - datalayer_response._umap_options.iconClass = 'Drop' - await fetchMock.mock(/\/datalayer\/62\/\?.*/, datalayer_response) - this.options = { - umap_id: 99, - } - MAP = map = initMap({ umap_id: 99 }) - const datalayer_options = defaultDatalayerData() - await map.initDataLayers([datalayer_options]) - datalayer = map.getDataLayerByUmapId(62) - }) - after(() => { - fetchMock.restore() - resetMap() - }) - - describe('#iconClassChange()', () => { - it('should change icon class', () => { - enableEdit() - happen.click(qs('div.umap-drop-icon')) - happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')) - changeSelectValue( - qs( - 'form#umap-feature-shape-properties .umap-field-iconClass select[name=iconClass]' - ), - 'Circle' - ) - assert.notOk(qs('div.umap-drop-icon')) - assert.ok(qs('div.umap-circle-icon')) - happen.click( - qs('form#umap-feature-shape-properties .umap-field-iconClass .undefine') - ) - assert.notOk(qs('div.umap-circle-icon')) - assert.ok(qs('div.umap-drop-icon')) - clickCancel() - }) - }) - - describe('#iconSymbolChange()', () => { - it('should change icon symbol', () => { - enableEdit() - happen.click(qs('div.umap-drop-icon')) - happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')) - changeInputValue( - qs( - 'form#umap-feature-shape-properties .umap-field-iconUrl input[name=iconUrl]' - ), - '1' - ) - assert.equal(qs('div.umap-drop-icon span').textContent, '1') - changeInputValue( - qs( - 'form#umap-feature-shape-properties .umap-field-iconUrl input[name=iconUrl]' - ), - '{name}' - ) - assert.equal(qs('div.umap-drop-icon span').textContent, 'test') - clickCancel() - }) - }) - - describe('#iconClassChange()', () => { - it('should change icon class', () => { - enableEdit() - happen.click(qs('div.umap-drop-icon')) - happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')) - changeSelectValue( - qs( - 'form#umap-feature-shape-properties .umap-field-iconClass select[name=iconClass]' - ), - 'Circle' - ) - assert.notOk(qs('div.umap-drop-icon')) - assert.ok(qs('div.umap-circle-icon')) - happen.click( - qs('form#umap-feature-shape-properties .umap-field-iconClass .undefine') - ) - assert.notOk(qs('div.umap-circle-icon')) - assert.ok(qs('div.umap-drop-icon')) - clickCancel() - }) - }) - - describe('#clone', () => { - it('should clone marker', () => { - var layer = new U.Marker(map, [10, 20], { - datalayer: datalayer, - }).addTo(datalayer) - assert.equal(datalayer._index.length, 4) - other = layer.clone() - assert.ok(map.hasLayer(other)) - assert.equal(datalayer._index.length, 5) - // Must not be the same reference - assert.notEqual(layer._latlng, other._latlng) - assert.equal(L.Util.formatNum(layer._latlng.lat), other._latlng.lat) - assert.equal(L.Util.formatNum(layer._latlng.lng), other._latlng.lng) - }) - }) - - describe('#edit()', function (done) { - it('should allow changing coordinates manually', () => { - var layer = new U.Marker(map, [10, 20], { - datalayer: datalayer, - }).addTo(datalayer) - enableEdit() - layer.edit() - changeInputValue(qs('form.umap-form input[name="lat"]'), '54.43') - assert.equal(layer._latlng.lat, 54.43) - }) - - it('should not allow invalid latitude nor longitude', () => { - var layer = new U.Marker(map, [10, 20], { - datalayer: datalayer, - }).addTo(datalayer) - enableEdit() - layer.edit() - changeInputValue(qs('form.umap-form input[name="lat"]'), '5443') - assert.equal(layer._latlng.lat, 10) - changeInputValue(qs('form.umap-form input[name="lng"]'), '5443') - assert.equal(layer._latlng.lng, 20) - }) - }) -}) diff --git a/umap/static/umap/test/Polygon.js b/umap/static/umap/test/Polygon.js deleted file mode 100644 index d0860167..00000000 --- a/umap/static/umap/test/Polygon.js +++ /dev/null @@ -1,111 +0,0 @@ -describe('U.Polygon', function () { - var p2ll, map, datalayer - - before(function () { - map = initMap({ umap_id: 99 }) - enableEdit() - p2ll = function (x, y) { - return map.containerPointToLatLng([x, y]) - } - datalayer = map.createDataLayer() - datalayer.connectToMap() - }) - - after(function () { - clickCancel() - resetMap() - }) - - afterEach(function () { - datalayer.empty() - }) - - describe('#isMulti()', function () { - it('should return false for basic Polygon', function () { - var layer = new U.Polygon( - map, - [ - [1, 2], - [3, 4], - [5, 6], - ], - { datalayer: datalayer } - ) - assert.notOk(layer.isMulti()) - }) - - it('should return false for nested basic Polygon', function () { - var latlngs = [[[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]]], - layer = new U.Polygon(map, latlngs, { datalayer: datalayer }) - assert.notOk(layer.isMulti()) - }) - - it('should return false for simple Polygon with hole', function () { - var layer = new U.Polygon( - map, - [ - [ - [1, 2], - [3, 4], - [5, 6], - ], - [ - [7, 8], - [9, 10], - [11, 12], - ], - ], - { datalayer: datalayer } - ) - assert.notOk(layer.isMulti()) - }) - - it('should return true for multi Polygon', function () { - var latLngs = [ - [ - [ - [1, 2], - [3, 4], - [5, 6], - ], - ], - [ - [ - [7, 8], - [9, 10], - [11, 12], - ], - ], - ] - var layer = new U.Polygon(map, latLngs, { datalayer: datalayer }) - assert.ok(layer.isMulti()) - }) - - it('should return true for multi Polygon with hole', function () { - var latLngs = [ - [ - [ - [10, 20], - [30, 40], - [50, 60], - ], - ], - [ - [ - [0, 10], - [10, 10], - [10, 0], - ], - [ - [2, 3], - [2, 4], - [3, 4], - ], - ], - ] - var layer = new U.Polygon(map, latLngs, { datalayer: datalayer }) - assert.ok(layer.isMulti()) - }) - }) - -}) diff --git a/umap/static/umap/test/Polyline.js b/umap/static/umap/test/Polyline.js deleted file mode 100644 index 06f5ee08..00000000 --- a/umap/static/umap/test/Polyline.js +++ /dev/null @@ -1,286 +0,0 @@ -describe('U.Polyline', function () { - var p2ll, map - - before(function () { - this.map = map = initMap({ umap_id: 99 }) - enableEdit() - p2ll = function (x, y) { - return map.containerPointToLatLng([x, y]) - } - this.datalayer = this.map.createDataLayer() - this.datalayer.connectToMap() - }) - - after(function () { - clickCancel() - resetMap() - }) - - afterEach(function () { - this.datalayer.empty() - }) - - describe('#isMulti()', function () { - it('should return false for basic Polyline', function () { - var layer = new U.Polyline( - this.map, - [ - [1, 2], - [3, 4], - [5, 6], - ], - { datalayer: this.datalayer } - ) - assert.notOk(layer.isMulti()) - }) - - it('should return false for nested basic Polyline', function () { - var layer = new U.Polyline( - this.map, - [ - [ - [1, 2], - [3, 4], - [5, 6], - ], - ], - { datalayer: this.datalayer } - ) - assert.notOk(layer.isMulti()) - }) - - it('should return true for multi Polyline', function () { - var latLngs = [ - [ - [ - [1, 2], - [3, 4], - [5, 6], - ], - ], - [ - [ - [7, 8], - [9, 10], - [11, 12], - ], - ], - ] - var layer = new U.Polyline(this.map, latLngs, { datalayer: this.datalayer }) - assert.ok(layer.isMulti()) - }) - }) - - describe('#contextmenu', function () { - afterEach(function () { - // Make sure contextmenu is hidden. - happen.once(document, { type: 'keydown', keyCode: 27 }) - }) - - describe('#in edit mode', function () { - it('should allow to remove shape when multi', function () { - var latlngs = [ - [p2ll(100, 100), p2ll(100, 200)], - [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.equal(qst('Remove shape from the multi'), 1) - }) - - it('should not allow to remove shape when not multi', function () { - var latlngs = [[p2ll(100, 100), p2ll(100, 200)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Remove shape from the multi')) - }) - - it('should not allow to isolate shape when not multi', function () { - var latlngs = [[p2ll(100, 100), p2ll(100, 200)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Extract shape to separate feature')) - }) - - it('should allow to isolate shape when multi', function () { - var latlngs = [ - [p2ll(100, 150), p2ll(100, 200)], - [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.ok(qst('Extract shape to separate feature')) - }) - - it('should not allow to transform to polygon when multi', function () { - var latlngs = [ - [p2ll(100, 150), p2ll(100, 200)], - [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Transform to polygon')) - }) - - it('should allow to transform to polygon when not multi', function () { - var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.equal(qst('Transform to polygon'), 1) - }) - - it('should not allow to transfer shape when not editedFeature', function () { - var layer = new U.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Transfer shape to edited feature')) - }) - - it('should not allow to transfer shape when editedFeature is not a line', function () { - var layer = new U.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], { - datalayer: this.datalayer, - }).addTo(this.datalayer), - other = new U.Polygon( - this.map, - [p2ll(200, 300), p2ll(300, 200), p2ll(200, 100)], - { datalayer: this.datalayer } - ).addTo(this.datalayer) - other.edit() - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Transfer shape to edited feature')) - }) - - it('should allow to transfer shape when another line is edited', function () { - var layer = new U.Polyline( - this.map, - [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], - { datalayer: this.datalayer } - ).addTo(this.datalayer), - other = new U.Polyline(this.map, [p2ll(200, 300), p2ll(300, 200)], { - datalayer: this.datalayer, - }).addTo(this.datalayer) - other.edit() - happen.once(layer._path, { type: 'contextmenu' }) - assert.equal(qst('Transfer shape to edited feature'), 1) - other.remove() - layer.remove() - }) - - it('should allow to merge lines when multi', function () { - var latlngs = [ - [p2ll(100, 100), p2ll(100, 200)], - [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.equal(qst('Merge lines'), 1) - }) - - it('should not allow to merge lines when not multi', function () { - var latlngs = [[p2ll(100, 100), p2ll(100, 200)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - happen.once(layer._path, { type: 'contextmenu' }) - assert.notOk(qst('Merge lines')) - }) - - it('should allow to split lines when clicking on vertex', function () { - var latlngs = [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - layer.enableEdit() - happen.at('contextmenu', 350, 400) - assert.equal(qst('Split line'), 1) - }) - - it('should not allow to split lines when clicking on first vertex', function () { - var latlngs = [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - layer.enableEdit() - happen.at('contextmenu', 300, 350) - assert.equal(qst('Delete this feature'), 1) // Make sure we have clicked on the vertex. - assert.notOk(qst('Split line')) - }) - - it('should not allow to split lines when clicking on last vertex', function () { - var latlngs = [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - layer.enableEdit() - happen.at('contextmenu', 400, 300) - assert.equal(qst('Delete this feature'), 1) // Make sure we have clicked on the vertex. - assert.notOk(qst('Split line')) - }) - }) - }) - - describe('#mergeShapes', function () { - it('should remove duplicated join point when merging', function () { - var latlngs = [ - [ - [0, 0], - [0, 1], - ], - [ - [0, 1], - [0, 2], - ], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - layer.mergeShapes() - layer.disableEdit() // Remove vertex from latlngs to compare them. - assert.deepEqual(layer.getLatLngs(), [ - L.latLng([0, 0]), - L.latLng([0, 1]), - L.latLng([0, 2]), - ]) - assert(this.map.isDirty) - }) - - it('should revert candidate if first point is closer', function () { - var latlngs = [ - [ - [0, 0], - [0, 1], - ], - [ - [0, 2], - [0, 1], - ], - ], - layer = new U.Polyline(this.map, latlngs, { - datalayer: this.datalayer, - }).addTo(this.datalayer) - layer.mergeShapes() - layer.disableEdit() - assert.deepEqual(layer.getLatLngs(), [ - L.latLng([0, 0]), - L.latLng([0, 1]), - L.latLng([0, 2]), - ]) - }) - }) - -}) diff --git a/umap/static/umap/test/Util.js b/umap/static/umap/test/Util.js deleted file mode 100644 index 51ff2074..00000000 --- a/umap/static/umap/test/Util.js +++ /dev/null @@ -1,28 +0,0 @@ -describe('L.Util', function () { - describe('#TextColorFromBackgroundColor', function () { - it('should output white for black', function () { - document.body.style.backgroundColor = 'black' - assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff') - }) - - it('should output white for brown', function () { - document.body.style.backgroundColor = 'brown' - assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff') - }) - - it('should output black for white', function () { - document.body.style.backgroundColor = 'white' - assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000') - }) - - it('should output black for tan', function () { - document.body.style.backgroundColor = 'tan' - assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000') - }) - - it('should output black by default', function () { - document.body.style.backgroundColor = 'transparent' - assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000') - }) - }) -}) diff --git a/umap/static/umap/test/_pre.js b/umap/static/umap/test/_pre.js deleted file mode 100644 index 823cd07e..00000000 --- a/umap/static/umap/test/_pre.js +++ /dev/null @@ -1,455 +0,0 @@ -window.assert = chai.assert -window.expect = chai.expect - -var qs = function (selector, element) { - return (element || document).querySelector(selector) -} -var qsa = function (selector) { - return document.querySelectorAll(selector) -} -var qst = function (text, parent) { - // find element by its text content - var r = document.evaluate( - "descendant::*[contains(text(),'" + text + "')]", - parent || qs('#map'), - null, - XPathResult.UNORDERED_NODE_ITERATOR_TYPE, - null - ), - count = 0 - while (r.iterateNext()) console.log(++count) - return count -} -happen.at = function (what, x, y, props) { - this.once( - document.elementFromPoint(x, y), - L.Util.extend( - { - type: what, - clientX: x, - clientY: y, - screenX: x, - screenY: y, - which: 1, - button: 0, - }, - props || {} - ) - ) -} -var resetMap = function () { - var mapElement = qs('#map') - mapElement.innerHTML = 'Done' - delete mapElement._leaflet_id - document.body.className = '' -} -var enableEdit = function () { - happen.click(qs('div.leaflet-control-edit-enable button')) -} -var disableEdit = function () { - happen.click(qs('.leaflet-control-edit-disable')) -} -var clickSave = function () { - happen.click(qs('.leaflet-control-edit-save')) -} -var clickCancel = function () { - var _confirm = window.confirm - window.confirm = function (text) { - return true - } - happen.click(qs('button.leaflet-control-edit-cancel')) - happen.once(document.body, { type: 'keypress', keyCode: 13 }) - window.confirm = _confirm -} -var changeInputValue = function (input, value) { - input.value = value - happen.once(input, { type: 'input' }) - happen.once(input, { type: 'blur' }) -} -var changeSelectValue = function (path_or_select, value) { - if (typeof path_or_select === 'string') path_or_select = qs(path_or_select) - var found = false - for (var i = 0; i < path_or_select.length; i++) { - if (path_or_select.options[i].value === value) { - path_or_select.options[i].selected = true - found = true - } - } - happen.once(path_or_select, { type: 'change' }) - if (!found) - throw new Error('Value ' + value + 'not found in select ' + path_or_select) - return path_or_select -} -var cleanAlert = function () { - L.DomUtil.removeClass(qs('#map'), 'umap-alert') - L.DomUtil.get('umap-alert-container').innerHTML = '' - UI_ALERT_ID = null // Prevent setTimeout to be called -} -var defaultDatalayerData = function (custom) { - var _default = { - iconClass: 'Default', - name: 'Elephants', - displayOnLoad: true, - id: 62, - pictogram_url: null, - weight: null, - fillColor: '', - color: '', - stroke: true, - smoothFactor: null, - dashArray: '', - fill: true, - } - return L.extend({}, _default, custom) -} - -function initMap(options) { - default_options = { - type: 'Feature', - properties: { - umap_id: 42, - datalayers: [], - urls: { - map: '/map/{slug}_{pk}', - datalayer_view: '/datalayer/{pk}/', - map_update: '/map/{map_id}/update/settings/', - map_old_url: '/map/{username}/{slug}/', - map_clone: '/map/{map_id}/update/clone/', - map_short_url: '/m/{pk}/', - map_anonymous_edit_url: '/map/anonymous-edit/{signature}', - map_new: '/map/new/', - datalayer_update: '/map/{map_id}/datalayer/update/{pk}/', - map_delete: '/map/{map_id}/update/delete/', - map_create: '/map/create/', - logout: '/logout/', - datalayer_create: '/map/{map_id}/datalayer/create/', - login_popup_end: '/login/popupd/', - login: '/login/', - datalayer_delete: '/map/{map_id}/datalayer/delete/{pk}/', - datalayer_versions: '/map/{map_id}/datalayer/{pk}/versions/', - datalayer_version: '/datalayer/{pk}/{name}', - pictogram_list_json: '/pictogram/json/', - map_update_permissions: '/map/{map_id}/update/permissions/', - map_download: '/map/{map_id}/download/', - }, - default_iconUrl: '../src/img/marker.svg', - zoom: 6, - share_statuses: [ - [1, 'Tout le monde (public)'], - [2, 'Quiconque a le lien'], - [3, 'Éditeurs uniquement'], - ], - tilelayers: [ - { - attribution: '\u00a9 OSM Contributors', - name: 'OpenStreetMap', - url_template: 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - minZoom: 0, - maxZoom: 18, - id: 1, - selected: true, - }, - { - attribution: 'HOT and friends', - name: 'HOT OSM-fr server', - url_template: 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - rank: 99, - minZoom: 0, - maxZoom: 20, - id: 2, - }, - ], - tilelayer: { - attribution: 'HOT and friends', - name: 'HOT OSM-fr server', - url_template: 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - rank: 99, - minZoom: 0, - maxZoom: 20, - id: 2, - }, - licences: { - 'No licence set': { - url: '', - name: 'No licence set', - }, - 'Licence ouverte/Open Licence': { - url: 'http://www.data.gouv.fr/Licence-Ouverte-Open-Licence', - name: 'Licence ouverte/Open Licence', - }, - 'WTFPL': { - url: 'http://www.wtfpl.net/', - name: 'WTFPL', - }, - 'ODbl': { - url: 'http://opendatacommons.org/licenses/odbl/', - name: 'ODbl', - }, - }, - name: 'name of the map', - description: 'The description of the map', - locale: 'en', - editMode: 'advanced', - moreControl: true, - scaleControl: true, - miniMap: false, - datalayersControl: true, - displayCaptionOnLoad: false, - displayPopupFooter: false, - displayDataBrowserOnLoad: false, - permissions: { - share_status: 1, - owner: { - id: 1, - name: 'ybon', - url: '/en/user/ybon/', - }, - editors: [], - }, - user: { - id: 1, - name: 'foofoo', - url: '/en/me', - }, - }, - } - options = options || {} - options.properties = L.extend({}, default_options.properties, options) - options.geometry = { - type: 'Point', - coordinates: [5.0592041015625, 52.05924589011585], - } - return new U.Map('map', options) -} - -var RESPONSES = { - datalayer62_GET: { - crs: null, - type: 'FeatureCollection', - _umap_options: defaultDatalayerData(), - features: [ - { - geometry: { - type: 'Point', - coordinates: [-0.274658203125, 52.57634993749885], - }, - type: 'Feature', - id: 1807, - properties: { _umap_options: { color: 'OliveDrab' }, name: 'test' }, - }, - { - geometry: { - type: 'LineString', - coordinates: [ - [-0.5712890625, 54.47642158429295], - [0.439453125, 54.610254981579146], - [1.724853515625, 53.44880683542759], - [4.163818359375, 53.98839506479995], - [5.306396484375, 53.533778184257805], - [6.591796875, 53.70971358510174], - [7.042236328124999, 53.35055131839989], - ], - }, - type: 'Feature', - id: 20, - properties: { _umap_options: { fill: false, opacity: 0.6 }, name: 'test' }, - }, - { - geometry: { - type: 'Polygon', - coordinates: [ - [ - [11.25, 53.585983654559804], - [10.1513671875, 52.9751081817353], - [12.689208984375, 52.16719363541221], - [14.084472656249998, 53.199451902831555], - [12.63427734375, 53.61857936489517], - [11.25, 53.585983654559804], - [11.25, 53.585983654559804], - ], - ], - }, - type: 'Feature', - id: 76, - properties: { name: 'name poly' }, - }, - ], - }, - // This one is non browsable - datalayer63_GET: { - crs: null, - type: 'FeatureCollection', - _umap_options: defaultDatalayerData({ id: 63, browsable: false }), - features: [ - { - geometry: { - type: 'Polygon', - coordinates: [ - [ - [5.545478, 45.068383], - [5.545907, 45.067277], - [5.548439, 45.067565], - [5.552516, 45.06752], - [5.553288, 45.068217], - [5.549405, 45.069247], - [5.548224, 45.071005], - [5.545907, 45.071096], - [5.545478, 45.068383], - ], - ], - }, - type: 'Feature', - id: 76, - properties: { name: 'non browsable 1' }, - }, - { - type: 'Feature', - properties: { - _umap_options: { - color: 'SteelBlue', - }, - name: 'non browsable 2', - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [5.550542, 45.071717], - [5.548182, 45.071051], - [5.549426, 45.069232], - [5.553331, 45.068171], - [5.554812, 45.070869], - [5.553396, 45.072384], - [5.550542, 45.071717], - ], - ], - }, - }, - ], - }, - // This one is not shown at load - datalayer64_GET: { - crs: null, - type: 'FeatureCollection', - _umap_options: defaultDatalayerData({ - name: 'hidden', - id: 64, - displayOnLoad: false, - }), - features: [ - { - geometry: { - type: 'Polygon', - coordinates: [ - [ - [5.545478, 45.068383], - [5.545907, 45.067277], - [5.548439, 45.067565], - [5.552516, 45.06752], - [5.553288, 45.068217], - [5.549405, 45.069247], - [5.548224, 45.071005], - [5.545907, 45.071096], - [5.545478, 45.068383], - ], - ], - }, - type: 'Feature', - id: 76, - properties: { name: 'not shown at load 1' }, - }, - { - type: 'Feature', - properties: { - _umap_options: { - color: 'AliceBlue', - }, - name: 'not shown at load 2', - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [5.550542, 45.071717], - [5.548182, 45.071051], - [5.549426, 45.069232], - [5.553331, 45.068171], - [5.554812, 45.070869], - [5.553396, 45.072384], - [5.550542, 45.071717], - ], - ], - }, - }, - ], - }, -} - -var kml_example = - '' + - '' + - '' + - 'Simple point' + - 'Here is a simple description.' + - '' + - '-122.0822035425683,37.42228990140251,0' + - '' + - '' + - '' + - 'Simple path' + - 'Simple description' + - '' + - '-112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357' + - '' + - '' + - '' + - 'Simple polygon' + - 'A description.' + - '' + - '' + - '' + - '' + - ' -77.05788457660967,38.87253259892824,100 ' + - ' -77.05465973756702,38.87291016281703,100 ' + - ' -77.05315536854791,38.87053267794386,100 ' + - ' -77.05788457660967,38.87253259892824,100 ' + - '' + - '' + - '' + - '' + - '' + - '' - -var gpx_example = - '' + - ' 1374Simple PointSimple description' + - ' ' + - ' Simple path' + - ' Simple description' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - '' - -var csv_example = - 'Foo,Latitude,Longitude,title,description\n' + - 'bar,41.34,122.86,a point somewhere,the description of this point' - -// Make Sinon log readable -sinon.format = function (what) { - if (typeof what === 'object') { - return JSON.stringify(what, null, 4) - } else if (typeof what === 'undefined') { - return '' - } else { - return what.toString() - } -} diff --git a/umap/static/umap/test/index.html b/umap/static/umap/test/index.html deleted file mode 100644 index 66ce24ef..00000000 --- a/umap/static/umap/test/index.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - Umap front Tests - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -