kopia lustrzana https://github.com/JOSM/MapWithAI
rodzic
0d24b66fd7
commit
6c9e6c6719
|
@ -1,12 +1,22 @@
|
||||||
// License: GPL. For details, see LICENSE file.
|
// License: GPL. For details, see LICENSE file.
|
||||||
package org.openstreetmap.josm.plugins.mapwithai.actions;
|
package org.openstreetmap.josm.plugins.mapwithai.actions;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.Action;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import org.awaitility.Awaitility;
|
import org.awaitility.Awaitility;
|
||||||
import org.awaitility.Durations;
|
import org.awaitility.Durations;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -16,6 +26,7 @@ import org.openstreetmap.josm.data.DataSource;
|
||||||
import org.openstreetmap.josm.data.osm.DataSet;
|
import org.openstreetmap.josm.data.osm.DataSet;
|
||||||
import org.openstreetmap.josm.gui.MainApplication;
|
import org.openstreetmap.josm.gui.MainApplication;
|
||||||
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
|
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
|
||||||
|
import org.openstreetmap.josm.gui.util.GuiHelper;
|
||||||
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAIDataUtils;
|
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAIDataUtils;
|
||||||
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAILayer;
|
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.MapWithAIInfo;
|
||||||
|
@ -25,6 +36,11 @@ import org.openstreetmap.josm.plugins.mapwithai.testutils.annotations.MapWithAIS
|
||||||
import org.openstreetmap.josm.plugins.mapwithai.testutils.annotations.NoExceptions;
|
import org.openstreetmap.josm.plugins.mapwithai.testutils.annotations.NoExceptions;
|
||||||
import org.openstreetmap.josm.testutils.JOSMTestRules;
|
import org.openstreetmap.josm.testutils.JOSMTestRules;
|
||||||
import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
|
import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
|
||||||
|
import org.openstreetmap.josm.tools.ImageProvider;
|
||||||
|
|
||||||
|
import com.github.tomakehurst.wiremock.WireMockServer;
|
||||||
|
import com.github.tomakehurst.wiremock.client.WireMock;
|
||||||
|
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test class for {@link AddMapWithAILayerAction}
|
* Test class for {@link AddMapWithAILayerAction}
|
||||||
|
@ -36,12 +52,13 @@ import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
|
||||||
@MapWithAISources
|
@MapWithAISources
|
||||||
class AddMapWithAILayerActionTest {
|
class AddMapWithAILayerActionTest {
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
JOSMTestRules rule = new MapWithAITestRules().projection();
|
static JOSMTestRules rule = new MapWithAITestRules().projection();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testAddMapWithAILayerActionTest() {
|
void testAddMapWithAILayerActionTest() {
|
||||||
MapWithAIInfo info = MapWithAILayerInfo.getInstance().getLayers().stream()
|
MapWithAIInfo info = MapWithAILayerInfo.getInstance().getLayers().stream()
|
||||||
.filter(i -> i.getName().equalsIgnoreCase("MapWithAI")).findAny().orElse(null);
|
.filter(i -> i.getName().equalsIgnoreCase("MapWithAI")).findAny().orElse(null);
|
||||||
|
assertNotNull(info);
|
||||||
AddMapWithAILayerAction action = new AddMapWithAILayerAction(info);
|
AddMapWithAILayerAction action = new AddMapWithAILayerAction(info);
|
||||||
assertDoesNotThrow(() -> action.actionPerformed(null));
|
assertDoesNotThrow(() -> action.actionPerformed(null));
|
||||||
OsmDataLayer osmLayer = new OsmDataLayer(new DataSet(), "TEST DATA", null);
|
OsmDataLayer osmLayer = new OsmDataLayer(new DataSet(), "TEST DATA", null);
|
||||||
|
@ -76,7 +93,44 @@ class AddMapWithAILayerActionTest {
|
||||||
action.actionPerformed(null);
|
action.actionPerformed(null);
|
||||||
Awaitility.await().atMost(Durations.FIVE_SECONDS).until(() -> !mapwithaiLayer.getDataSet().isEmpty());
|
Awaitility.await().atMost(Durations.FIVE_SECONDS).until(() -> !mapwithaiLayer.getDataSet().isEmpty());
|
||||||
assertFalse(mapwithaiLayer.getDataSet().isEmpty());
|
assertFalse(mapwithaiLayer.getDataSet().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testRemoteIcon() throws IOException, ExecutionException, InterruptedException {
|
||||||
|
final ImageIcon blankImage = ImageProvider.createBlankIcon(ImageProvider.ImageSizes.LARGEICON);
|
||||||
|
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
// BufferedImage is what the current implementation uses. Otherwise, we will
|
||||||
|
// have to copy it into a BufferedImage.
|
||||||
|
assertTrue(blankImage.getImage() instanceof BufferedImage);
|
||||||
|
final BufferedImage bi = (BufferedImage) blankImage.getImage();
|
||||||
|
ImageIO.write(bi, "png", byteArrayOutputStream);
|
||||||
|
byte[] originalImage = byteArrayOutputStream.toByteArray();
|
||||||
|
final WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().dynamicPort());
|
||||||
|
try {
|
||||||
|
wireMockServer.start();
|
||||||
|
wireMockServer.addStubMapping(wireMockServer
|
||||||
|
.stubFor(WireMock.get("/icon").willReturn(WireMock.aResponse().withBody(originalImage))));
|
||||||
|
final MapWithAIInfo info = MapWithAILayerInfo.getInstance().getLayers().stream()
|
||||||
|
.filter(i -> i.getName().equalsIgnoreCase("MapWithAI")).findAny().orElse(null);
|
||||||
|
assertNotNull(info);
|
||||||
|
final MapWithAIInfo remoteInfo = new MapWithAIInfo(info);
|
||||||
|
remoteInfo.setIcon(wireMockServer.baseUrl() + "/icon");
|
||||||
|
final AddMapWithAILayerAction action = new AddMapWithAILayerAction(remoteInfo);
|
||||||
|
GuiHelper.runInEDTAndWait(() -> {
|
||||||
|
/* Sync EDT */});
|
||||||
|
MainApplication.worker.submit(() -> {
|
||||||
|
/* Sync worker thread */}).get();
|
||||||
|
final Object image = action.getValue(Action.LARGE_ICON_KEY);
|
||||||
|
assertTrue(image instanceof ImageIcon);
|
||||||
|
final ImageIcon attachedIcon = (ImageIcon) image;
|
||||||
|
assertTrue(attachedIcon.getImage() instanceof BufferedImage);
|
||||||
|
byteArrayOutputStream.reset();
|
||||||
|
ImageIO.write((BufferedImage) attachedIcon.getImage(), "png", byteArrayOutputStream);
|
||||||
|
final byte[] downloadedImage = byteArrayOutputStream.toByteArray();
|
||||||
|
assertArrayEquals(originalImage, downloadedImage);
|
||||||
|
} finally {
|
||||||
|
wireMockServer.stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue