@@ -52,3 +52,52 @@ void test_network_url_pattern__single(void)
5252 git_net_url_dispose (& url );
5353 }
5454}
55+
56+ void test_network_url_pattern__list (void )
57+ {
58+ git_net_url url ;
59+ size_t i ;
60+
61+ struct url_pattern url_patterns [] = {
62+ /* Wildcard matches */
63+ { "https://example.com/" , "" , false },
64+ { "https://example.com/" , "*" , true },
65+ { "https://example.com/" , ",example.com," , true },
66+ { "https://example.com/" , "foo,,example.com,,bar" , true },
67+ { "https://example.com/" , "foo,,zzz,,*,,bar" , true },
68+
69+ /* Literals */
70+ { "https://example.com/" , "example.com" , true },
71+ { "https://example.com/" , "foo.bar,example.com" , true },
72+ { "https://example.com/" , "foo.bar" , false },
73+ { "https://example.com/" , "foo.bar,example.org" , false },
74+ { "https://www.example.com/" , "foo.example.com,www.example.com,bar.example.com" , true },
75+ { "https://www.example.com/" , "foo.example.com,baz.example.com,bar.example.com" , false },
76+ { "https://foo.example.com/" , "www.example.com" , false },
77+ { "https://foo.example.com/" , "bar.example.com,www.example.com," , false },
78+
79+ /* Wildcards */
80+ { "https://example.com/" , ".example.com" , true },
81+ { "https://example.com/" , "*.example.com" , true },
82+ { "https://example.com/" , "foo.com,bar.com,.example.com" , true },
83+ { "https://example.com/" , ".foo.com,.bar.com,.example.com" , true },
84+ { "https://example.com/" , ".foo.com,.bar.com,asdf.com" , false },
85+ { "https://example.com/" , "*.foo,*.bar,*.example.com,*.asdf" , true },
86+ { "https://example.com/" , "*.foo,*.bar,*.asdf" , false },
87+
88+
89+ /* Ports! */
90+ { "https://example.com/" , "example.com:443" , true },
91+ { "https://example.com/" , "example.com:42,example.com:443,example.com:99" , true },
92+ { "https://example.com/" , "example.com:42,example.com:80,example.org:443" , false },
93+ { "https://example.com:1443/" , "example.com" , true },
94+ { "https://example.com:44/" , "example.com:443" , false },
95+ { "https://example.com:443/" , "example.com:44" , false },
96+ };
97+
98+ for (i = 0 ; i < ARRAY_SIZE (url_patterns ); i ++ ) {
99+ cl_git_pass (git_net_url_parse (& url , url_patterns [i ].url ));
100+ cl_assert_ (git_net_url_matches_pattern_list (& url , url_patterns [i ].pattern ) == url_patterns [i ].matches , url_patterns [i ].pattern );
101+ git_net_url_dispose (& url );
102+ }
103+ }
0 commit comments