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