]> WPIA git - gigi.git/commitdiff
UPD: Public Suffixes Parameterized.
authorFelix Dörre <felix@dogcraft.de>
Thu, 13 Nov 2014 11:18:48 +0000 (12:18 +0100)
committerJanis Streib <janis@dogcraft.de>
Wed, 31 Dec 2014 01:36:10 +0000 (02:36 +0100)
tests/org/cacert/gigi/util/TestPublicSuffixes.java
tests/org/cacert/gigi/util/TestPublicSuffixes.txt [new file with mode: 0644]

index 98c3e112fcaec29630ce86d17eb8bbdded2a9b02..dba88303a827296b1593d93ff2477d92d623624d 100644 (file)
@@ -2,10 +2,19 @@ package org.cacert.gigi.util;
 
 import static org.junit.Assert.*;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.IDN;
+import java.util.ArrayList;
 
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class TestPublicSuffixes {
 
     /**
@@ -13,120 +22,51 @@ public class TestPublicSuffixes {
      * http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit
      * /data/test_psl.txt?raw=1
      */
-    @Test
-    public void testMozilla() {
-        // Any copyright is dedicated to the Public Domain.
-        // http://creativecommons.org/publicdomain/zero/1.0/
+    @Parameters(name = "publicSuffix({0}) = {1}")
+    public static Iterable<String[]> genParams() throws IOException {
+        BufferedReader br = new BufferedReader(new InputStreamReader(TestPublicSuffixes.class.getResourceAsStream("TestPublicSuffixes.txt"), "UTF-8"));
+        ArrayList<String[]> result = new ArrayList<>();
+        String line;
+        while ((line = br.readLine()) != null) {
+            if (line.startsWith("//") || line.isEmpty()) {
+                continue;
+            }
+            String parseSuffix = "checkPublicSuffix(";
+            if (line.startsWith(parseSuffix)) {
+                String data = line.substring(parseSuffix.length(), line.length() - 2);
+                String[] parts = data.split(", ");
+                if (parts.length != 2) {
+                    throw new Error("Syntax error in public suffix test data file: " + line);
+                }
+                result.add(new String[] {
+                        parse(parts[0]), parse(parts[1])
+                });
+            } else {
+                throw new Error("Unparsable line: " + line);
+            }
+        }
 
-        // null input.
-        checkPublicSuffix(null, null);
-        // Mixed case.
-        checkPublicSuffix("COM", null);
-        checkPublicSuffix("example.COM", "example.com");
-        checkPublicSuffix("WwW.example.COM", "example.com");
-        // Leading dot.
-        // checkPublicSuffix(".com", null);
-        // checkPublicSuffix(".example", null);
-        // checkPublicSuffix(".example.com", null);
-        // checkPublicSuffix(".example.example", null);
-        // Unlisted TLD.
-        /*
-         * checkPublicSuffix("example", null);
-         * checkPublicSuffix("example.example", "example.example");
-         * checkPublicSuffix("b.example.example", "example.example");
-         * checkPublicSuffix("a.b.example.example", "example.example");
-         */
-        // Listed, but non-Internet, TLD.
-        checkPublicSuffix("local", null);
-        checkPublicSuffix("example.local", null);
-        checkPublicSuffix("b.example.local", null);
-        checkPublicSuffix("a.b.example.local", null);
-        // TLD with only 1 rule.
-        checkPublicSuffix("biz", null);
-        checkPublicSuffix("domain.biz", "domain.biz");
-        checkPublicSuffix("b.domain.biz", "domain.biz");
-        checkPublicSuffix("a.b.domain.biz", "domain.biz");
-        // TLD with some 2-level rules.
-        checkPublicSuffix("com", null);
-        checkPublicSuffix("example.com", "example.com");
-        checkPublicSuffix("b.example.com", "example.com");
-        checkPublicSuffix("a.b.example.com", "example.com");
-        checkPublicSuffix("uk.com", null);
-        checkPublicSuffix("example.uk.com", "example.uk.com");
-        checkPublicSuffix("b.example.uk.com", "example.uk.com");
-        checkPublicSuffix("a.b.example.uk.com", "example.uk.com");
-        checkPublicSuffix("test.ac", "test.ac");
-        // TLD with only 1 (wildcard) rule.
-        checkPublicSuffix("cy", null);
-        checkPublicSuffix("c.cy", null);
-        checkPublicSuffix("b.c.cy", "b.c.cy");
-        checkPublicSuffix("a.b.c.cy", "b.c.cy");
-        // More complex TLD.
-        checkPublicSuffix("jp", null);
-        checkPublicSuffix("test.jp", "test.jp");
-        checkPublicSuffix("www.test.jp", "test.jp");
-        checkPublicSuffix("ac.jp", null);
-        checkPublicSuffix("test.ac.jp", "test.ac.jp");
-        checkPublicSuffix("www.test.ac.jp", "test.ac.jp");
-        checkPublicSuffix("kyoto.jp", null);
-        checkPublicSuffix("test.kyoto.jp", "test.kyoto.jp");
-        checkPublicSuffix("ide.kyoto.jp", null);
-        checkPublicSuffix("b.ide.kyoto.jp", "b.ide.kyoto.jp");
-        checkPublicSuffix("a.b.ide.kyoto.jp", "b.ide.kyoto.jp");
-        checkPublicSuffix("c.kobe.jp", null);
-        checkPublicSuffix("b.c.kobe.jp", "b.c.kobe.jp");
-        checkPublicSuffix("a.b.c.kobe.jp", "b.c.kobe.jp");
-        checkPublicSuffix("city.kobe.jp", "city.kobe.jp");
-        checkPublicSuffix("www.city.kobe.jp", "city.kobe.jp");
-        // TLD with a wildcard rule and exceptions.
-        checkPublicSuffix("ck", null);
-        checkPublicSuffix("test.ck", null);
-        checkPublicSuffix("b.test.ck", "b.test.ck");
-        checkPublicSuffix("a.b.test.ck", "b.test.ck");
-        checkPublicSuffix("www.ck", "www.ck");
-        checkPublicSuffix("www.www.ck", "www.ck");
-        // US K12.
-        checkPublicSuffix("us", null);
-        checkPublicSuffix("test.us", "test.us");
-        checkPublicSuffix("www.test.us", "test.us");
-        checkPublicSuffix("ak.us", null);
-        checkPublicSuffix("test.ak.us", "test.ak.us");
-        checkPublicSuffix("www.test.ak.us", "test.ak.us");
-        checkPublicSuffix("k12.ak.us", null);
-        checkPublicSuffix("test.k12.ak.us", "test.k12.ak.us");
-        checkPublicSuffix("www.test.k12.ak.us", "test.k12.ak.us");
+        return result;
     }
 
-    @Test
-    public void testMozillaIDN() {
-        // IDN labels.
-        checkPublicSuffix("食狮.com.cn", "食狮.com.cn");
-        checkPublicSuffix("食狮.公司.cn", "食狮.公司.cn");
-        checkPublicSuffix("www.食狮.公司.cn", "食狮.公司.cn");
-        checkPublicSuffix("shishi.公司.cn", "shishi.公司.cn");
-        checkPublicSuffix("公司.cn", null);
-        checkPublicSuffix("食狮.中国", "食狮.中国");
-        checkPublicSuffix("www.食狮.中国", "食狮.中国");
-        checkPublicSuffix("shishi.中国", "shishi.中国");
-        checkPublicSuffix("中国", null);
+    private static String parse(String data) {
+        if (data.equals("null")) {
+            return null;
+        }
+        if (data.startsWith("'") && data.endsWith("'")) {
+            return data.substring(1, data.length() - 1);
+        }
+        throw new Error("Syntax error with literal: " + data);
     }
 
-    @Test
-    public void testMozillaIDNPuny() {
-        // Same as above, but punycoded.
-        checkPublicSuffix("xn--85x722f.com.cn", "xn--85x722f.com.cn");
-        checkPublicSuffix("xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn");
-        checkPublicSuffix("www.xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn");
-        checkPublicSuffix("shishi.xn--55qx5d.cn", "shishi.xn--55qx5d.cn");
-        checkPublicSuffix("xn--55qx5d.cn", null);
-        checkPublicSuffix("xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s");
-        checkPublicSuffix("www.xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s");
-        checkPublicSuffix("shishi.xn--fiqs8s", "shishi.xn--fiqs8s");
-        checkPublicSuffix("xn--fiqs8s", null);
+    @Parameter(0)
+    public String domain;
 
-    }
+    @Parameter(1)
+    public String suffix;
 
-    private void checkPublicSuffix(String domain, String suffix) {
+    @Test
+    public void testPublicSuffix() {
         if (domain != null) {
             domain = domain.toLowerCase();
         }
diff --git a/tests/org/cacert/gigi/util/TestPublicSuffixes.txt b/tests/org/cacert/gigi/util/TestPublicSuffixes.txt
new file mode 100644 (file)
index 0000000..9c7a4aa
--- /dev/null
@@ -0,0 +1,98 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+
+// null input.
+checkPublicSuffix(null, null);
+// Mixed case.
+checkPublicSuffix('COM', null);
+checkPublicSuffix('example.COM', 'example.com');
+checkPublicSuffix('WwW.example.COM', 'example.com');
+// Leading dot.
+//checkPublicSuffix('.com', null);
+//checkPublicSuffix('.example', null);
+//checkPublicSuffix('.example.com', null);
+//checkPublicSuffix('.example.example', null);
+// Unlisted TLD.
+//checkPublicSuffix('example', null);
+//checkPublicSuffix('example.example', 'example.example');
+//checkPublicSuffix('b.example.example', 'example.example');
+//checkPublicSuffix('a.b.example.example', 'example.example');
+// Listed, but non-Internet, TLD.
+checkPublicSuffix('local', null);
+checkPublicSuffix('example.local', null);
+checkPublicSuffix('b.example.local', null);
+checkPublicSuffix('a.b.example.local', null);
+// TLD with only 1 rule.
+checkPublicSuffix('biz', null);
+checkPublicSuffix('domain.biz', 'domain.biz');
+checkPublicSuffix('b.domain.biz', 'domain.biz');
+checkPublicSuffix('a.b.domain.biz', 'domain.biz');
+// TLD with some 2-level rules.
+checkPublicSuffix('com', null);
+checkPublicSuffix('example.com', 'example.com');
+checkPublicSuffix('b.example.com', 'example.com');
+checkPublicSuffix('a.b.example.com', 'example.com');
+checkPublicSuffix('uk.com', null);
+checkPublicSuffix('example.uk.com', 'example.uk.com');
+checkPublicSuffix('b.example.uk.com', 'example.uk.com');
+checkPublicSuffix('a.b.example.uk.com', 'example.uk.com');
+checkPublicSuffix('test.ac', 'test.ac');
+// TLD with only 1 (wildcard) rule.
+checkPublicSuffix('cy', null);
+checkPublicSuffix('c.cy', null);
+checkPublicSuffix('b.c.cy', 'b.c.cy');
+checkPublicSuffix('a.b.c.cy', 'b.c.cy');
+// More complex TLD.
+checkPublicSuffix('jp', null);
+checkPublicSuffix('test.jp', 'test.jp');
+checkPublicSuffix('www.test.jp', 'test.jp');
+checkPublicSuffix('ac.jp', null);
+checkPublicSuffix('test.ac.jp', 'test.ac.jp');
+checkPublicSuffix('www.test.ac.jp', 'test.ac.jp');
+checkPublicSuffix('kyoto.jp', null);
+checkPublicSuffix('test.kyoto.jp', 'test.kyoto.jp');
+checkPublicSuffix('ide.kyoto.jp', null);
+checkPublicSuffix('b.ide.kyoto.jp', 'b.ide.kyoto.jp');
+checkPublicSuffix('a.b.ide.kyoto.jp', 'b.ide.kyoto.jp');
+checkPublicSuffix('c.kobe.jp', null);
+checkPublicSuffix('b.c.kobe.jp', 'b.c.kobe.jp');
+checkPublicSuffix('a.b.c.kobe.jp', 'b.c.kobe.jp');
+checkPublicSuffix('city.kobe.jp', 'city.kobe.jp');
+checkPublicSuffix('www.city.kobe.jp', 'city.kobe.jp');
+// TLD with a wildcard rule and exceptions.
+checkPublicSuffix('ck', null);
+checkPublicSuffix('test.ck', null);
+checkPublicSuffix('b.test.ck', 'b.test.ck');
+checkPublicSuffix('a.b.test.ck', 'b.test.ck');
+checkPublicSuffix('www.ck', 'www.ck');
+checkPublicSuffix('www.www.ck', 'www.ck');
+// US K12.
+checkPublicSuffix('us', null);
+checkPublicSuffix('test.us', 'test.us');
+checkPublicSuffix('www.test.us', 'test.us');
+checkPublicSuffix('ak.us', null);
+checkPublicSuffix('test.ak.us', 'test.ak.us');
+checkPublicSuffix('www.test.ak.us', 'test.ak.us');
+checkPublicSuffix('k12.ak.us', null);
+checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us');
+checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us');
+// IDN labels.
+checkPublicSuffix('食狮.com.cn', '食狮.com.cn');
+checkPublicSuffix('食狮.公司.cn', '食狮.公司.cn');
+checkPublicSuffix('www.食狮.公司.cn', '食狮.公司.cn');
+checkPublicSuffix('shishi.公司.cn', 'shishi.公司.cn');
+checkPublicSuffix('公司.cn', null);
+checkPublicSuffix('食狮.中国', '食狮.中国');
+checkPublicSuffix('www.食狮.中国', '食狮.中国');
+checkPublicSuffix('shishi.中国', 'shishi.中国');
+checkPublicSuffix('中国', null);
+// Same as above, but punycoded.
+checkPublicSuffix('xn--85x722f.com.cn', 'xn--85x722f.com.cn');
+checkPublicSuffix('xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn');
+checkPublicSuffix('www.xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn');
+checkPublicSuffix('shishi.xn--55qx5d.cn', 'shishi.xn--55qx5d.cn');
+checkPublicSuffix('xn--55qx5d.cn', null);
+checkPublicSuffix('xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s');
+checkPublicSuffix('www.xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s');
+checkPublicSuffix('shishi.xn--fiqs8s', 'shishi.xn--fiqs8s');
+checkPublicSuffix('xn--fiqs8s', null);