1*3f982cf4SFabien Sanglard // Copyright 2020 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard
5*3f982cf4SFabien Sanglard #include "util/url.h"
6*3f982cf4SFabien Sanglard
7*3f982cf4SFabien Sanglard #include "gtest/gtest.h"
8*3f982cf4SFabien Sanglard
9*3f982cf4SFabien Sanglard namespace openscreen {
10*3f982cf4SFabien Sanglard
TEST(UrlTest,Validity)11*3f982cf4SFabien Sanglard TEST(UrlTest, Validity) {
12*3f982cf4SFabien Sanglard const char* valid_cases[] = {
13*3f982cf4SFabien Sanglard "http://google.com",
14*3f982cf4SFabien Sanglard "unknown://google.com",
15*3f982cf4SFabien Sanglard "http://user:[email protected]",
16*3f982cf4SFabien Sanglard "http://google.com:12345",
17*3f982cf4SFabien Sanglard "http://google.com/path",
18*3f982cf4SFabien Sanglard "http://google.com//path",
19*3f982cf4SFabien Sanglard "http://google.com?k=v#fragment",
20*3f982cf4SFabien Sanglard "http://user:[email protected]:12345/path?k=v#fragment",
21*3f982cf4SFabien Sanglard "http:/path",
22*3f982cf4SFabien Sanglard "http:path",
23*3f982cf4SFabien Sanglard };
24*3f982cf4SFabien Sanglard constexpr int valid_case_count = sizeof(valid_cases) / sizeof(valid_cases[0]);
25*3f982cf4SFabien Sanglard for (size_t i = 0; i < valid_case_count; i++) {
26*3f982cf4SFabien Sanglard EXPECT_TRUE(Url(valid_cases[i]).is_valid()) << "Case: " << valid_cases[i];
27*3f982cf4SFabien Sanglard }
28*3f982cf4SFabien Sanglard
29*3f982cf4SFabien Sanglard const char* invalid_cases[] = {
30*3f982cf4SFabien Sanglard "http://?k=v", "http:://google.com",
31*3f982cf4SFabien Sanglard "http//google.com", "http://google.com:12three45",
32*3f982cf4SFabien Sanglard "://google.com", "path",
33*3f982cf4SFabien Sanglard };
34*3f982cf4SFabien Sanglard constexpr int invalid_case_count =
35*3f982cf4SFabien Sanglard sizeof(invalid_cases) / sizeof(invalid_cases[0]);
36*3f982cf4SFabien Sanglard for (size_t i = 0; i < invalid_case_count; i++) {
37*3f982cf4SFabien Sanglard EXPECT_FALSE(Url(invalid_cases[i]).is_valid())
38*3f982cf4SFabien Sanglard << "Case: " << invalid_cases[i];
39*3f982cf4SFabien Sanglard }
40*3f982cf4SFabien Sanglard }
41*3f982cf4SFabien Sanglard
TEST(UrlTest,Components)42*3f982cf4SFabien Sanglard TEST(UrlTest, Components) {
43*3f982cf4SFabien Sanglard Url url("http://user:[email protected]:99/foo;bar?q=a#ref");
44*3f982cf4SFabien Sanglard
45*3f982cf4SFabien Sanglard EXPECT_TRUE(url.is_valid());
46*3f982cf4SFabien Sanglard EXPECT_TRUE(url.has_host());
47*3f982cf4SFabien Sanglard EXPECT_TRUE(url.has_port());
48*3f982cf4SFabien Sanglard EXPECT_TRUE(url.has_path());
49*3f982cf4SFabien Sanglard EXPECT_TRUE(url.has_query());
50*3f982cf4SFabien Sanglard
51*3f982cf4SFabien Sanglard EXPECT_EQ("http", url.scheme());
52*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url.host());
53*3f982cf4SFabien Sanglard EXPECT_EQ(99, url.port());
54*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url.path());
55*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url.query());
56*3f982cf4SFabien Sanglard }
57*3f982cf4SFabien Sanglard
TEST(UrlTest,Copy)58*3f982cf4SFabien Sanglard TEST(UrlTest, Copy) {
59*3f982cf4SFabien Sanglard Url url1("http://user:[email protected]:99/foo;bar?q=a#ref");
60*3f982cf4SFabien Sanglard Url url2(url1);
61*3f982cf4SFabien Sanglard
62*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.is_valid());
63*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_host());
64*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_port());
65*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_path());
66*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_query());
67*3f982cf4SFabien Sanglard
68*3f982cf4SFabien Sanglard EXPECT_EQ("http", url1.scheme());
69*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url1.host());
70*3f982cf4SFabien Sanglard EXPECT_EQ(99, url1.port());
71*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url1.path());
72*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url1.query());
73*3f982cf4SFabien Sanglard
74*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.is_valid());
75*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_host());
76*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_port());
77*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_path());
78*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_query());
79*3f982cf4SFabien Sanglard
80*3f982cf4SFabien Sanglard EXPECT_EQ("http", url2.scheme());
81*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url2.host());
82*3f982cf4SFabien Sanglard EXPECT_EQ(99, url2.port());
83*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url2.path());
84*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url2.query());
85*3f982cf4SFabien Sanglard }
86*3f982cf4SFabien Sanglard
TEST(UrlTest,Move)87*3f982cf4SFabien Sanglard TEST(UrlTest, Move) {
88*3f982cf4SFabien Sanglard Url url1("http://user:[email protected]:99/foo;bar?q=a#ref");
89*3f982cf4SFabien Sanglard Url url2(std::move(url1));
90*3f982cf4SFabien Sanglard
91*3f982cf4SFabien Sanglard EXPECT_FALSE(url1.is_valid());
92*3f982cf4SFabien Sanglard
93*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.is_valid());
94*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_host());
95*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_port());
96*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_path());
97*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_query());
98*3f982cf4SFabien Sanglard
99*3f982cf4SFabien Sanglard EXPECT_EQ("http", url2.scheme());
100*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url2.host());
101*3f982cf4SFabien Sanglard EXPECT_EQ(99, url2.port());
102*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url2.path());
103*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url2.query());
104*3f982cf4SFabien Sanglard }
105*3f982cf4SFabien Sanglard
TEST(UrlTest,Assign)106*3f982cf4SFabien Sanglard TEST(UrlTest, Assign) {
107*3f982cf4SFabien Sanglard Url url1("http://user:[email protected]:99/foo;bar?q=a#ref");
108*3f982cf4SFabien Sanglard Url url2("https://example.com");
109*3f982cf4SFabien Sanglard Url url3("https://example.com");
110*3f982cf4SFabien Sanglard
111*3f982cf4SFabien Sanglard url2 = url1;
112*3f982cf4SFabien Sanglard
113*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.is_valid());
114*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_host());
115*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_port());
116*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_path());
117*3f982cf4SFabien Sanglard EXPECT_TRUE(url1.has_query());
118*3f982cf4SFabien Sanglard
119*3f982cf4SFabien Sanglard EXPECT_EQ("http", url1.scheme());
120*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url1.host());
121*3f982cf4SFabien Sanglard EXPECT_EQ(99, url1.port());
122*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url1.path());
123*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url1.query());
124*3f982cf4SFabien Sanglard
125*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.is_valid());
126*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_host());
127*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_port());
128*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_path());
129*3f982cf4SFabien Sanglard EXPECT_TRUE(url2.has_query());
130*3f982cf4SFabien Sanglard
131*3f982cf4SFabien Sanglard EXPECT_EQ("http", url2.scheme());
132*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url2.host());
133*3f982cf4SFabien Sanglard EXPECT_EQ(99, url2.port());
134*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url2.path());
135*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url2.query());
136*3f982cf4SFabien Sanglard
137*3f982cf4SFabien Sanglard url3 = std::move(url1);
138*3f982cf4SFabien Sanglard
139*3f982cf4SFabien Sanglard EXPECT_FALSE(url1.is_valid());
140*3f982cf4SFabien Sanglard
141*3f982cf4SFabien Sanglard EXPECT_TRUE(url3.is_valid());
142*3f982cf4SFabien Sanglard EXPECT_TRUE(url3.has_host());
143*3f982cf4SFabien Sanglard EXPECT_TRUE(url3.has_port());
144*3f982cf4SFabien Sanglard EXPECT_TRUE(url3.has_path());
145*3f982cf4SFabien Sanglard EXPECT_TRUE(url3.has_query());
146*3f982cf4SFabien Sanglard
147*3f982cf4SFabien Sanglard EXPECT_EQ("http", url3.scheme());
148*3f982cf4SFabien Sanglard EXPECT_EQ("google.com", url3.host());
149*3f982cf4SFabien Sanglard EXPECT_EQ(99, url3.port());
150*3f982cf4SFabien Sanglard EXPECT_EQ("/foo;bar", url3.path());
151*3f982cf4SFabien Sanglard EXPECT_EQ("q=a", url3.query());
152*3f982cf4SFabien Sanglard }
153*3f982cf4SFabien Sanglard
TEST(UrlTest,Cast)154*3f982cf4SFabien Sanglard TEST(UrlTest, Cast) {
155*3f982cf4SFabien Sanglard std::string cast(
156*3f982cf4SFabien Sanglard "cast:233637DE?capabilities=video_out%2Caudio_out&clientId="
157*3f982cf4SFabien Sanglard "157299995976393660&autoJoinPolicy=tab_and_origin_scoped&"
158*3f982cf4SFabien Sanglard "defaultActionPolicy=create_session&launchTimeout=30000");
159*3f982cf4SFabien Sanglard Url url(cast);
160*3f982cf4SFabien Sanglard EXPECT_TRUE(url.is_valid());
161*3f982cf4SFabien Sanglard EXPECT_TRUE(url.has_query());
162*3f982cf4SFabien Sanglard EXPECT_EQ(url.scheme(), "cast");
163*3f982cf4SFabien Sanglard EXPECT_EQ(url.path(), "233637DE");
164*3f982cf4SFabien Sanglard EXPECT_EQ(url.query(), cast.c_str() + 14);
165*3f982cf4SFabien Sanglard }
166*3f982cf4SFabien Sanglard
167*3f982cf4SFabien Sanglard } // namespace openscreen
168