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