From 6839f3de5522f9895b3f3fecaab818a6bb7ae30a Mon Sep 17 00:00:00 2001 From: Sergei Zimmerman Date: Thu, 28 Aug 2025 01:11:37 +0300 Subject: [PATCH] libutil-tests: Add more URL tests --- src/libutil-tests/url.cc | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/libutil-tests/url.cc b/src/libutil-tests/url.cc index b776ba671..71c416a3b 100644 --- a/src/libutil-tests/url.cc +++ b/src/libutil-tests/url.cc @@ -204,6 +204,67 @@ TEST(parseURL, parseFileURLWithQueryAndFragment) ASSERT_EQ(s, parsed.to_string()); } +TEST(parseURL, parseFileURL) +{ + auto s = "file:/none/of/your/business/"; + auto parsed = parseURL(s); + + ParsedURL expected{ + .scheme = "file", + .authority = std::nullopt, + .path = "/none/of/your/business/", + }; + + ASSERT_EQ(parsed, expected); + ASSERT_EQ(s, parsed.to_string()); +} + +TEST(parseURL, parseFileURLWithAuthority) +{ + auto s = "file://///of/your/business//"; + auto parsed = parseURL(s); + + ParsedURL expected{ + .scheme = "file", + .authority = Authority{.host = ""}, + .path = "///of/your/business//", + }; + + ASSERT_EQ(parsed.authority, expected.authority); + ASSERT_EQ(parsed, expected); + ASSERT_EQ(s, parsed.to_string()); +} + +TEST(parseURL, parseFileURLNoLeadingSlash) +{ + auto s = "file:none/of/your/business/"; + auto parsed = parseURL(s); + + ParsedURL expected{ + .scheme = "file", + .authority = std::nullopt, + .path = "none/of/your/business/", + }; + + ASSERT_EQ(parsed, expected); + ASSERT_EQ("file:none/of/your/business/", parsed.to_string()); +} + +TEST(parseURL, parseHttpTrailingSlash) +{ + auto s = "http://example.com/"; + auto parsed = parseURL(s); + + ParsedURL expected{ + .scheme = "http", + .authority = Authority{.host = "example.com"}, + .path = "/", + }; + + ASSERT_EQ(parsed, expected); + ASSERT_EQ(s, parsed.to_string()); +} + TEST(parseURL, parsedUrlsIsEqualToItself) { auto s = "http://www.example.org/file.tar.gz";