1*1a96fba6SXin Li // Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li // Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li // found in the LICENSE file.
4*1a96fba6SXin Li
5*1a96fba6SXin Li #include <brillo/url_utils.h>
6*1a96fba6SXin Li
7*1a96fba6SXin Li #include <gtest/gtest.h>
8*1a96fba6SXin Li
9*1a96fba6SXin Li namespace brillo {
10*1a96fba6SXin Li
TEST(UrlUtils,Combine)11*1a96fba6SXin Li TEST(UrlUtils, Combine) {
12*1a96fba6SXin Li EXPECT_EQ("http://sample.org/path",
13*1a96fba6SXin Li url::Combine("http://sample.org", "path"));
14*1a96fba6SXin Li EXPECT_EQ("http://sample.org/path",
15*1a96fba6SXin Li url::Combine("http://sample.org/", "path"));
16*1a96fba6SXin Li EXPECT_EQ("path1/path2", url::Combine("", "path1/path2"));
17*1a96fba6SXin Li EXPECT_EQ("path1/path2", url::Combine("path1", "path2"));
18*1a96fba6SXin Li EXPECT_EQ("http://sample.org", url::Combine("http://sample.org", ""));
19*1a96fba6SXin Li EXPECT_EQ("http://sample.org/path",
20*1a96fba6SXin Li url::Combine("http://sample.org/", "/path"));
21*1a96fba6SXin Li EXPECT_EQ("http://sample.org/path",
22*1a96fba6SXin Li url::Combine("http://sample.org", "//////path"));
23*1a96fba6SXin Li EXPECT_EQ("http://sample.org/", url::Combine("http://sample.org", "///"));
24*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/path1/path2",
25*1a96fba6SXin Li url::Combine("http://sample.org/obj", "path1/path2"));
26*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/path1/path2#tag",
27*1a96fba6SXin Li url::Combine("http://sample.org/obj#tag", "path1/path2"));
28*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/path1/path2?k1=v1&k2=v2",
29*1a96fba6SXin Li url::Combine("http://sample.org/obj?k1=v1&k2=v2", "path1/path2"));
30*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/path1/path2?k1=v1#k2=v2",
31*1a96fba6SXin Li url::Combine("http://sample.org/obj/?k1=v1#k2=v2", "path1/path2"));
32*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/path1/path2#tag?",
33*1a96fba6SXin Li url::Combine("http://sample.org/obj#tag?", "path1/path2"));
34*1a96fba6SXin Li EXPECT_EQ("path1/path2", url::CombineMultiple("", {"path1", "path2"}));
35*1a96fba6SXin Li EXPECT_EQ("http://sample.org/obj/part1/part2",
36*1a96fba6SXin Li url::CombineMultiple("http://sample.org",
37*1a96fba6SXin Li {"obj", "", "/part1/", "part2"}));
38*1a96fba6SXin Li }
39*1a96fba6SXin Li
TEST(UrlUtils,GetQueryString)40*1a96fba6SXin Li TEST(UrlUtils, GetQueryString) {
41*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("http://sample.org", false));
42*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("http://sample.org", true));
43*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("", false));
44*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("", true));
45*1a96fba6SXin Li
46*1a96fba6SXin Li EXPECT_EQ("?q=v&b=2#tag?2",
47*1a96fba6SXin Li url::GetQueryString("http://s.com/?q=v&b=2#tag?2", false));
48*1a96fba6SXin Li EXPECT_EQ("?q=v&b=2",
49*1a96fba6SXin Li url::GetQueryString("http://s.com/?q=v&b=2#tag?2", true));
50*1a96fba6SXin Li
51*1a96fba6SXin Li EXPECT_EQ("#tag?a=2", url::GetQueryString("http://s.com/#tag?a=2", false));
52*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("http://s.com/#tag?a=2", true));
53*1a96fba6SXin Li
54*1a96fba6SXin Li EXPECT_EQ("?a=2&b=2", url::GetQueryString("?a=2&b=2", false));
55*1a96fba6SXin Li EXPECT_EQ("?a=2&b=2", url::GetQueryString("?a=2&b=2", true));
56*1a96fba6SXin Li
57*1a96fba6SXin Li EXPECT_EQ("#s#?d#?f?#s?#d", url::GetQueryString("#s#?d#?f?#s?#d", false));
58*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryString("#s#?d#?f?#s?#d", true));
59*1a96fba6SXin Li }
60*1a96fba6SXin Li
TEST(UrlUtils,GetQueryStringParameters)61*1a96fba6SXin Li TEST(UrlUtils, GetQueryStringParameters) {
62*1a96fba6SXin Li auto params = url::GetQueryStringParameters(
63*1a96fba6SXin Li "http://sample.org/path?k=v&&%3Dkey%3D=val%26&r#blah");
64*1a96fba6SXin Li
65*1a96fba6SXin Li EXPECT_EQ(3, params.size());
66*1a96fba6SXin Li EXPECT_EQ("k", params[0].first);
67*1a96fba6SXin Li EXPECT_EQ("v", params[0].second);
68*1a96fba6SXin Li EXPECT_EQ("=key=", params[1].first);
69*1a96fba6SXin Li EXPECT_EQ("val&", params[1].second);
70*1a96fba6SXin Li EXPECT_EQ("r", params[2].first);
71*1a96fba6SXin Li EXPECT_EQ("", params[2].second);
72*1a96fba6SXin Li }
73*1a96fba6SXin Li
TEST(UrlUtils,GetQueryStringValue)74*1a96fba6SXin Li TEST(UrlUtils, GetQueryStringValue) {
75*1a96fba6SXin Li std::string url = "http://url?key1=val1&&key2=val2";
76*1a96fba6SXin Li EXPECT_EQ("val1", url::GetQueryStringValue(url, "key1"));
77*1a96fba6SXin Li EXPECT_EQ("val2", url::GetQueryStringValue(url, "key2"));
78*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryStringValue(url, "key3"));
79*1a96fba6SXin Li
80*1a96fba6SXin Li auto params = url::GetQueryStringParameters(url);
81*1a96fba6SXin Li EXPECT_EQ("val1", url::GetQueryStringValue(params, "key1"));
82*1a96fba6SXin Li EXPECT_EQ("val2", url::GetQueryStringValue(params, "key2"));
83*1a96fba6SXin Li EXPECT_EQ("", url::GetQueryStringValue(params, "key3"));
84*1a96fba6SXin Li }
85*1a96fba6SXin Li
TEST(UrlUtils,TrimOffQueryString)86*1a96fba6SXin Li TEST(UrlUtils, TrimOffQueryString) {
87*1a96fba6SXin Li std::string url = "http://url?key1=val1&key2=val2#fragment";
88*1a96fba6SXin Li std::string query = url::TrimOffQueryString(&url);
89*1a96fba6SXin Li EXPECT_EQ("http://url", url);
90*1a96fba6SXin Li EXPECT_EQ("?key1=val1&key2=val2#fragment", query);
91*1a96fba6SXin Li
92*1a96fba6SXin Li url = "http://url#fragment";
93*1a96fba6SXin Li query = url::TrimOffQueryString(&url);
94*1a96fba6SXin Li EXPECT_EQ("http://url", url);
95*1a96fba6SXin Li EXPECT_EQ("#fragment", query);
96*1a96fba6SXin Li
97*1a96fba6SXin Li url = "http://url";
98*1a96fba6SXin Li query = url::TrimOffQueryString(&url);
99*1a96fba6SXin Li EXPECT_EQ("http://url", url);
100*1a96fba6SXin Li EXPECT_EQ("", query);
101*1a96fba6SXin Li }
102*1a96fba6SXin Li
TEST(UrlUtils,RemoveQueryString)103*1a96fba6SXin Li TEST(UrlUtils, RemoveQueryString) {
104*1a96fba6SXin Li std::string url = "http://url?key1=val1&key2=val2#fragment";
105*1a96fba6SXin Li EXPECT_EQ("http://url", url::RemoveQueryString(url, true));
106*1a96fba6SXin Li EXPECT_EQ("http://url#fragment", url::RemoveQueryString(url, false));
107*1a96fba6SXin Li }
108*1a96fba6SXin Li
TEST(UrlUtils,AppendQueryParam)109*1a96fba6SXin Li TEST(UrlUtils, AppendQueryParam) {
110*1a96fba6SXin Li std::string url = "http://server.com/path";
111*1a96fba6SXin Li url = url::AppendQueryParam(url, "param", "value");
112*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value", url);
113*1a96fba6SXin Li url = url::AppendQueryParam(url, "param2", "v");
114*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value¶m2=v", url);
115*1a96fba6SXin Li
116*1a96fba6SXin Li url = "http://server.com/path#fragment";
117*1a96fba6SXin Li url = url::AppendQueryParam(url, "param", "value");
118*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value#fragment", url);
119*1a96fba6SXin Li url = url::AppendQueryParam(url, "param2", "v");
120*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value¶m2=v#fragment", url);
121*1a96fba6SXin Li
122*1a96fba6SXin Li url = url::AppendQueryParam("http://server.com/path?", "param", "value");
123*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value", url);
124*1a96fba6SXin Li }
125*1a96fba6SXin Li
TEST(UrlUtils,AppendQueryParams)126*1a96fba6SXin Li TEST(UrlUtils, AppendQueryParams) {
127*1a96fba6SXin Li std::string url = "http://server.com/path";
128*1a96fba6SXin Li url = url::AppendQueryParams(url, {});
129*1a96fba6SXin Li EXPECT_EQ("http://server.com/path", url);
130*1a96fba6SXin Li url = url::AppendQueryParams(url, {{"param", "value"}, {"q", "="}});
131*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value&q=%3D", url);
132*1a96fba6SXin Li url += "#fr?";
133*1a96fba6SXin Li url = url::AppendQueryParams(url, {{"p", "1"}, {"s&", "\n"}});
134*1a96fba6SXin Li EXPECT_EQ("http://server.com/path?param=value&q=%3D&p=1&s%26=%0A#fr?", url);
135*1a96fba6SXin Li }
136*1a96fba6SXin Li
TEST(UrlUtils,HasQueryString)137*1a96fba6SXin Li TEST(UrlUtils, HasQueryString) {
138*1a96fba6SXin Li EXPECT_FALSE(url::HasQueryString("http://server.com/path"));
139*1a96fba6SXin Li EXPECT_FALSE(url::HasQueryString("http://server.com/path#blah?v=1"));
140*1a96fba6SXin Li EXPECT_TRUE(url::HasQueryString("http://server.com/path?v=1#blah"));
141*1a96fba6SXin Li EXPECT_TRUE(url::HasQueryString("http://server.com/path?v=1"));
142*1a96fba6SXin Li EXPECT_FALSE(url::HasQueryString(""));
143*1a96fba6SXin Li EXPECT_TRUE(url::HasQueryString("?ss"));
144*1a96fba6SXin Li }
145*1a96fba6SXin Li
146*1a96fba6SXin Li } // namespace brillo
147