Просмотр исходного кода

Add test case for the new language features of recent java versions.

Timur Sağlam 5 лет назад
Родитель
Сommit
dfe5181e05

+ 27 - 0
jplag/src/test/java/jplag/NewJavaFeaturesTest.java

@@ -0,0 +1,27 @@
+package jplag;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class NewJavaFeaturesTest extends TestBase {
+    private static final String ROOT_DIRECTORY = "NewJavaFeatures";
+
+    @Test
+    public void testSimpleDuplicate() throws ExitException {
+        JPlagResult result = runJPlagWithDefaultOptions(ROOT_DIRECTORY);
+        
+        // Two submissions, one comparison with 100% match:
+        assertEquals(2, result.getNumberOfSubmissions());
+        assertEquals(1, result.getComparisons().size());
+        var comparison = result.getComparisons().get(0);
+        assertEquals(100, comparison.percent(), Double.MIN_NORMAL);
+        
+        // Five matches that each start at the same position:
+        assertEquals(5, comparison.matches.size());
+        for (Match match : comparison.matches) {
+            assertEquals(match.startA, match.startB);
+        }
+    }
+
+}

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

@@ -9,7 +9,7 @@ public abstract class TestBase {
         JPlagOptions options = new JPlagOptions(
                 String.format("src/test/resources/samples/%s", testSampleName),
                 LanguageOption.JAVA_1_9);
-
+        options.setDebugParser(true);
         JPlag jplag = new JPlag(options);
         return jplag.run();
     }

+ 19 - 0
jplag/src/test/resources/samples/NewJavaFeatures/A/Java10.java

@@ -0,0 +1,19 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+public class Java10 {
+    
+    List<Optional<String>> test;
+    
+    public Java10() {
+        // Var type for local variables (JEP 286):
+        test = new ArrayList<>();
+        var variable = test;
+        var length = variable.toString().length();
+        test = variable;
+        test.add(Optional.of(variable.toString()));
+        System.out.println(length);
+    }
+
+}

+ 38 - 0
jplag/src/test/resources/samples/NewJavaFeatures/A/Java11.java

@@ -0,0 +1,38 @@
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.ProxySelector;
+import java.net.http.HttpClient;
+import java.net.http.HttpClient.Redirect;
+import java.net.http.HttpClient.Version;
+import java.time.Duration;
+
+public class Java11 {
+
+    public static void main(String[] args) {
+        // Var type allowed in lambda paramters (JEP 323):
+        Cal cal = (var a, var b) -> a + b;
+        int result = cal.sum(10, 20);
+        System.out.println(result);
+        
+        // New HTTP Client API:
+        HttpClient client = HttpClient.newBuilder()
+                .version(Version.HTTP_1_1)
+                .followRedirects(Redirect.NORMAL)
+                .connectTimeout(Duration.ofSeconds(20))
+                .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
+                .authenticator(Authenticator.getDefault())
+                .build();
+        System.out.println(client);
+        
+        // New string methods:
+        String text = "ABCD";
+        text.repeat(2);
+        text.isBlank();
+        text.strip();
+        text.lines();
+    }
+    
+    interface Cal {
+        int sum(int a, int b);
+    }
+}

+ 17 - 0
jplag/src/test/resources/samples/NewJavaFeatures/A/Java12.java

@@ -0,0 +1,17 @@
+import java.text.NumberFormat;
+import java.util.Locale;
+
+public class Java12 {
+    public static void main(String[] args) {
+        // New String methods:
+        String text = "ABCD";
+        text.indent(5);
+        text.transform(it -> it + "!");
+        
+        // Compact number format:
+        NumberFormat fmt = NumberFormat.getCompactNumberInstance(
+                new Locale("hi", "IN"), NumberFormat.Style.SHORT);
+        String result = fmt.format(1000);
+        System.out.println(result);
+    }
+}

+ 24 - 0
jplag/src/test/resources/samples/NewJavaFeatures/A/Java14.java

@@ -0,0 +1,24 @@
+
+public enum Java14 {
+    MONDAY,
+    TUESDAY,
+    SATURDAY,
+    SUNDAY;
+
+    public static void main(String[] args) {
+        // Advanced switch expressions (JEP 361):
+        boolean isWeekend = switch (MONDAY) {
+        case SATURDAY, SUNDAY -> true;
+        default -> false;
+        };
+        System.out.println(isWeekend);
+
+        // Text blocks (JEP 378): 
+        String query = """
+                SELECT "EMP_ID", "LAST_NAME"
+                FROM "EMPLOYEE_TB";
+                """;
+        System.out.println(query);
+    }
+
+}

+ 18 - 0
jplag/src/test/resources/samples/NewJavaFeatures/A/Java16.java

@@ -0,0 +1,18 @@
+
+public class Java16 {
+    public static void main(String[] args) {
+        // Pattern matching for instanceof (JEP 394):
+        String x = "123";
+        if (x instanceof String s) { String a = s; }
+        
+        // Record types (JEP 395):
+        Point p = new Point(1, 2);
+        System.out.println(p.add());
+    }
+    
+    record Point(int x, int y) {
+        public int add() {
+            return x + y;
+        }
+    }
+}

+ 19 - 0
jplag/src/test/resources/samples/NewJavaFeatures/B/Java10.java

@@ -0,0 +1,19 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+public class Java10 {
+    
+    List<Optional<String>> test;
+    
+    public Java10() {
+        // Var type for local variables (JEP 286):
+        test = new ArrayList<>();
+        var variable = test;
+        int length = variable.toString().length();
+        test = variable;
+        test.add(Optional.of(variable.toString()));
+        System.out.println(length);
+    }
+
+}

+ 38 - 0
jplag/src/test/resources/samples/NewJavaFeatures/B/Java11.java

@@ -0,0 +1,38 @@
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.ProxySelector;
+import java.net.http.HttpClient;
+import java.net.http.HttpClient.Redirect;
+import java.net.http.HttpClient.Version;
+import java.time.Duration;
+
+public class Java11 {
+
+    public static void main(String[] args) {
+        // Var type allowed in lambda paramters (JEP 323):
+        Cal cal = (a, b) -> a + b;
+        int result = cal.sum(10, 20);
+        System.out.println(result);
+        
+        // New HTTP Client API:
+        HttpClient client = HttpClient.newBuilder()
+                .version(Version.HTTP_1_1)
+                .followRedirects(Redirect.ALWAYS)
+                .connectTimeout(Duration.ofSeconds(15))
+                .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.de", 90)))
+                .authenticator(Authenticator.getDefault())
+                .build();
+        System.out.println(client);
+        
+        // New string methods:
+        String text = "ABCD";
+        text.repeat(4);
+        text.isBlank();
+        text.strip();
+        text.lines();
+    }
+    
+    interface Cal {
+        int sum(int a, int b);
+    }
+}

+ 17 - 0
jplag/src/test/resources/samples/NewJavaFeatures/B/Java12.java

@@ -0,0 +1,17 @@
+import java.text.NumberFormat;
+import java.util.Locale;
+
+public class Java12 {
+    public static void main(String[] args) {
+        // New String methods:
+        String text = "ABCD";
+        text.indent(2);
+        text.transform(it -> it + "?");
+        
+        // Compact number format:
+        NumberFormat fmt = NumberFormat.getCompactNumberInstance(
+                new Locale("hi", "IN"), NumberFormat.Style.SHORT);
+        String result = fmt.format(1000);
+        System.out.println(result);
+    }
+}

+ 24 - 0
jplag/src/test/resources/samples/NewJavaFeatures/B/Java14.java

@@ -0,0 +1,24 @@
+
+public enum Java14 {
+    MONDAY,
+    TUESDAY,
+    SATURDAY,
+    SUNDAY;
+
+    public static void main(String[] args) {
+        // Advanced switch expressions (JEP 361):
+        boolean isWeekend = switch (MONDAY) {
+        case FRIDAY, SATURDAY, SUNDAY -> true;
+        default -> false;
+        };
+        System.out.println(isWeekend);
+
+        // Text blocks (JEP 378): 
+        String query = """
+                SELECT "EMPLOYEE_ID", "NAME"
+                FROM "EMPLOYEE_TABLE";
+                """;
+        System.out.println(query);
+    }
+
+}

+ 18 - 0
jplag/src/test/resources/samples/NewJavaFeatures/B/Java16.java

@@ -0,0 +1,18 @@
+
+public class Java16 {
+    public static void main(String[] args) {
+        // Pattern matching for instanceof (JEP 394):
+        String x = "123";
+        if (x instanceof String text) { String answer = text; }
+        
+        // Record types (JEP 395):
+        Point q = new Point(1, 2);
+        System.out.println(q.add());
+    }
+    
+    record Point(int x, int y) {
+        public int add() {
+            return y + x;
+        }
+    }
+}