Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: url/url_canon_unittest.cc

Issue 23835019: Support URL fragment resolution againt non-hierarchical schemes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: brettw2 Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « url/url_canon_relative.cc ('k') | url/url_parse_internal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <errno.h> 5 #include <errno.h>
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/icu/source/common/unicode/ucnv.h" 8 #include "third_party/icu/source/common/unicode/ucnv.h"
9 #include "url/url_canon.h" 9 #include "url/url_canon.h"
10 #include "url/url_canon_icu.h" 10 #include "url/url_canon_icu.h"
(...skipping 1591 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 // Replace one or the other 1602 // Replace one or the other
1603 {"data:foo", "javascript", NULL, NULL, NULL, NULL, NULL, NULL, NULL, "javasc ript:foo"}, 1603 {"data:foo", "javascript", NULL, NULL, NULL, NULL, NULL, NULL, NULL, "javasc ript:foo"},
1604 {"data:foo", NULL, NULL, NULL, NULL, NULL, "bar", NULL, NULL, "data:bar"}, 1604 {"data:foo", NULL, NULL, NULL, NULL, NULL, "bar", NULL, NULL, "data:bar"},
1605 {"data:foo", NULL, NULL, NULL, NULL, NULL, kDeleteComp, NULL, NULL, "data:"} , 1605 {"data:foo", NULL, NULL, NULL, NULL, NULL, kDeleteComp, NULL, NULL, "data:"} ,
1606 }; 1606 };
1607 1607
1608 for (size_t i = 0; i < arraysize(replace_cases); i++) { 1608 for (size_t i = 0; i < arraysize(replace_cases); i++) {
1609 const ReplaceCase& cur = replace_cases[i]; 1609 const ReplaceCase& cur = replace_cases[i];
1610 int base_len = static_cast<int>(strlen(cur.base)); 1610 int base_len = static_cast<int>(strlen(cur.base));
1611 url_parse::Parsed parsed; 1611 url_parse::Parsed parsed;
1612 url_parse::ParsePathURL(cur.base, base_len, &parsed); 1612 url_parse::ParsePathURL(cur.base, base_len, false, &parsed);
1613 1613
1614 url_canon::Replacements<char> r; 1614 url_canon::Replacements<char> r;
1615 typedef url_canon::Replacements<char> R; // Clean up syntax. 1615 typedef url_canon::Replacements<char> R; // Clean up syntax.
1616 SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme); 1616 SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme);
1617 SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username); 1617 SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username);
1618 SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password); 1618 SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password);
1619 SetupReplComp(&R::SetHost, &R::ClearHost, &r, cur.host); 1619 SetupReplComp(&R::SetHost, &R::ClearHost, &r, cur.host);
1620 SetupReplComp(&R::SetPort, &R::ClearPort, &r, cur.port); 1620 SetupReplComp(&R::SetPort, &R::ClearPort, &r, cur.port);
1621 SetupReplComp(&R::SetPath, &R::ClearPath, &r, cur.path); 1621 SetupReplComp(&R::SetPath, &R::ClearPath, &r, cur.path);
1622 SetupReplComp(&R::SetQuery, &R::ClearQuery, &r, cur.query); 1622 SetupReplComp(&R::SetQuery, &R::ClearQuery, &r, cur.query);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 const char* expected; 1823 const char* expected;
1824 } path_cases[] = { 1824 } path_cases[] = {
1825 {"javascript:", "javascript:"}, 1825 {"javascript:", "javascript:"},
1826 {"JavaScript:Foo", "javascript:Foo"}, 1826 {"JavaScript:Foo", "javascript:Foo"},
1827 {":\":This /is interesting;?#", ":\":This /is interesting;?#"}, 1827 {":\":This /is interesting;?#", ":\":This /is interesting;?#"},
1828 }; 1828 };
1829 1829
1830 for (size_t i = 0; i < ARRAYSIZE(path_cases); i++) { 1830 for (size_t i = 0; i < ARRAYSIZE(path_cases); i++) {
1831 int url_len = static_cast<int>(strlen(path_cases[i].input)); 1831 int url_len = static_cast<int>(strlen(path_cases[i].input));
1832 url_parse::Parsed parsed; 1832 url_parse::Parsed parsed;
1833 url_parse::ParsePathURL(path_cases[i].input, url_len, &parsed); 1833 url_parse::ParsePathURL(path_cases[i].input, url_len, true, &parsed);
1834 1834
1835 url_parse::Parsed out_parsed; 1835 url_parse::Parsed out_parsed;
1836 std::string out_str; 1836 std::string out_str;
1837 url_canon::StdStringCanonOutput output(&out_str); 1837 url_canon::StdStringCanonOutput output(&out_str);
1838 bool success = url_canon::CanonicalizePathURL(path_cases[i].input, url_len, 1838 bool success = url_canon::CanonicalizePathURL(path_cases[i].input, url_len,
1839 parsed, &output, 1839 parsed, &output,
1840 &out_parsed); 1840 &out_parsed);
1841 output.Complete(); 1841 output.Complete();
1842 1842
1843 EXPECT_TRUE(success); 1843 EXPECT_TRUE(success);
1844 EXPECT_EQ(path_cases[i].expected, out_str); 1844 EXPECT_EQ(path_cases[i].expected, out_str);
1845 1845
1846 EXPECT_EQ(0, out_parsed.host.begin); 1846 EXPECT_EQ(0, out_parsed.host.begin);
1847 EXPECT_EQ(-1, out_parsed.host.len); 1847 EXPECT_EQ(-1, out_parsed.host.len);
1848 1848
1849 // When we end with a colon at the end, there should be no path. 1849 // When we end with a colon at the end, there should be no path.
1850 if (path_cases[i].input[url_len - 1] == ':') { 1850 if (path_cases[i].input[url_len - 1] == ':') {
1851 EXPECT_EQ(0, out_parsed.path.begin); 1851 EXPECT_EQ(0, out_parsed.GetContent().begin);
1852 EXPECT_EQ(-1, out_parsed.path.len); 1852 EXPECT_EQ(-1, out_parsed.GetContent().len);
1853 } 1853 }
1854 } 1854 }
1855 } 1855 }
1856 1856
1857 TEST(URLCanonTest, CanonicalizeMailtoURL) { 1857 TEST(URLCanonTest, CanonicalizeMailtoURL) {
1858 struct URLCase { 1858 struct URLCase {
1859 const char* input; 1859 const char* input;
1860 const char* expected; 1860 const char* expected;
1861 bool expected_success; 1861 bool expected_success;
1862 url_parse::Component expected_path; 1862 url_parse::Component expected_path;
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
2149 for (size_t i = 0; i < ARRAYSIZE(rel_cases); i++) { 2149 for (size_t i = 0; i < ARRAYSIZE(rel_cases); i++) {
2150 const RelativeCase& cur_case = rel_cases[i]; 2150 const RelativeCase& cur_case = rel_cases[i];
2151 2151
2152 url_parse::Parsed parsed; 2152 url_parse::Parsed parsed;
2153 int base_len = static_cast<int>(strlen(cur_case.base)); 2153 int base_len = static_cast<int>(strlen(cur_case.base));
2154 if (cur_case.is_base_file) 2154 if (cur_case.is_base_file)
2155 url_parse::ParseFileURL(cur_case.base, base_len, &parsed); 2155 url_parse::ParseFileURL(cur_case.base, base_len, &parsed);
2156 else if (cur_case.is_base_hier) 2156 else if (cur_case.is_base_hier)
2157 url_parse::ParseStandardURL(cur_case.base, base_len, &parsed); 2157 url_parse::ParseStandardURL(cur_case.base, base_len, &parsed);
2158 else 2158 else
2159 url_parse::ParsePathURL(cur_case.base, base_len, &parsed); 2159 url_parse::ParsePathURL(cur_case.base, base_len, false, &parsed);
2160 2160
2161 // First see if it is relative. 2161 // First see if it is relative.
2162 int test_len = static_cast<int>(strlen(cur_case.test)); 2162 int test_len = static_cast<int>(strlen(cur_case.test));
2163 bool is_relative; 2163 bool is_relative;
2164 url_parse::Component relative_component; 2164 url_parse::Component relative_component;
2165 bool succeed_is_rel = url_canon::IsRelativeURL( 2165 bool succeed_is_rel = url_canon::IsRelativeURL(
2166 cur_case.base, parsed, cur_case.test, test_len, cur_case.is_base_hier, 2166 cur_case.base, parsed, cur_case.test, test_len, cur_case.is_base_hier,
2167 &is_relative, &relative_component); 2167 &is_relative, &relative_component);
2168 2168
2169 EXPECT_EQ(cur_case.succeed_relative, succeed_is_rel) << 2169 EXPECT_EQ(cur_case.succeed_relative, succeed_is_rel) <<
(...skipping 11 matching lines...) Expand all
2181 cur_case.test, relative_component, NULL, &output, &resolved_parsed); 2181 cur_case.test, relative_component, NULL, &output, &resolved_parsed);
2182 output.Complete(); 2182 output.Complete();
2183 2183
2184 EXPECT_EQ(cur_case.succeed_resolve, succeed_resolve); 2184 EXPECT_EQ(cur_case.succeed_resolve, succeed_resolve);
2185 EXPECT_EQ(cur_case.resolved, resolved) << " on " << cur_case.test; 2185 EXPECT_EQ(cur_case.resolved, resolved) << " on " << cur_case.test;
2186 2186
2187 // Verify that the output parsed structure is the same as parsing a 2187 // Verify that the output parsed structure is the same as parsing a
2188 // the URL freshly. 2188 // the URL freshly.
2189 url_parse::Parsed ref_parsed; 2189 url_parse::Parsed ref_parsed;
2190 int resolved_len = static_cast<int>(resolved.size()); 2190 int resolved_len = static_cast<int>(resolved.size());
2191 if (cur_case.is_base_file) 2191 if (cur_case.is_base_file) {
2192 url_parse::ParseFileURL(resolved.c_str(), resolved_len, &ref_parsed); 2192 url_parse::ParseFileURL(resolved.c_str(), resolved_len, &ref_parsed);
2193 else if (cur_case.is_base_hier) 2193 } else if (cur_case.is_base_hier) {
2194 url_parse::ParseStandardURL(resolved.c_str(), resolved_len, &ref_parsed) ; 2194 url_parse::ParseStandardURL(resolved.c_str(), resolved_len,
2195 else 2195 &ref_parsed);
2196 url_parse::ParsePathURL(resolved.c_str(), resolved_len, &ref_parsed); 2196 } else {
2197 url_parse::ParsePathURL(resolved.c_str(), resolved_len, false,
2198 &ref_parsed);
2199 }
2197 EXPECT_TRUE(ParsedIsEqual(ref_parsed, resolved_parsed)); 2200 EXPECT_TRUE(ParsedIsEqual(ref_parsed, resolved_parsed));
2198 } 2201 }
2199 } 2202 }
2200 } 2203 }
2201 2204
2202 // It used to be when we did a replacement with a long buffer of UTF-16 2205 // It used to be when we did a replacement with a long buffer of UTF-16
2203 // characters, we would get invalid data in the URL. This is because the buffer 2206 // characters, we would get invalid data in the URL. This is because the buffer
2204 // it used to hold the UTF-8 data was resized, while some pointers were still 2207 // it used to hold the UTF-8 data was resized, while some pointers were still
2205 // kept to the old buffer that was removed. 2208 // kept to the old buffer that was removed.
2206 TEST(URLCanonTest, ReplacementOverflow) { 2209 TEST(URLCanonTest, ReplacementOverflow) {
(...skipping 22 matching lines...) Expand all
2229 url_canon::StdStringCanonOutput repl_output(&repl_str); 2232 url_canon::StdStringCanonOutput repl_output(&repl_str);
2230 url_canon::ReplaceFileURL(src, parsed, repl, NULL, &repl_output, &repl_parsed) ; 2233 url_canon::ReplaceFileURL(src, parsed, repl, NULL, &repl_output, &repl_parsed) ;
2231 repl_output.Complete(); 2234 repl_output.Complete();
2232 2235
2233 // Generate the expected string and check. 2236 // Generate the expected string and check.
2234 std::string expected("file:///foo?"); 2237 std::string expected("file:///foo?");
2235 for (size_t i = 0; i < new_query.length(); i++) 2238 for (size_t i = 0; i < new_query.length(); i++)
2236 expected.push_back('a'); 2239 expected.push_back('a');
2237 EXPECT_TRUE(expected == repl_str); 2240 EXPECT_TRUE(expected == repl_str);
2238 } 2241 }
OLDNEW
« no previous file with comments | « url/url_canon_relative.cc ('k') | url/url_parse_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698