@@ -233,3 +233,59 @@ fn bad_alternative_form_with_port() -> crate::Result {
233233 assert_eq ! ( url, "ssh://host.xz:21/" ) ;
234234 Ok ( ( ) )
235235}
236+
237+ #[ test]
238+ fn ipv6_address_without_port ( ) -> crate :: Result {
239+ let url = assert_url ( "ssh://[::1]/repo" , url ( Scheme :: Ssh , None , "::1" , None , b"/repo" ) ) ?;
240+ assert_eq ! ( url. host( ) , Some ( "::1" ) , "brackets are stripped for SSH" ) ;
241+ Ok ( ( ) )
242+ }
243+
244+ #[ test]
245+ fn ipv6_address_with_port ( ) -> crate :: Result {
246+ let url = assert_url ( "ssh://[::1]:22/repo" , url ( Scheme :: Ssh , None , "::1" , 22 , b"/repo" ) ) ?;
247+ assert_eq ! ( url. host( ) , Some ( "::1" ) ) ;
248+ assert_eq ! ( url. port, Some ( 22 ) ) ;
249+ Ok ( ( ) )
250+ }
251+
252+ #[ test]
253+ fn ipv6_address_with_user ( ) -> crate :: Result {
254+ let url = assert_url ( "ssh://user@[::1]/repo" , url ( Scheme :: Ssh , "user" , "::1" , None , b"/repo" ) ) ?;
255+ assert_eq ! ( url. host( ) , Some ( "::1" ) ) ;
256+ assert_eq ! ( url. user( ) , Some ( "user" ) ) ;
257+ Ok ( ( ) )
258+ }
259+
260+ #[ test]
261+ fn ipv6_address_with_user_and_port ( ) -> crate :: Result {
262+ let url = assert_url ( "ssh://user@[::1]:22/repo" , url ( Scheme :: Ssh , "user" , "::1" , 22 , b"/repo" ) ) ?;
263+ assert_eq ! ( url. host( ) , Some ( "::1" ) ) ;
264+ assert_eq ! ( url. user( ) , Some ( "user" ) ) ;
265+ assert_eq ! ( url. port, Some ( 22 ) ) ;
266+ Ok ( ( ) )
267+ }
268+
269+ #[ test]
270+ fn ipv6_full_address ( ) -> crate :: Result {
271+ let url = assert_url ( "ssh://[2001:db8::1]/repo" , url ( Scheme :: Ssh , None , "2001:db8::1" , None , b"/repo" ) ) ?;
272+ assert_eq ! ( url. host( ) , Some ( "2001:db8::1" ) ) ;
273+ Ok ( ( ) )
274+ }
275+
276+ #[ test]
277+ fn ipv6_address_scp_like ( ) -> crate :: Result {
278+ let url = assert_url ( "[::1]:repo" , url_alternate ( Scheme :: Ssh , None , "::1" , None , b"repo" ) ) ?;
279+ assert_eq ! ( url. host( ) , Some ( "::1" ) , "SCP-like format with IPv6" ) ;
280+ Ok ( ( ) )
281+ }
282+
283+ #[ test]
284+ fn ipv6_address_scp_like_with_user ( ) -> crate :: Result {
285+ let result = gix_url:: parse ( "user@[::1]:repo" . into ( ) ) ;
286+ assert ! (
287+ result. is_err( ) ,
288+ "SCP-like format with brackets is not supported - Git doesn't support this either"
289+ ) ;
290+ Ok ( ( ) )
291+ }
0 commit comments