const BString& BUrl::UrlString() const { if (!fUrlStringValid) { fUrlString.Truncate(0); if (HasProtocol()) { fUrlString << fProtocol << ':'; if (HasAuthority()) fUrlString << "//"; } fUrlString << Authority(); fUrlString << Path(); if (HasRequest()) fUrlString << '?' << fRequest; if (HasFragment()) fUrlString << '#' << fFragment; fUrlStringValid = true; } return fUrlString; }
TEST(URITest, Parse) { EXPECT_THAT(parseOrDie("file://auth/x/y/z"), AllOf(Scheme("file"), Authority("auth"), Body("/x/y/z"))); EXPECT_THAT(parseOrDie("file://au%3dth/%28x%29/y/%5c%20z"), AllOf(Scheme("file"), Authority("au=th"), Body("/(x)/y/\\ z"))); EXPECT_THAT(parseOrDie("file:///%28x%29/y/%5c%20z"), AllOf(Scheme("file"), Authority(""), Body("/(x)/y/\\ z"))); EXPECT_THAT(parseOrDie("file:///x/y/z"), AllOf(Scheme("file"), Authority(""), Body("/x/y/z"))); EXPECT_THAT(parseOrDie("file:"), AllOf(Scheme("file"), Authority(""), Body(""))); EXPECT_THAT(parseOrDie("file:///x/y/z%2"), AllOf(Scheme("file"), Authority(""), Body("/x/y/z%2"))); EXPECT_THAT(parseOrDie("http://llvm.org"), AllOf(Scheme("http"), Authority("llvm.org"), Body(""))); EXPECT_THAT(parseOrDie("http://llvm.org/"), AllOf(Scheme("http"), Authority("llvm.org"), Body("/"))); EXPECT_THAT(parseOrDie("http://llvm.org/D"), AllOf(Scheme("http"), Authority("llvm.org"), Body("/D"))); EXPECT_THAT(parseOrDie("http:/"), AllOf(Scheme("http"), Authority(""), Body("/"))); EXPECT_THAT(parseOrDie("urn:isbn:0451450523"), AllOf(Scheme("urn"), Authority(""), Body("isbn:0451450523"))); EXPECT_THAT( parseOrDie("file:///c:/windows/system32/"), AllOf(Scheme("file"), Authority(""), Body("/c:/windows/system32/"))); }