package it.paspiz85.nanobot.test.steps; import it.paspiz85.nanobot.platform.PlatformResolver; import it.paspiz85.nanobot.platform.UnsupportedPlatform; import it.paspiz85.nanobot.util.Point; import it.paspiz85.nanobot.util.Utils; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.TreeSet; import javax.imageio.ImageIO; import org.junit.Assert; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; /** * Step definition for tests. * * @author paspiz85 */ public class GenericSteps { public static class PlatformMock extends UnsupportedPlatform { public static PlatformMock instance() { return Utils.singleton(PlatformMock.class, () -> new PlatformMock()); } private BufferedImage screenshot; @Override protected BufferedImage doScreenshot(final Point p1, final Point p2) { return getSubimage(screenshot, p1, p2); } @Override protected Color getColor(final Point point) { return new Color(screenshot.getRGB(point.x(), point.y())); } public void setScreenshot(final BufferedImage screenshot) { this.screenshot = screenshot; } } static { PlatformResolver.instance().setPreferredPlatform(PlatformMock.class); } public static void initScreenshotMock() { final BufferedImage screenshot = ScenarioContext.get("screenshot", BufferedImage.class); PlatformMock.instance().setScreenshot(screenshot); ; } @Given("^screenshot saved as (.*)$") public void givenScreenshot(final String imagefile) throws IOException { BufferedImage screenshot; final URI uri = URI.create(imagefile); switch (uri.getScheme()) { case "classpath": try (InputStream inStream = getClass().getResourceAsStream(uri.getPath())) { screenshot = ImageIO.read(inStream); } break; default: try (InputStream inStream = new FileInputStream(uri.getPath())) { screenshot = ImageIO.read(inStream); } break; } ScenarioContext.put("screenshot", screenshot); } private Point parsePoint(final String coords) { Point point = null; if (!"null".equals(coords)) { final String[] split = coords.substring(1, coords.length() - 1).split(","); Assert.assertEquals(2, split.length); point = new Point(Integer.parseInt(split[0].trim()), Integer.parseInt(split[1].trim())); } return point; } @Then("^check is (.*)$") public void thenCheckIs(final Boolean check) { Assert.assertEquals(check, ScenarioContext.get("check", Boolean.class)); } @Then("^point found at (.*)$") public void thenPointFoundAt(final String coords) { final Point point = parsePoint(coords); Assert.assertEquals(point, ScenarioContext.get("point", Point.class)); } @Then("^points found are (.*)$") public void thenPointsFoundAre(final String pointset) { // os.saveImage(screenshot, "test"); final String[] coords = pointset.split(";"); final TreeSet<Point> expected = new TreeSet<Point>(); for (final String c : coords) { final Point point = parsePoint(c.trim()); if (point != null) { expected.add(point); } } final Object actual = ScenarioContext.get("pointset"); Assert.assertEquals(expected, actual); } }