Browse Source

Add test cases for the basecode configuration.

Timur Sağlam 5 years ago
parent
commit
1c9d9d5fa4

+ 56 - 0
jplag/src/test/java/de/jplag/BaseCodeTest.java

@@ -0,0 +1,56 @@
+package de.jplag;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+
+import org.junit.Test;
+
+public class BaseCodeTest extends TestBase {
+
+    @Test
+    public void testBasecodeComparison() throws ExitException {
+        checkResult(runJPlag("basecode", it -> it.setBaseCodeSubmissionName("base")));
+    }
+    
+    @Test
+    public void testWeirdPath() throws ExitException {
+        String weirdPath = "." + File.separator + ".." + File.separator + "basecode" + File.separator + "base";
+        checkResult(runJPlag("basecode", it -> it.setBaseCodeSubmissionName(weirdPath)));
+    }
+
+
+    private void checkResult(JPlagResult result) {
+        assertEquals(2, result.getNumberOfSubmissions());
+        assertEquals(1, result.getComparisons().size());
+        assertEquals(1, result.getComparisons().get(0).getMatches().size());
+
+        assertEquals(1, result.getSimilarityDistribution()[8]);
+        assertEquals(85f, result.getComparisons().get(0).similarity(), DELTA);
+    }
+
+    @Test(expected = ExitException.class)
+    public void testInvalidRoot() throws ExitException {
+        runJPlag("basecode", it -> it.setRootDirectoryName("WrongRoot"));
+    }
+
+    @Test(expected = ExitException.class)
+    public void testInvalidBasecode() throws ExitException {
+        runJPlag("basecode", it -> it.setBaseCodeSubmissionName("WrongBasecode"));
+    }
+
+    @Test(expected = ExitException.class)
+    public void testInvalidBasecode2() throws ExitException {
+        runJPlag("basecode", it -> it.setBaseCodeSubmissionName("." + File.separator + "base"));
+    }
+
+    @Test(expected = ExitException.class)
+    public void testInvalidBasecode3() throws ExitException {
+        runJPlag("basecode", it -> it.setBaseCodeSubmissionName(".." + File.separator + "base"));
+    }
+
+    @Test(expected = ExitException.class)
+    public void testInvalidBasecode4() throws ExitException {
+        runJPlag("basecode", it -> it.setBaseCodeSubmissionName(File.separator + "base" + File.separator));
+    }
+}

+ 1 - 1
jplag/src/test/java/de/jplag/NormalComparisonTest.java

@@ -59,7 +59,7 @@ public class NormalComparisonTest extends TestBase {
                         comparison.getSecondSubmission().getName().equals("E") ||
                                 comparison.getFirstSubmission().getName().equals("E"))
                 .forEach(comparison ->
-                        assertEquals(0f, comparison.similarity(), 0.1f)
+                        assertEquals(0f, comparison.similarity(), DELTA)
                 );
 
         // Hard coded assertions on selected comparisons

+ 11 - 11
jplag/src/test/java/de/jplag/ParallelComparisonTest.java

@@ -26,7 +26,7 @@ public class ParallelComparisonTest extends TestBase {
         assertEquals(1, result.getComparisons().size());
         assertEquals(1, result.getComparisons().get(0).getMatches().size());
         assertEquals(1, result.getSimilarityDistribution()[6]);
-        assertEquals(62.07f, result.getComparisons().get(0).similarity(), 0.1f);
+        assertEquals(62.07f, result.getComparisons().get(0).similarity(), DELTA);
     }
 
     /**
@@ -40,7 +40,7 @@ public class ParallelComparisonTest extends TestBase {
         assertEquals(3, result.getComparisons().size());
 
         result.getAllComparisons().forEach(comparison -> {
-            assertEquals(0f, comparison.similarity(), 0.1f);
+            assertEquals(0f, comparison.similarity(), DELTA);
         });
     }
 
@@ -59,20 +59,20 @@ public class ParallelComparisonTest extends TestBase {
         // All comparisons with E shall have no matches
         result.getAllComparisons().stream()
                 .filter(comparison -> comparison.getSecondSubmission().getName().equals("E") || comparison.getFirstSubmission().getName().equals("E"))
-                .forEach(comparison -> assertEquals(0f, comparison.similarity(), 0.1f));
+                .forEach(comparison -> assertEquals(0f, comparison.similarity(), DELTA));
 
         // Hard coded assertions on selected comparisons
-        assertEquals(24.6f, getSelectedPercent(result, "A", "B"), 0.1f);
-        assertEquals(99.7f, getSelectedPercent(result, "A", "C"), 0.1f);
-        assertEquals(77.9f, getSelectedPercent(result, "A", "D"), 0.1f);
-        assertEquals(24.6f, getSelectedPercent(result, "B", "C"), 0.1f);
-        assertEquals(28.3f, getSelectedPercent(result, "B", "D"), 0.1f);
-        assertEquals(77.9f, getSelectedPercent(result, "C", "D"), 0.1f);
+        assertEquals(24.6f, getSelectedPercent(result, "A", "B"), DELTA);
+        assertEquals(99.7f, getSelectedPercent(result, "A", "C"), DELTA);
+        assertEquals(77.9f, getSelectedPercent(result, "A", "D"), DELTA);
+        assertEquals(24.6f, getSelectedPercent(result, "B", "C"), DELTA);
+        assertEquals(28.3f, getSelectedPercent(result, "B", "D"), DELTA);
+        assertEquals(77.9f, getSelectedPercent(result, "C", "D"), DELTA);
 
         // More detailed assertions for the plagiarism in A-D
         var biggestMatch = getSelectedComparison(result, "A", "D");
-        assertEquals(96.4f, biggestMatch.get().maximalSimilarity(), 0.1f);
-        assertEquals(65.3f, biggestMatch.get().minimalSimilarity(), 0.1f);
+        assertEquals(96.4f, biggestMatch.get().maximalSimilarity(), DELTA);
+        assertEquals(65.3f, biggestMatch.get().minimalSimilarity(), DELTA);
         assertEquals(12, biggestMatch.get().getMatches().size());
 
     }

+ 2 - 1
jplag/src/test/java/de/jplag/TestBase.java

@@ -9,7 +9,8 @@ import de.jplag.options.Verbosity;
 public abstract class TestBase {
 
     private static final String BASE_PATH = "src/test/resources/de/jplag/samples";
-
+    protected static final float DELTA = 0.1f;
+    
     protected String getBasePath() {
         return BASE_PATH;
     }

+ 1 - 1
jplag/src/test/java/de/jplag/VolumeTest.java

@@ -55,7 +55,7 @@ public class VolumeTest extends TestBase {
             var key = result.getFirstSubmission().getName() + result.getSecondSubmission().getName();
 
             assertTrue(csv.containsKey(key));
-            assertEquals(csv.getOrDefault(key, -1f), result.similarity(), 0.1f);
+            assertEquals(csv.getOrDefault(key, -1f), result.similarity(), DELTA);
         });
 
     }

+ 27 - 0
jplag/src/test/resources/de/jplag/samples/basecode/A/TerrainType.java

@@ -0,0 +1,27 @@
+package carcassonne.model.terrain;
+
+import java.util.List;
+
+/**
+ * Enumeration for the terrain type. Is used to specify the terrain of a tile on its different positions.
+ * @author Timur Saglam
+ */
+public enum TerrainType {
+    CASTLE,
+    ROAD,
+    MONASTERY,
+    FIELDS,
+    OTHER;
+
+    /**
+     * Generates a list of the basic terrain types, which is every terrain except {@link Other}.
+     * @return a list of CASTLE, ROAD, MONASTERY, FIELDS.
+     */
+    public static List<TerrainType> basicTerrain() {
+        return List.of(CASTLE, ROAD, MONASTERY, FIELDS);
+    }
+
+    public String toReadableString() {
+        return toString().charAt(0) + toString().substring(1).toLowerCase();
+    }
+}

+ 30 - 0
jplag/src/test/resources/de/jplag/samples/basecode/B/TerrainType.java

@@ -0,0 +1,30 @@
+package carcassonne.model.terrain;
+
+import java.util.List;
+
+/**
+ * Enumeration for the terrain type. Is used to specify the terrain of a tile on its different positions.
+ * @author Mean Plagiarizer
+ */
+public enum TerrainType {
+    CASTLE,
+    ROAD,
+    MONASTERY,
+    FIELDS,
+    OTHER;
+
+    private static final int CONST_0 = 0;
+    private static final int CONST_1 = 1;
+
+    /**
+     * Generates a list of the basic terrain types, which is every terrain except {@link Other}.
+     * @return a list of CASTLE, ROAD, MONASTERY, FIELDS.
+     */
+    public static List<TerrainType> basicTerrain() {
+        return List.of(CASTLE, ROAD, MONASTERY, FIELDS);
+    }
+
+    public String toReadableString() {
+        return toString().charAt(CONST_0) + toString().substring(CONST_1).toLowerCase();
+    }
+}

+ 12 - 0
jplag/src/test/resources/de/jplag/samples/basecode/base/TerrainType.java

@@ -0,0 +1,12 @@
+package carcassonne.model.terrain;
+
+/**
+ * Enumeration for the terrain type. Is used to specify the terrain of a tile on its different positions.
+ */
+public enum TerrainType {
+    CASTLE,
+    ROAD,
+    MONASTERY,
+    FIELDS,
+    OTHER;
+}