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

Side by Side Diff: url/url_canon_unittest.cc

Issue 2820373002: Reland of 'Improve canonicalization of mailto url path components' (Closed)
Patch Set: Created 3 years, 8 months 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
« no previous file with comments | « url/url_canon_mailtourl.cc ('k') | no next file » | 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 #include <stddef.h> 6 #include <stddef.h>
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 1829 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 } 1840 }
1841 1841
1842 TEST(URLCanonTest, CanonicalizeMailtoURL) { 1842 TEST(URLCanonTest, CanonicalizeMailtoURL) {
1843 struct URLCase { 1843 struct URLCase {
1844 const char* input; 1844 const char* input;
1845 const char* expected; 1845 const char* expected;
1846 bool expected_success; 1846 bool expected_success;
1847 Component expected_path; 1847 Component expected_path;
1848 Component expected_query; 1848 Component expected_query;
1849 } cases[] = { 1849 } cases[] = {
1850 {"mailto:addr1", "mailto:addr1", true, Component(7, 5), Component()}, 1850 // Null character should be escaped to %00.
1851 {"mailto:addr1@foo.com", "mailto:addr1@foo.com", true, Component(7, 13), Com ponent()}, 1851 // Keep this test first in the list as it is handled specially below.
1852 {"mailto:addr1\0addr2?foo",
1853 "mailto:addr1%00addr2?foo",
1854 true, Component(7, 13), Component(21, 3)},
1855 {"mailto:addr1",
1856 "mailto:addr1",
1857 true, Component(7, 5), Component()},
1858 {"mailto:addr1@foo.com",
1859 "mailto:addr1@foo.com",
1860 true, Component(7, 13), Component()},
1852 // Trailing whitespace is stripped. 1861 // Trailing whitespace is stripped.
1853 {"MaIlTo:addr1 \t ", "mailto:addr1", true, Component(7, 5), Component()}, 1862 {"MaIlTo:addr1 \t ",
1854 {"MaIlTo:addr1?to=jon", "mailto:addr1?to=jon", true, Component(7, 5), Compon ent(13,6)}, 1863 "mailto:addr1",
1855 {"mailto:addr1,addr2", "mailto:addr1,addr2", true, Component(7, 11), Compone nt()}, 1864 true, Component(7, 5), Component()},
1856 {"mailto:addr1, addr2", "mailto:addr1, addr2", true, Component(7, 12), Compo nent()}, 1865 {"MaIlTo:addr1?to=jon",
1857 {"mailto:addr1%2caddr2", "mailto:addr1%2caddr2", true, Component(7, 13), Com ponent()}, 1866 "mailto:addr1?to=jon",
1858 {"mailto:\xF0\x90\x8C\x80", "mailto:%F0%90%8C%80", true, Component(7, 12), C omponent()}, 1867 true, Component(7, 5), Component(13,6)},
1859 // Null character should be escaped to %00 1868 {"mailto:addr1,addr2",
1860 {"mailto:addr1\0addr2?foo", "mailto:addr1%00addr2?foo", true, Component(7, 1 3), Component(21, 3)}, 1869 "mailto:addr1,addr2",
1870 true, Component(7, 11), Component()},
1871 // Embedded spaces must be encoded.
1872 {"mailto:addr1, addr2",
1873 "mailto:addr1,%20addr2",
1874 true, Component(7, 14), Component()},
1875 {"mailto:addr1, addr2?subject=one two ",
1876 "mailto:addr1,%20addr2?subject=one%20two",
1877 true, Component(7, 14), Component(22, 17)},
1878 {"mailto:addr1%2caddr2",
1879 "mailto:addr1%2caddr2",
1880 true, Component(7, 13), Component()},
1881 {"mailto:\xF0\x90\x8C\x80",
1882 "mailto:%F0%90%8C%80",
1883 true, Component(7, 12), Component()},
1861 // Invalid -- UTF-8 encoded surrogate value. 1884 // Invalid -- UTF-8 encoded surrogate value.
1862 {"mailto:\xed\xa0\x80", "mailto:%EF%BF%BD", false, Component(7, 9), Componen t()}, 1885 {"mailto:\xed\xa0\x80",
1863 {"mailto:addr1?", "mailto:addr1?", true, Component(7, 5), Component(13, 0)}, 1886 "mailto:%EF%BF%BD",
1887 false, Component(7, 9), Component()},
1888 {"mailto:addr1?",
1889 "mailto:addr1?",
1890 true, Component(7, 5), Component(13, 0)},
1891 // Certain characters have special meanings and must be encoded.
1892 {"mailto:! \x22$&()+,-./09:;<=>@AZ[\\]&_`az{|}~\x7f?Query! \x22$&()+,-./09:; <=>@AZ[\\]&_`az{|}~",
1893 "mailto:!%20%22$&()+,-./09:;%3C=%3E@AZ[\\]&_%60az%7B%7C%7D~%7F?Query!%20%22 $&()+,-./09:;%3C=%3E@AZ[\\]&_`az{|}~",
1894 true, Component(7, 53), Component(61, 47)},
1864 }; 1895 };
1865 1896
1866 // Define outside of loop to catch bugs where components aren't reset 1897 // Define outside of loop to catch bugs where components aren't reset
1867 Parsed parsed; 1898 Parsed parsed;
1868 Parsed out_parsed; 1899 Parsed out_parsed;
1869 1900
1870 for (size_t i = 0; i < arraysize(cases); i++) { 1901 for (size_t i = 0; i < arraysize(cases); i++) {
1871 int url_len = static_cast<int>(strlen(cases[i].input)); 1902 int url_len = static_cast<int>(strlen(cases[i].input));
1872 if (i == 8) { 1903 if (i == 0) {
1873 // The 9th test case purposely has a '\0' in it -- don't count it 1904 // The first test case purposely has a '\0' in it -- don't count it
1874 // as the string terminator. 1905 // as the string terminator.
1875 url_len = 22; 1906 url_len = 22;
1876 } 1907 }
1877 ParseMailtoURL(cases[i].input, url_len, &parsed); 1908 ParseMailtoURL(cases[i].input, url_len, &parsed);
1878 1909
1879 std::string out_str; 1910 std::string out_str;
1880 StdStringCanonOutput output(&out_str); 1911 StdStringCanonOutput output(&out_str);
1881 bool success = CanonicalizeMailtoURL(cases[i].input, url_len, parsed, 1912 bool success = CanonicalizeMailtoURL(cases[i].input, url_len, parsed,
1882 &output, &out_parsed); 1913 &output, &out_parsed);
1883 output.Complete(); 1914 output.Complete();
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
2250 }; 2281 };
2251 2282
2252 for (auto& test_case : cases) { 2283 for (auto& test_case : cases) {
2253 SCOPED_TRACE(test_case.scheme); 2284 SCOPED_TRACE(test_case.scheme);
2254 EXPECT_EQ(test_case.expected_port, 2285 EXPECT_EQ(test_case.expected_port,
2255 DefaultPortForScheme(test_case.scheme, strlen(test_case.scheme))); 2286 DefaultPortForScheme(test_case.scheme, strlen(test_case.scheme)));
2256 } 2287 }
2257 } 2288 }
2258 2289
2259 } // namespace url 2290 } // namespace url
OLDNEW
« no previous file with comments | « url/url_canon_mailtourl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698