diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 9332174d..f1fae6fd 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/.classpath b/diylc/diylc-swing/.classpath index 6886c607..e906f3ee 100644 --- a/diylc/diylc-swing/.classpath +++ b/diylc/diylc-swing/.classpath @@ -21,6 +21,6 @@ - + diff --git a/diylc/diylc-swing/RegressionTestRunner.launch b/diylc/diylc-swing/RegressionTestRunner.launch index 49fd3296..0b0d13a1 100644 --- a/diylc/diylc-swing/RegressionTestRunner.launch +++ b/diylc/diylc-swing/RegressionTestRunner.launch @@ -9,6 +9,6 @@ - + diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 9332174d..f1fae6fd 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 22f5f014..4a5492d2 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/ImageComparison.java b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/ImageComparison.java index 728c6ef6..2e0e8169 100644 --- a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/ImageComparison.java +++ b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/ImageComparison.java @@ -107,11 +107,6 @@ public class ImageComparison { */ private boolean drawExcludedRectangles = false; - /** - * The difference in percent between two images. - */ - private float differencePercent; - /** * Flag for filling comparison difference rectangles. */ diff --git a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageComparisonException.java b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageComparisonException.java index b53006a7..2acd903e 100644 --- a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageComparisonException.java +++ b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageComparisonException.java @@ -5,6 +5,8 @@ package com.github.romankh3.image.comparison.exception; */ public final class ImageComparisonException extends RuntimeException { + private static final long serialVersionUID = 1L; + /** * Constructs a new {@link ImageComparisonException} with the specified detail message. * The cause is not initialized, and may subsequently be initialized by a call to diff --git a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageNotFoundException.java b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageNotFoundException.java index 9c418a74..b356852c 100644 --- a/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageNotFoundException.java +++ b/diylc/diylc-swing/test/com/github/romankh3/image/comparison/exception/ImageNotFoundException.java @@ -5,6 +5,8 @@ package com.github.romankh3.image.comparison.exception; */ public class ImageNotFoundException extends RuntimeException { + private static final long serialVersionUID = 1L; + /** * Constructs a new {@link ImageNotFoundException} with the specified detail message. * The cause is not initialized, and may subsequently be initialized by a call to diff --git a/diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java b/diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java index 796974df..867d638e 100644 --- a/diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java +++ b/diylc/diylc-swing/test/org/diylc/RegressionTestRunner.java @@ -2,6 +2,12 @@ package org.diylc; import java.awt.image.BufferedImage; import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.InMemoryConfigurationManager; import org.diylc.core.IView; @@ -20,81 +26,133 @@ public class RegressionTestRunner { System.out.println("No path and command provided"); return; } - + ConfigurationManager.getInstance().initialize("diylc-test"); - + String basePath = args[0]; String command = args[1]; + String filter = null; + if (args.length > 2) { + filter = args[2]; + } + System.out.println("Running command " + command + " in: " + basePath); - File inputsDir = new File(basePath + File.separator + "input" + File.separator + "diy"); - if (!inputsDir.exists()) { - System.out.println("Could not find the input directory: " + inputsDir.getAbsolutePath()); - return; - } - File[] files = inputsDir.listFiles(); - int okCount = 0; - int failCount = 0; - for (File file : files) { - boolean fileOk = processFile(file, basePath, command); - if (fileOk) { - okCount++; - } else { - failCount++; - } - } + File inputsDir = new File(basePath + File.separator + "input"); + List collect = + visit(inputsDir, basePath, command, filter).collect(Collectors.toList()); + + long okCount = collect.stream().filter(x -> x).count(); + long failCount = collect.size() - okCount; System.out.println("Finished! OK files: " + okCount + "; Failed files: " + failCount); } - - private static boolean processFile(File file, String basePath, String command) { - System.out.print("Processing file: " + file.getName() + "..."); + + private static Stream visit(File inputsDir, String basePath, String command, + String filter) { + File[] files = inputsDir.listFiles(); + return Arrays.stream(files) + // .filter(x -> x.getAbsolutePath().contains("405")) + .parallel() + .flatMap(file -> { + if (file.isDirectory()) { + return visit(file, basePath, command, filter); + } else { + if (!file.getName().endsWith(".diy")) { + return Stream.empty(); + } + if (filter != null) { + Pattern pattern = Pattern.compile(filter, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(file.getAbsolutePath()); + boolean matchFound = matcher.find(); + if (!matchFound) { + return Stream.empty(); + } + } + return Stream.of(processFile(file, command)); + } + }); + } + + private static boolean processFile(File file, String command) { + String prefix = "File: " + file.getName() + " status: "; try { IView view = new MockView(); Presenter presenter = new Presenter(view, InMemoryConfigurationManager.getInstance()); - ProjectDrawingProvider drawingProvider = new ProjectDrawingProvider(presenter, false, true, false); + ProjectDrawingProvider drawingProvider = + new ProjectDrawingProvider(presenter, false, true, false); presenter.loadProjectFromFile(file.getAbsolutePath()); if ("PREPARE".equalsIgnoreCase(command)) { // generate PNG input image for comparison - File pngFile = new File(basePath + File.separator + "input" + File.separator + "png" + File.separator + (file.getName().replace(".diy", ".png"))); - if (!pngFile.exists()) { - DrawingExporter.getInstance().exportPNG(drawingProvider, pngFile); - } + prepareInputs(file, drawingProvider); + System.out.println(prefix + "DONE"); + return true; } else if ("TEST".equalsIgnoreCase(command)) { - // test save - File outputFile = new File(basePath + File.separator + "output" + File.separator + "diy" + File.separator + file.getName()); - if (outputFile.exists()) { - outputFile.delete(); - } - presenter.saveProjectToFile(outputFile.getAbsolutePath(), false); - - // test export png - File pngOutputFile = new File(basePath + File.separator + "output" + File.separator + "png" + File.separator + (file.getName().replace(".diy", ".png"))); - if (pngOutputFile.exists()) { - pngOutputFile.delete(); - } - DrawingExporter.getInstance().exportPNG(drawingProvider, pngOutputFile); - File pngInputFile = new File(basePath + File.separator + "input" + File.separator + "png" + File.separator + (file.getName().replace(".diy", ".png"))); - if (!pngInputFile.exists()) { - System.out.println("Input image does not exist!"); - return false; - } - - BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources(pngInputFile.getAbsolutePath()); - BufferedImage actualImage = ImageComparisonUtil.readImageFromResources(pngOutputFile.getAbsolutePath()); - - //Create ImageComparison object and compare the images. - ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage).compareImages(); - - //Check the result - if (ImageComparisonState.MATCH != imageComparisonResult.getImageComparisonState()) { - System.out.println("Images do not match!"); - return false; - } + return testOutputs(file, prefix, presenter, drawingProvider); } - System.out.println("OK"); - return true; + return false; } catch (Exception e) { - System.out.println("ERROR: " + e.getMessage()); + System.out.println(prefix + "ERROR: " + e.getMessage()); return false; } } + + private static boolean testOutputs(File file, String prefix, Presenter presenter, + ProjectDrawingProvider drawingProvider) { + File baseDir = file.getParentFile().getParentFile().getParentFile().getParentFile(); + File outputDir = new File(baseDir.getAbsolutePath() + File.separator + "output" + File.separator + + file.getParentFile().getParentFile().getName()); + File inputDir = file.getParentFile().getParentFile(); + if (!outputDir.exists()) { + outputDir.mkdirs(); + } + // test save + File outputFile = new File(outputDir.getAbsolutePath() + File.separator + "diy" + File.separator + file.getName()); + outputFile.getParentFile().mkdirs(); + if (outputFile.exists()) { + outputFile.delete(); + } + presenter.saveProjectToFile(outputFile.getAbsolutePath(), false); + + // test export png + File pngOutputFile = new File(outputDir.getAbsolutePath() + File.separator + "png" + File.separator + + file.getName().replace(".diy", ".png")); + pngOutputFile.getParentFile().mkdirs(); + if (pngOutputFile.exists()) { + pngOutputFile.delete(); + } + DrawingExporter.getInstance().exportPNG(drawingProvider, pngOutputFile); + File pngInputFile = new File(inputDir.getAbsolutePath() + File.separator + "png" + File.separator + (file.getName().replace(".diy", ".png"))); + if (!pngInputFile.exists()) { + System.out.println(prefix + "Input image does not exist!"); + return false; + } + + BufferedImage expectedImage = + ImageComparisonUtil.readImageFromResources(pngInputFile.getAbsolutePath()); + BufferedImage actualImage = + ImageComparisonUtil.readImageFromResources(pngOutputFile.getAbsolutePath()); + + File pngDiffFile = new File(outputDir.getAbsolutePath() + File.separator + "diff" + File.separator + + file.getName().replace(".diy", ".png")); + pngDiffFile.getParentFile().mkdirs(); + + ImageComparisonResult imageComparisonResult = + new ImageComparison(expectedImage, actualImage, pngDiffFile).compareImages(); + + if (ImageComparisonState.MATCH != imageComparisonResult.getImageComparisonState()) { + System.out.println(prefix + "Images do not match!"); + return false; + } + System.out.println(prefix + "OK"); + return true; + } + + private static void prepareInputs(File file, ProjectDrawingProvider drawingProvider) { + File pngDir = new File(file.getParentFile().getParentFile().getAbsolutePath() + File.separator + "png"); + File pngFile = + new File(pngDir.getAbsolutePath() + File.separator + file.getName().replace(".diy", ".png")); + pngFile.getParentFile().mkdirs(); + if (!pngFile.exists()) { + DrawingExporter.getInstance().exportPNG(drawingProvider, pngFile); + } + } } diff --git a/diylc/diylc-swing/test/org/diylc/cloud-inputs.zip b/diylc/diylc-swing/test/org/diylc/cloud-inputs.zip deleted file mode 100644 index a33ce434..00000000 Binary files a/diylc/diylc-swing/test/org/diylc/cloud-inputs.zip and /dev/null differ