| 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 |