// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.tools;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstreetmap.josm.JOSMFixture;
import org.openstreetmap.josm.TestUtils;
import com.kitfox.svg.SVGConst;
/**
* Unit tests of {@link ImageProvider} class.
*/
public class ImageProviderTest {
private static final class LogHandler14319 extends Handler {
boolean failed;
@Override
public void publish(LogRecord record) {
if ("Could not load image: https://host-in-the-trusted-network.com/test.jpg".equals(record.getMessage())) {
failed = true;
}
}
@Override
public void flush() {
}
@Override
public void close() throws SecurityException {
}
}
/**
* Setup test.
*/
@BeforeClass
public static void setUp() {
JOSMFixture.createUnitTestFixture().init();
}
/**
* Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/9984">#9984</a>
* @throws IOException if an error occurs during reading
*/
@Test
public void testTicket9984() throws IOException {
File file = new File(TestUtils.getRegressionDataFile(9984, "tile.png"));
assertEquals(Transparency.TRANSLUCENT, ImageProvider.read(file, true, true).getTransparency());
assertEquals(Transparency.TRANSLUCENT, ImageProvider.read(file, false, true).getTransparency());
assertEquals(Transparency.OPAQUE, ImageProvider.read(file, false, false).getTransparency());
assertEquals(Transparency.OPAQUE, ImageProvider.read(file, true, false).getTransparency());
}
/**
* Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/10030">#10030</a>
* @throws IOException if an error occurs during reading
*/
@Test
public void testTicket10030() throws IOException {
File file = new File(TestUtils.getRegressionDataFile(10030, "tile.jpg"));
BufferedImage img = ImageProvider.read(file, true, true);
assertNotNull(img);
}
/**
* Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/14319">#14319</a>
* @throws IOException if an error occurs during reading
*/
@Test
public void testTicket14319() throws IOException {
LogHandler14319 handler = new LogHandler14319();
Logger.getLogger(SVGConst.SVG_LOGGER).addHandler(handler);
ImageIcon img = new ImageProvider(
new File(TestUtils.getRegressionDataDir(14319)).getAbsolutePath(), "attack.svg").get();
assertNotNull(img);
assertFalse(handler.failed);
}
/**
* Test fetching an image using {@code wiki://} protocol.
*/
@Test
public void testWikiProtocol() {
// https://commons.wikimedia.org/wiki/File:OpenJDK_logo.svg
assertNotNull(ImageProvider.get("wiki://OpenJDK_logo.svg"));
}
/**
* Test fetching an image using {@code data:} URL.
*/
@Test
public void testDataUrl() {
// Red dot image, taken from https://en.wikipedia.org/wiki/Data_URI_scheme#HTML
assertNotNull(ImageProvider.get("data:image/png;base64," +
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4"+
"//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="));
}
}