aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/net/tests/pub_domains.rs
blob: ea58e7650e3677fde51982a91c9c4835115b049f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */

use net_traits::pub_domains::{is_pub_domain, is_reg_domain, pub_suffix, reg_suffix};

// These tests may need to be updated if the PSL changes.

#[test]
fn test_is_pub_domain_plain() {
    assert!(is_pub_domain("com"));
    assert!(is_pub_domain(".org"));
    assert!(is_pub_domain("za.org"));
    assert!(is_pub_domain("xn--od0alg.hk"));
    assert!(is_pub_domain("xn--krdsherad-m8a.no"));
}

#[test]
fn test_is_pub_domain_wildcard() {
    assert!(is_pub_domain("hello.bd"));
    assert!(is_pub_domain("world.jm"));
    assert!(is_pub_domain("toto.kobe.jp"));
}

#[test]
fn test_is_pub_domain_exception() {
    assert_eq!(is_pub_domain("www.ck"), false);
    assert_eq!(is_pub_domain("city.kawasaki.jp"), false);
    assert_eq!(is_pub_domain("city.nagoya.jp"), false);
    assert_eq!(is_pub_domain("teledata.mz"), false);
}

#[test]
fn test_is_pub_domain_not() {
    assert_eq!(is_pub_domain(""), false);
    assert_eq!(is_pub_domain("."), false);
    assert_eq!(is_pub_domain("..."), false);
    assert_eq!(is_pub_domain(".servo.org"), false);
    assert_eq!(is_pub_domain("www.mozilla.org"), false);
    assert_eq!(is_pub_domain("publicsuffix.org"), false);
    assert_eq!(is_pub_domain("hello.world.jm"), false);
    assert_eq!(is_pub_domain("toto.toto.kobe.jp"), false);
}

#[test]
fn test_is_pub_domain() {
    assert!(!is_pub_domain("city.yokohama.jp"));
    assert!(!is_pub_domain("foo.bar.baz.yokohama.jp"));
    assert!(!is_pub_domain("foo.bar.city.yokohama.jp"));
    assert!(!is_pub_domain("foo.bar.com"));
    assert!(!is_pub_domain("foo.bar.tokyo.jp"));
    assert!(!is_pub_domain("foo.bar.yokohama.jp"));
    assert!(!is_pub_domain("foo.city.yokohama.jp"));
    assert!(!is_pub_domain("foo.com"));
    assert!(!is_pub_domain("foo.tokyo.jp"));
    assert!(!is_pub_domain("yokohama.jp"));
    assert!(is_pub_domain("com"));
    assert!(is_pub_domain("foo.yokohama.jp"));
    assert!(is_pub_domain("jp"));
    assert!(is_pub_domain("tokyo.jp"));
}

#[test]
fn test_is_reg_domain() {
    assert!(!is_reg_domain("com"));
    assert!(!is_reg_domain("foo.bar.baz.yokohama.jp"));
    assert!(!is_reg_domain("foo.bar.com"));
    assert!(!is_reg_domain("foo.bar.tokyo.jp"));
    assert!(!is_reg_domain("foo.city.yokohama.jp"));
    assert!(!is_reg_domain("foo.yokohama.jp"));
    assert!(!is_reg_domain("jp"));
    assert!(!is_reg_domain("tokyo.jp"));
    assert!(is_reg_domain("city.yokohama.jp"));
    assert!(is_reg_domain("foo.bar.yokohama.jp"));
    assert!(is_reg_domain("foo.com"));
    assert!(is_reg_domain("foo.tokyo.jp"));
    assert!(is_reg_domain("yokohama.jp"));
}

#[test]
fn test_pub_suffix() {
    assert_eq!(pub_suffix("city.yokohama.jp"), "yokohama.jp");
    assert_eq!(pub_suffix("com"), "com");
    assert_eq!(pub_suffix("foo.bar.baz.yokohama.jp"), "baz.yokohama.jp");
    assert_eq!(pub_suffix("foo.bar.com"), "com");
    assert_eq!(pub_suffix("foo.bar.tokyo.jp"), "tokyo.jp");
    assert_eq!(pub_suffix("foo.bar.yokohama.jp"), "bar.yokohama.jp");
    assert_eq!(pub_suffix("foo.city.yokohama.jp"), "yokohama.jp");
    assert_eq!(pub_suffix("foo.com"), "com");
    assert_eq!(pub_suffix("foo.tokyo.jp"), "tokyo.jp");
    assert_eq!(pub_suffix("foo.yokohama.jp"), "foo.yokohama.jp");
    assert_eq!(pub_suffix("jp"), "jp");
    assert_eq!(pub_suffix("tokyo.jp"), "tokyo.jp");
    assert_eq!(pub_suffix("yokohama.jp"), "jp");
}

#[test]
fn test_reg_suffix() {
    assert_eq!(reg_suffix("city.yokohama.jp"), "city.yokohama.jp");
    assert_eq!(reg_suffix("com"), "com");
    assert_eq!(reg_suffix("foo.bar.baz.yokohama.jp"), "bar.baz.yokohama.jp");
    assert_eq!(reg_suffix("foo.bar.com"), "bar.com");
    assert_eq!(reg_suffix("foo.bar.tokyo.jp"), "bar.tokyo.jp");
    assert_eq!(reg_suffix("foo.bar.yokohama.jp"), "foo.bar.yokohama.jp");
    assert_eq!(reg_suffix("foo.city.yokohama.jp"), "city.yokohama.jp");
    assert_eq!(reg_suffix("foo.com"), "foo.com");
    assert_eq!(reg_suffix("foo.tokyo.jp"), "foo.tokyo.jp");
    assert_eq!(reg_suffix("foo.yokohama.jp"), "foo.yokohama.jp");
    assert_eq!(reg_suffix("jp"), "jp");
    assert_eq!(reg_suffix("tokyo.jp"), "tokyo.jp");
    assert_eq!(reg_suffix("yokohama.jp"), "yokohama.jp");
}

#[test]
fn test_weirdness() {
    // These are weird results, but AFAICT they are spec-compliant.
    assert_ne!(
        pub_suffix("city.yokohama.jp"),
        pub_suffix(pub_suffix("city.yokohama.jp"))
    );
    assert!(!is_pub_domain(pub_suffix("city.yokohama.jp")));
}