OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium 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 "net/base/url_util.h" | |
6 | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 #include "url/gurl.h" | |
9 | |
10 namespace net { | |
11 namespace { | |
12 | |
13 TEST(UrlUtilTest, AppendQueryParameter) { | |
14 // Appending a name-value pair to a URL without a query component. | |
15 EXPECT_EQ("http://example.com/path?name=value", | |
16 AppendQueryParameter(GURL("http://example.com/path"), | |
17 "name", "value").spec()); | |
18 | |
19 // Appending a name-value pair to a URL with a query component. | |
20 // The original component should be preserved, and the new pair should be | |
21 // appended with '&'. | |
22 EXPECT_EQ("http://example.com/path?existing=one&name=value", | |
23 AppendQueryParameter(GURL("http://example.com/path?existing=one"), | |
24 "name", "value").spec()); | |
25 | |
26 // Appending a name-value pair with unsafe characters included. The | |
27 // unsafe characters should be escaped. | |
28 EXPECT_EQ("http://example.com/path?existing=one&na+me=v.alue%3D", | |
29 AppendQueryParameter(GURL("http://example.com/path?existing=one"), | |
30 "na me", "v.alue=").spec()); | |
31 | |
32 } | |
33 | |
34 TEST(UrlUtilTest, AppendOrReplaceQueryParameter) { | |
35 // Appending a name-value pair to a URL without a query component. | |
36 EXPECT_EQ("http://example.com/path?name=value", | |
37 AppendOrReplaceQueryParameter(GURL("http://example.com/path"), | |
38 "name", "value").spec()); | |
39 | |
40 // Appending a name-value pair to a URL with a query component. | |
41 // The original component should be preserved, and the new pair should be | |
42 // appended with '&'. | |
43 EXPECT_EQ("http://example.com/path?existing=one&name=value", | |
44 AppendOrReplaceQueryParameter( | |
45 GURL("http://example.com/path?existing=one"), | |
46 "name", "value").spec()); | |
47 | |
48 // Appending a name-value pair with unsafe characters included. The | |
49 // unsafe characters should be escaped. | |
50 EXPECT_EQ("http://example.com/path?existing=one&na+me=v.alue%3D", | |
51 AppendOrReplaceQueryParameter( | |
52 GURL("http://example.com/path?existing=one"), | |
53 "na me", "v.alue=").spec()); | |
54 | |
55 // Replace value of an existing paramater. | |
56 EXPECT_EQ("http://example.com/path?existing=one&name=new", | |
57 AppendOrReplaceQueryParameter( | |
58 GURL("http://example.com/path?existing=one&name=old"), | |
59 "name", "new").spec()); | |
60 | |
61 // Replace a name-value pair with unsafe characters included. The | |
62 // unsafe characters should be escaped. | |
63 EXPECT_EQ("http://example.com/path?na+me=n.ew%3D&existing=one", | |
64 AppendOrReplaceQueryParameter( | |
65 GURL("http://example.com/path?na+me=old&existing=one"), | |
66 "na me", "n.ew=").spec()); | |
67 | |
68 // Replace the value of first parameter with this name only. | |
69 EXPECT_EQ("http://example.com/path?name=new&existing=one&name=old", | |
70 AppendOrReplaceQueryParameter( | |
71 GURL("http://example.com/path?name=old&existing=one&name=old"), | |
72 "name", "new").spec()); | |
73 | |
74 // Preserve the content of the original params regarless of our failure to | |
75 // interpret them correctly. | |
76 EXPECT_EQ("http://example.com/path?bar&name=new&left=&" | |
77 "=right&=&&name=again", | |
78 AppendOrReplaceQueryParameter( | |
79 GURL("http://example.com/path?bar&name=old&left=&" | |
80 "=right&=&&name=again"), | |
81 "name", "new").spec()); | |
82 } | |
83 | |
84 TEST(UrlUtilTest, GetValueForKeyInQuery) { | |
85 GURL url("http://example.com/path?name=value&boolParam&" | |
86 "url=http://test.com/q?n1%3Dv1%26n2"); | |
87 std::string value; | |
88 | |
89 // False when getting a non-existent query param. | |
90 EXPECT_FALSE(GetValueForKeyInQuery(url, "non-exist", &value)); | |
91 | |
92 // True when query param exist. | |
93 EXPECT_TRUE(GetValueForKeyInQuery(url, "name", &value)); | |
94 EXPECT_EQ("value", value); | |
95 | |
96 EXPECT_TRUE(GetValueForKeyInQuery(url, "boolParam", &value)); | |
97 EXPECT_EQ("", value); | |
98 | |
99 EXPECT_TRUE(GetValueForKeyInQuery(url, "url", &value)); | |
100 EXPECT_EQ("http://test.com/q?n1=v1&n2", value); | |
101 } | |
102 | |
103 TEST(UrlUtilTest, GetValueForKeyInQueryInvalidURL) { | |
104 GURL url("http://%01/?test"); | |
105 std::string value; | |
106 | |
107 // Always false when parsing an invalid URL. | |
108 EXPECT_FALSE(GetValueForKeyInQuery(url, "test", &value)); | |
109 } | |
110 | |
111 TEST(UrlUtilTest, ParseQuery) { | |
112 const GURL url("http://example.com/path?name=value&boolParam&" | |
113 "url=http://test.com/q?n1%3Dv1%26n2&" | |
114 "multikey=value1&multikey=value2&multikey"); | |
115 QueryIterator it(url); | |
116 | |
117 ASSERT_FALSE(it.IsAtEnd()); | |
118 EXPECT_EQ("name", it.GetKey()); | |
119 EXPECT_EQ("value", it.GetValue()); | |
120 EXPECT_EQ("value", it.GetUnescapedValue()); | |
121 it.Advance(); | |
122 | |
123 ASSERT_FALSE(it.IsAtEnd()); | |
124 EXPECT_EQ("boolParam", it.GetKey()); | |
125 EXPECT_EQ("", it.GetValue()); | |
126 EXPECT_EQ("", it.GetUnescapedValue()); | |
127 it.Advance(); | |
128 | |
129 ASSERT_FALSE(it.IsAtEnd()); | |
130 EXPECT_EQ("url", it.GetKey()); | |
131 EXPECT_EQ("http://test.com/q?n1%3Dv1%26n2", it.GetValue()); | |
132 EXPECT_EQ("http://test.com/q?n1=v1&n2", it.GetUnescapedValue()); | |
133 it.Advance(); | |
134 | |
135 ASSERT_FALSE(it.IsAtEnd()); | |
136 EXPECT_EQ("multikey", it.GetKey()); | |
137 EXPECT_EQ("value1", it.GetValue()); | |
138 EXPECT_EQ("value1", it.GetUnescapedValue()); | |
139 it.Advance(); | |
140 | |
141 ASSERT_FALSE(it.IsAtEnd()); | |
142 EXPECT_EQ("multikey", it.GetKey()); | |
143 EXPECT_EQ("value2", it.GetValue()); | |
144 EXPECT_EQ("value2", it.GetUnescapedValue()); | |
145 it.Advance(); | |
146 | |
147 ASSERT_FALSE(it.IsAtEnd()); | |
148 EXPECT_EQ("multikey", it.GetKey()); | |
149 EXPECT_EQ("", it.GetValue()); | |
150 EXPECT_EQ("", it.GetUnescapedValue()); | |
151 it.Advance(); | |
152 | |
153 EXPECT_TRUE(it.IsAtEnd()); | |
154 } | |
155 | |
156 TEST(UrlUtilTest, ParseQueryInvalidURL) { | |
157 const GURL url("http://%01/?test"); | |
158 QueryIterator it(url); | |
159 EXPECT_TRUE(it.IsAtEnd()); | |
160 } | |
161 | |
162 } // namespace | |
163 } // namespace net | |
OLD | NEW |