You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.6 KiB
168 lines
4.6 KiB
// Copyright 2020 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "util/url.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace openscreen {
|
|
|
|
TEST(UrlTest, Validity) {
|
|
const char* valid_cases[] = {
|
|
"http://google.com",
|
|
"unknown://google.com",
|
|
"http://user:pass@google.com",
|
|
"http://google.com:12345",
|
|
"http://google.com/path",
|
|
"http://google.com//path",
|
|
"http://google.com?k=v#fragment",
|
|
"http://user:pass@google.com:12345/path?k=v#fragment",
|
|
"http:/path",
|
|
"http:path",
|
|
};
|
|
constexpr int valid_case_count = sizeof(valid_cases) / sizeof(valid_cases[0]);
|
|
for (size_t i = 0; i < valid_case_count; i++) {
|
|
EXPECT_TRUE(Url(valid_cases[i]).is_valid()) << "Case: " << valid_cases[i];
|
|
}
|
|
|
|
const char* invalid_cases[] = {
|
|
"http://?k=v", "http:://google.com",
|
|
"http//google.com", "http://google.com:12three45",
|
|
"://google.com", "path",
|
|
};
|
|
constexpr int invalid_case_count =
|
|
sizeof(invalid_cases) / sizeof(invalid_cases[0]);
|
|
for (size_t i = 0; i < invalid_case_count; i++) {
|
|
EXPECT_FALSE(Url(invalid_cases[i]).is_valid())
|
|
<< "Case: " << invalid_cases[i];
|
|
}
|
|
}
|
|
|
|
TEST(UrlTest, Components) {
|
|
Url url("http://user:pass@google.com:99/foo;bar?q=a#ref");
|
|
|
|
EXPECT_TRUE(url.is_valid());
|
|
EXPECT_TRUE(url.has_host());
|
|
EXPECT_TRUE(url.has_port());
|
|
EXPECT_TRUE(url.has_path());
|
|
EXPECT_TRUE(url.has_query());
|
|
|
|
EXPECT_EQ("http", url.scheme());
|
|
EXPECT_EQ("google.com", url.host());
|
|
EXPECT_EQ(99, url.port());
|
|
EXPECT_EQ("/foo;bar", url.path());
|
|
EXPECT_EQ("q=a", url.query());
|
|
}
|
|
|
|
TEST(UrlTest, Copy) {
|
|
Url url1("http://user:pass@google.com:99/foo;bar?q=a#ref");
|
|
Url url2(url1);
|
|
|
|
EXPECT_TRUE(url1.is_valid());
|
|
EXPECT_TRUE(url1.has_host());
|
|
EXPECT_TRUE(url1.has_port());
|
|
EXPECT_TRUE(url1.has_path());
|
|
EXPECT_TRUE(url1.has_query());
|
|
|
|
EXPECT_EQ("http", url1.scheme());
|
|
EXPECT_EQ("google.com", url1.host());
|
|
EXPECT_EQ(99, url1.port());
|
|
EXPECT_EQ("/foo;bar", url1.path());
|
|
EXPECT_EQ("q=a", url1.query());
|
|
|
|
EXPECT_TRUE(url2.is_valid());
|
|
EXPECT_TRUE(url2.has_host());
|
|
EXPECT_TRUE(url2.has_port());
|
|
EXPECT_TRUE(url2.has_path());
|
|
EXPECT_TRUE(url2.has_query());
|
|
|
|
EXPECT_EQ("http", url2.scheme());
|
|
EXPECT_EQ("google.com", url2.host());
|
|
EXPECT_EQ(99, url2.port());
|
|
EXPECT_EQ("/foo;bar", url2.path());
|
|
EXPECT_EQ("q=a", url2.query());
|
|
}
|
|
|
|
TEST(UrlTest, Move) {
|
|
Url url1("http://user:pass@google.com:99/foo;bar?q=a#ref");
|
|
Url url2(std::move(url1));
|
|
|
|
EXPECT_FALSE(url1.is_valid());
|
|
|
|
EXPECT_TRUE(url2.is_valid());
|
|
EXPECT_TRUE(url2.has_host());
|
|
EXPECT_TRUE(url2.has_port());
|
|
EXPECT_TRUE(url2.has_path());
|
|
EXPECT_TRUE(url2.has_query());
|
|
|
|
EXPECT_EQ("http", url2.scheme());
|
|
EXPECT_EQ("google.com", url2.host());
|
|
EXPECT_EQ(99, url2.port());
|
|
EXPECT_EQ("/foo;bar", url2.path());
|
|
EXPECT_EQ("q=a", url2.query());
|
|
}
|
|
|
|
TEST(UrlTest, Assign) {
|
|
Url url1("http://user:pass@google.com:99/foo;bar?q=a#ref");
|
|
Url url2("https://example.com");
|
|
Url url3("https://example.com");
|
|
|
|
url2 = url1;
|
|
|
|
EXPECT_TRUE(url1.is_valid());
|
|
EXPECT_TRUE(url1.has_host());
|
|
EXPECT_TRUE(url1.has_port());
|
|
EXPECT_TRUE(url1.has_path());
|
|
EXPECT_TRUE(url1.has_query());
|
|
|
|
EXPECT_EQ("http", url1.scheme());
|
|
EXPECT_EQ("google.com", url1.host());
|
|
EXPECT_EQ(99, url1.port());
|
|
EXPECT_EQ("/foo;bar", url1.path());
|
|
EXPECT_EQ("q=a", url1.query());
|
|
|
|
EXPECT_TRUE(url2.is_valid());
|
|
EXPECT_TRUE(url2.has_host());
|
|
EXPECT_TRUE(url2.has_port());
|
|
EXPECT_TRUE(url2.has_path());
|
|
EXPECT_TRUE(url2.has_query());
|
|
|
|
EXPECT_EQ("http", url2.scheme());
|
|
EXPECT_EQ("google.com", url2.host());
|
|
EXPECT_EQ(99, url2.port());
|
|
EXPECT_EQ("/foo;bar", url2.path());
|
|
EXPECT_EQ("q=a", url2.query());
|
|
|
|
url3 = std::move(url1);
|
|
|
|
EXPECT_FALSE(url1.is_valid());
|
|
|
|
EXPECT_TRUE(url3.is_valid());
|
|
EXPECT_TRUE(url3.has_host());
|
|
EXPECT_TRUE(url3.has_port());
|
|
EXPECT_TRUE(url3.has_path());
|
|
EXPECT_TRUE(url3.has_query());
|
|
|
|
EXPECT_EQ("http", url3.scheme());
|
|
EXPECT_EQ("google.com", url3.host());
|
|
EXPECT_EQ(99, url3.port());
|
|
EXPECT_EQ("/foo;bar", url3.path());
|
|
EXPECT_EQ("q=a", url3.query());
|
|
}
|
|
|
|
TEST(UrlTest, Cast) {
|
|
std::string cast(
|
|
"cast:233637DE?capabilities=video_out%2Caudio_out&clientId="
|
|
"157299995976393660&autoJoinPolicy=tab_and_origin_scoped&"
|
|
"defaultActionPolicy=create_session&launchTimeout=30000");
|
|
Url url(cast);
|
|
EXPECT_TRUE(url.is_valid());
|
|
EXPECT_TRUE(url.has_query());
|
|
EXPECT_EQ(url.scheme(), "cast");
|
|
EXPECT_EQ(url.path(), "233637DE");
|
|
EXPECT_EQ(url.query(), cast.c_str() + 14);
|
|
}
|
|
|
|
} // namespace openscreen
|