Basic testing for AddMapWithAILayerAction + a fix for an NPE

Signed-off-by: Taylor Smock <taylor.smock@kaart.com>
pull/1/head
Taylor Smock 2020-06-30 13:15:07 -06:00
rodzic f4ad6b7421
commit 6ec23bb0a9
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 625F6A74A3E4311A
3 zmienionych plików z 96 dodań i 9 usunięć

Wyświetl plik

@ -11,6 +11,7 @@ import org.openstreetmap.josm.actions.JosmAction;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.OsmData;
import org.openstreetmap.josm.gui.MainApplication;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
import org.openstreetmap.josm.gui.util.GuiHelper;
@ -22,6 +23,7 @@ import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAIInfo;
import org.openstreetmap.josm.tools.ImageProvider;
import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
import org.openstreetmap.josm.tools.ImageResource;
import org.openstreetmap.josm.tools.JosmRuntimeException;
import org.openstreetmap.josm.tools.Logging;
/**
@ -54,9 +56,16 @@ public class AddMapWithAILayerAction extends JosmAction implements AdaptableActi
}
});
} else {
ImageResource resource = new ImageResource(
this.info.getSourceCategory().getIcon(ImageSizes.MENU).getImage());
resource.attachImageIcon(this);
try {
ImageResource resource = new ImageResource(
this.info.getSourceCategory().getIcon(ImageSizes.MENU).getImage());
resource.attachImageIcon(this);
} catch (JosmRuntimeException e) {
// Eclipse doesn't like giving applications their resources...
if (!e.getMessage().contains("failed to locate image")) {
throw e;
}
}
}
}
@ -72,10 +81,10 @@ public class AddMapWithAILayerAction extends JosmAction implements AdaptableActi
if (layer != null && !layer.getData().getDataSourceBounds().isEmpty()) {
ds = layer.getDataSet();
boundsSource = ds;
} else if (MainApplication.getLayerManager().getActiveData() != null
&& !MainApplication.getLayerManager().getActiveData().getDataSourceBounds().isEmpty()) {
boundsSource = MainApplication.getLayerManager().getActiveData();
ds = MapWithAIDataUtils.getLayer(true).getDataSet();
} else if (getDataLayer() != null && !getDataLayer().getDataSet().getDataSourceBounds().isEmpty()) {
boundsSource = getDataLayer().getDataSet();
layer = MapWithAIDataUtils.getLayer(true);
ds = layer.getDataSet();
} else {
boundsSource = null;
ds = null;
@ -90,7 +99,14 @@ public class AddMapWithAILayerAction extends JosmAction implements AdaptableActi
}
}));
}
MapWithAIDataUtils.getLayer(false).addDownloadedInfo(info);
if (layer != null) {
layer.addDownloadedInfo(info);
}
}
private OsmDataLayer getDataLayer() {
return MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class).stream()
.filter(i -> !(i instanceof MapWithAILayer)).findFirst().orElse(null);
}
@Override

Wyświetl plik

@ -0,0 +1,71 @@
// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.mapwithai.actions;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.awaitility.Awaitility;
import org.awaitility.Durations;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.openstreetmap.josm.data.Bounds;
import org.openstreetmap.josm.data.DataSource;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.gui.MainApplication;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAIDataUtils;
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAILayer;
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAIInfo;
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAILayerInfo;
import org.openstreetmap.josm.plugins.mapwithai.testutils.MapWithAITestRules;
import org.openstreetmap.josm.testutils.JOSMTestRules;
class AddMapWithAILayerActionTest {
@RegisterExtension
JOSMTestRules rule = new MapWithAITestRules().wiremock().sources().projection();
@Test
void test() {
MapWithAIInfo info = MapWithAILayerInfo.getInstance().getLayers().stream()
.filter(i -> i.getName().equalsIgnoreCase("MapWithAI")).findAny().orElse(null);
AddMapWithAILayerAction action = new AddMapWithAILayerAction(info);
assertDoesNotThrow(() -> action.actionPerformed(null));
OsmDataLayer osmLayer = new OsmDataLayer(new DataSet(), "TEST DATA", null);
MainApplication.getLayerManager().addLayer(osmLayer);
osmLayer.getDataSet()
.addDataSource(new DataSource(new Bounds(39.095376, -108.4495519, 39.0987811, -108.4422314), "TEST"));
assertNull(MapWithAIDataUtils.getLayer(false));
action.updateEnabledState();
action.actionPerformed(null);
Awaitility.await().atMost(Durations.FIVE_SECONDS).until(() -> MapWithAIDataUtils.getLayer(false) != null);
assertNotNull(MapWithAIDataUtils.getLayer(false));
MainApplication.getLayerManager().removeLayer(MapWithAIDataUtils.getLayer(false));
MapWithAILayerInfo.getInstance().remove(info);
MapWithAILayer layer = MapWithAIDataUtils.getLayer(true);
assertTrue(layer.getDataSet().isEmpty());
action.updateEnabledState();
action.actionPerformed(null);
Awaitility.await().atMost(Durations.FIVE_SECONDS).until(() -> !layer.getDataSet().isEmpty());
assertFalse(layer.getDataSet().isEmpty());
MainApplication.getLayerManager().removeLayer(MapWithAIDataUtils.getLayer(false));
MapWithAILayer mapwithaiLayer = new MapWithAILayer(new DataSet(), "TEST", null);
MainApplication.getLayerManager().addLayer(mapwithaiLayer);
mapwithaiLayer.getDataSet()
.addDataSource(new DataSource(new Bounds(39.095376, -108.4495519, 39.0987811, -108.4422314), ""));
action.actionPerformed(null);
Awaitility.await().atMost(Durations.FIVE_SECONDS).until(() -> !mapwithaiLayer.getDataSet().isEmpty());
assertFalse(mapwithaiLayer.getDataSet().isEmpty());
}
}

Wyświetl plik

@ -219,7 +219,7 @@ public class MapWithAITestRules extends JOSMTestRules {
@Override
public Response transform(Request request, Response response, FileSource files, Parameters parameters) {
if (wireMock != null) {
if (wireMock != null && !request.getUrl().endsWith("/capabilities")) {
String origBody = response.getBodyAsString();
String newBody = origBody.replaceAll("https?:\\/\\/.*?\\/", wireMock.baseUrl() + "/");
return Response.Builder.like(response).but().body(newBody).build();