|
42 | 42 | ### Chromium: kMissingSchemeSeparator
|
43 | 43 | ## TEST(ExtensionURLPatternTest, ParseInvalid)
|
44 | 44 | # ("http", "No scheme given"),
|
45 |
| - ("http:", "Invalid port: Port is empty"), |
46 |
| - ("http:/", "Invalid port: Port is empty"), |
47 |
| - ("about://", "Pattern without path"), |
48 |
| - ("http:/bar", "Invalid port: Port is empty"), |
| 45 | + pytest.param("http:", "Invalid port: Port is empty", id='scheme-no-slash'), |
| 46 | + pytest.param("http:/", "Invalid port: Port is empty", id='scheme-single-slash'), |
| 47 | + pytest.param("about://", "Pattern without path", id='scheme-no-path'), |
| 48 | + pytest.param( |
| 49 | + "http:/bar", |
| 50 | + "Invalid port: Port is empty", |
| 51 | + id='scheme-single-slash-path', |
| 52 | + ), |
49 | 53 |
|
50 | 54 | ### Chromium: kEmptyHost
|
51 | 55 | ## TEST(ExtensionURLPatternTest, ParseInvalid)
|
52 |
| - ("http://", "Pattern without host"), |
53 |
| - ("http:///", "Pattern without host"), |
54 |
| - ("http://:1234/", "Pattern without host"), |
55 |
| - ("http://*./", "Pattern without host"), |
| 56 | + pytest.param("http://", "Pattern without host", id='host-double-slash'), |
| 57 | + pytest.param("http:///", "Pattern without host", id='host-triple-slash'), |
| 58 | + pytest.param("http://:1234/", "Pattern without host", id='host-port'), |
| 59 | + pytest.param("http://*./", "Pattern without host", id='host-pattern'), |
56 | 60 | ## TEST(ExtensionURLPatternTest, IPv6Patterns)
|
57 |
| - ("http://[]:8888/*", "Pattern without host"), |
| 61 | + pytest.param("http://[]:8888/*", "Pattern without host", id='host-ipv6'), |
58 | 62 |
|
59 | 63 | ### Chromium: kEmptyPath
|
60 | 64 | ## TEST(ExtensionURLPatternTest, ParseInvalid)
|
|
63 | 67 |
|
64 | 68 | ### Chromium: kInvalidHost
|
65 | 69 | ## TEST(ExtensionURLPatternTest, ParseInvalid)
|
66 |
| - ("http://\0www/", "May not contain NUL byte"), |
| 70 | + pytest.param("http://\0www/", "May not contain NUL byte", id='host-nul'), |
67 | 71 | ## TEST(ExtensionURLPatternTest, IPv6Patterns)
|
68 | 72 | # No closing bracket (`]`).
|
69 |
| - ("http://[2607:f8b0:4005:805::200e/*", "Invalid IPv6 URL"), |
| 73 | + pytest.param( |
| 74 | + "http://[2607:f8b0:4005:805::200e/*", |
| 75 | + "Invalid IPv6 URL", |
| 76 | + id='host-ipv6-no-closing', |
| 77 | + ), |
70 | 78 | # Two closing brackets (`]]`).
|
71 |
| - pytest.param("http://[2607:f8b0:4005:805::200e]]/*", "Invalid IPv6 URL", marks=pytest.mark.xfail(reason="https://bugs.python.org/issue34360")), |
| 79 | + pytest.param( |
| 80 | + "http://[2607:f8b0:4005:805::200e]]/*", |
| 81 | + "Invalid IPv6 URL", |
| 82 | + marks=pytest.mark.xfail(reason="https://bugs.python.org/issue34360"), |
| 83 | + id='host-ipv6-two-closing', |
| 84 | + ), |
72 | 85 | # Two open brackets (`[[`).
|
73 |
| - ("http://[[2607:f8b0:4005:805::200e]/*", r"""Expected '\]' to match '\[' in hostname; source was "\[2607:f8b0:4005:805::200e"; host = """""), |
| 86 | + pytest.param( |
| 87 | + "http://[[2607:f8b0:4005:805::200e]/*", |
| 88 | + r"""Expected '\]' to match '\[' in hostname; source was "\[2607:f8b0:4005:805::200e"; host = """"", |
| 89 | + id='host-ipv6-two-open', |
| 90 | + ), |
74 | 91 | # Too few colons in the last chunk.
|
75 |
| - ("http://[2607:f8b0:4005:805:200e]/*", 'Invalid IPv6 address; source was "2607:f8b0:4005:805:200e"; host = ""'), |
| 92 | + pytest.param( |
| 93 | + "http://[2607:f8b0:4005:805:200e]/*", |
| 94 | + 'Invalid IPv6 address; source was "2607:f8b0:4005:805:200e"; host = ""', |
| 95 | + id='host-ipv6-colons', |
| 96 | + ), |
76 | 97 | # Non-hex piece.
|
77 |
| - ("http://[2607:f8b0:4005:805:200e:12:bogus]/*", 'Invalid IPv6 address; source was "2607:f8b0:4005:805:200e:12:bogus"; host = ""'), |
| 98 | + pytest.param( |
| 99 | + "http://[2607:f8b0:4005:805:200e:12:bogus]/*", |
| 100 | + 'Invalid IPv6 address; source was "2607:f8b0:4005:805:200e:12:bogus"; host = ""', |
| 101 | + id='host-ipv6-non-hex', |
| 102 | + ), |
78 | 103 |
|
79 | 104 | ### Chromium: kInvalidHostWildcard
|
80 | 105 | ## TEST(ExtensionURLPatternTest, ParseInvalid)
|
81 |
| - ("http://*foo/bar", "Invalid host wildcard"), |
82 |
| - ("http://foo.*.bar/baz", "Invalid host wildcard"), |
83 |
| - ("http://fo.*.ba:123/baz", "Invalid host wildcard"), |
84 |
| - ("http://foo.*/bar", "Invalid host wildcard"), |
| 106 | + pytest.param("http://*foo/bar", "Invalid host wildcard", id='host-wildcard-no-dot'), |
| 107 | + pytest.param( |
| 108 | + "http://foo.*.bar/baz", |
| 109 | + "Invalid host wildcard", |
| 110 | + id='host-wildcard-middle', |
| 111 | + ), |
| 112 | + pytest.param( |
| 113 | + "http://fo.*.ba:123/baz", |
| 114 | + "Invalid host wildcard", |
| 115 | + id='host-wildcard-middle-port', |
| 116 | + ), |
| 117 | + pytest.param("http://foo.*/bar", "Invalid host wildcard", id='host-wildcard-end'), |
85 | 118 |
|
86 | 119 | ### Chromium: kInvalidPort
|
87 | 120 | ## TEST(ExtensionURLPatternTest, Ports)
|
88 |
| - ("http://foo:/", "Invalid port: Port is empty"), |
89 |
| - ("http://*.foo:/", "Invalid port: Port is empty"), |
90 |
| - ("http://foo:com/", "Invalid port: .* 'com'"), |
91 |
| - ("http://foo:123456/", "Invalid port: Port out of range 0-65535"), |
92 |
| - ("http://foo:80:80/monkey", "Invalid port: .* '80:80'"), |
93 |
| - ("chrome://foo:1234/bar", "Ports are unsupported with chrome scheme"), |
| 121 | + pytest.param("http://foo:/", "Invalid port: Port is empty", id='port-empty'), |
| 122 | + pytest.param( |
| 123 | + "http://*.foo:/", |
| 124 | + "Invalid port: Port is empty", |
| 125 | + id='port-empty-wildcard', |
| 126 | + ), |
| 127 | + pytest.param("http://foo:com/", "Invalid port: .* 'com'", id='port-alpha'), |
| 128 | + pytest.param( |
| 129 | + "http://foo:123456/", |
| 130 | + "Invalid port: Port out of range 0-65535", |
| 131 | + id='port-range', |
| 132 | + ), |
| 133 | + pytest.param( |
| 134 | + "http://foo:80:80/monkey", |
| 135 | + "Invalid port: .* '80:80'", |
| 136 | + id='port-double', |
| 137 | + ), |
| 138 | + pytest.param( |
| 139 | + "chrome://foo:1234/bar", |
| 140 | + "Ports are unsupported with chrome scheme", |
| 141 | + id='port-chrome', |
| 142 | + ), |
94 | 143 | # No port specified, but port separator.
|
95 |
| - ("http://[2607:f8b0:4005:805::200e]:/*", "Invalid port: Port is empty"), |
| 144 | + pytest.param( |
| 145 | + "http://[2607:f8b0:4005:805::200e]:/*", |
| 146 | + "Invalid port: Port is empty", |
| 147 | + id='port-empty-ipv6', |
| 148 | + ), |
96 | 149 |
|
97 | 150 | ### Additional tests
|
98 |
| - ("http://[", "Invalid IPv6 URL"), |
99 |
| - ("http://[fc2e::bb88::edac]", 'Invalid IPv6 address; source was "fc2e::bb88::edac"; host = ""'), |
100 |
| - ("http://[fc2e:0e35:bb88::edac:fc2e:0e35:bb88:edac]", 'Invalid IPv6 address; source was "fc2e:0e35:bb88::edac:fc2e:0e35:bb88:edac"; host = ""'), |
101 |
| - ("http://[fc2e:0e35:bb88:af:edac:fc2e:0e35:bb88:edac]", 'Invalid IPv6 address; source was "fc2e:0e35:bb88:af:edac:fc2e:0e35:bb88:edac"; host = ""'), |
102 |
| - ("http://[127.0.0.1:fc2e::bb88:edac]", r'Invalid IPv6 address; source was "127\.0\.0\.1:fc2e::bb88:edac'), |
103 |
| - ("http://[fc2e::bb88", "Invalid IPv6 URL"), |
104 |
| - ("http://[fc2e:bb88:edac]", 'Invalid IPv6 address; source was "fc2e:bb88:edac"; host = ""'), |
105 |
| - ("http://[fc2e:bb88:edac::z]", 'Invalid IPv6 address; source was "fc2e:bb88:edac::z"; host = ""'), |
106 |
| - ("http://[fc2e:bb88:edac::2]:2a2", "Invalid port: .* '2a2'"), |
107 |
| - ("://", "Missing scheme"), |
| 151 | + pytest.param("http://[", "Invalid IPv6 URL", id='ipv6-single-open'), |
| 152 | + pytest.param( |
| 153 | + "http://[fc2e::bb88::edac]", |
| 154 | + 'Invalid IPv6 address; source was "fc2e::bb88::edac"; host = ""', |
| 155 | + id='ipv6-double-double', |
| 156 | + ), |
| 157 | + pytest.param( |
| 158 | + "http://[fc2e:0e35:bb88::edac:fc2e:0e35:bb88:edac]", |
| 159 | + 'Invalid IPv6 address; source was "fc2e:0e35:bb88::edac:fc2e:0e35:bb88:edac"; host = ""', |
| 160 | + id='ipv6-long-double', |
| 161 | + ), |
| 162 | + pytest.param( |
| 163 | + "http://[fc2e:0e35:bb88:af:edac:fc2e:0e35:bb88:edac]", |
| 164 | + 'Invalid IPv6 address; source was "fc2e:0e35:bb88:af:edac:fc2e:0e35:bb88:edac"; host = ""', |
| 165 | + id='ipv6-long', |
| 166 | + ), |
| 167 | + pytest.param( |
| 168 | + "http://[127.0.0.1:fc2e::bb88:edac]", |
| 169 | + r'Invalid IPv6 address; source was "127\.0\.0\.1:fc2e::bb88:edac', |
| 170 | + id='ipv6-ipv4', |
| 171 | + ), |
| 172 | + pytest.param("http://[fc2e::bb88", "Invalid IPv6 URL", id='ipv6-trailing'), |
| 173 | + pytest.param( |
| 174 | + "http://[fc2e:bb88:edac]", |
| 175 | + 'Invalid IPv6 address; source was "fc2e:bb88:edac"; host = ""', |
| 176 | + id='ipv6-short', |
| 177 | + ), |
| 178 | + pytest.param( |
| 179 | + "http://[fc2e:bb88:edac::z]", |
| 180 | + 'Invalid IPv6 address; source was "fc2e:bb88:edac::z"; host = ""', |
| 181 | + id='ipv6-z', |
| 182 | + ), |
| 183 | + pytest.param( |
| 184 | + "http://[fc2e:bb88:edac::2]:2a2", |
| 185 | + "Invalid port: .* '2a2'", |
| 186 | + id='ipv6-port', |
| 187 | + ), |
| 188 | + pytest.param("://", "Missing scheme", id='scheme-naked'), |
108 | 189 | ])
|
109 | 190 | def test_invalid_patterns(pattern, error):
|
110 | 191 | with pytest.raises(urlmatch.ParseError, match=error):
|
|
0 commit comments