-module(rebar_uri_SUITE). -export([all/0, parse/1, append_path/1]). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). -include_lib("kernel/include/file.hrl"). all() -> [parse, append_path]. parse(_Config) -> #{scheme := Scheme, host := Host, path := Path} = rebar_uri:parse("https://repo.hex.pm"), ?assertEqual("https", Scheme), ?assertEqual("repo.hex.pm", Host), ?assertEqual(Path, "/"), % Normalize on OTP-23 behaviour. #{scheme := Scheme2, host := Host2, port := Port2, path := Path2, query := Query2} = rebar_uri:parse("https://repo.hex.pm:443?foo=bar"), ?assertEqual("https", Scheme2), ?assertEqual("repo.hex.pm", Host2), ?assertEqual(443, Port2), ?assertEqual(Path2, "/"), % Normalize on old http_uri behaviour ?assertEqual("foo=bar", Query2), #{scheme := Scheme3, host := Host3, path := Path3, query := Query3} = rebar_uri:parse("https://repo.hex.pm/over/here?foo=bar"), ?assertEqual("https", Scheme3), ?assertEqual("repo.hex.pm", Host3), ?assertEqual("/over/here", Path3), ?assertEqual("foo=bar", Query3), %% override default port and get it parsed as such ?assertMatch(#{port := 1337}, rebar_uri:parse("https://repo.hex.pm/", [{scheme_defaults, [{https,1337}]}])), ok. append_path(_Config) -> %% Default port for the proto is omitted if not mentioned originally {ok, Val1} = rebar_uri:append_path("https://repo.hex.pm/", "/repos/org"), ?assertEqual("https://repo.hex.pm/repos/org", Val1), %% QS elements come after the path {ok, Val2} = rebar_uri:append_path("https://repo.hex.pm?foo=bar", "/repos/org"), ?assertEqual("https://repo.hex.pm/repos/org?foo=bar", Val2), %% If the port is explicitly mentioned, keep it. ?assertEqual({ok, "https://repo.hex.pm:443/repos/org?foo=bar"}, rebar_uri:append_path("https://repo.hex.pm:443?foo=bar", "/repos/org")).