Index: url/url_canon_unittest.cc |
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc |
index 8ac73bc44b1f39580217e10f19b39e0a29ca6ba9..9ca51aaaf37e8d818c27dcd056f124b47f5fac85 100644 |
--- a/url/url_canon_unittest.cc |
+++ b/url/url_canon_unittest.cc |
@@ -1847,20 +1847,51 @@ TEST(URLCanonTest, CanonicalizeMailtoURL) { |
Component expected_path; |
Component expected_query; |
} cases[] = { |
- {"mailto:addr1", "mailto:addr1", true, Component(7, 5), Component()}, |
- {"mailto:addr1@foo.com", "mailto:addr1@foo.com", true, Component(7, 13), Component()}, |
+ // Null character should be escaped to %00. |
+ // Keep this test first in the list as it is handled specially below. |
+ {"mailto:addr1\0addr2?foo", |
+ "mailto:addr1%00addr2?foo", |
+ true, Component(7, 13), Component(21, 3)}, |
+ {"mailto:addr1", |
+ "mailto:addr1", |
+ true, Component(7, 5), Component()}, |
+ {"mailto:addr1@foo.com", |
+ "mailto:addr1@foo.com", |
+ true, Component(7, 13), Component()}, |
// Trailing whitespace is stripped. |
- {"MaIlTo:addr1 \t ", "mailto:addr1", true, Component(7, 5), Component()}, |
- {"MaIlTo:addr1?to=jon", "mailto:addr1?to=jon", true, Component(7, 5), Component(13,6)}, |
- {"mailto:addr1,addr2", "mailto:addr1,addr2", true, Component(7, 11), Component()}, |
- {"mailto:addr1, addr2", "mailto:addr1, addr2", true, Component(7, 12), Component()}, |
- {"mailto:addr1%2caddr2", "mailto:addr1%2caddr2", true, Component(7, 13), Component()}, |
- {"mailto:\xF0\x90\x8C\x80", "mailto:%F0%90%8C%80", true, Component(7, 12), Component()}, |
- // Null character should be escaped to %00 |
- {"mailto:addr1\0addr2?foo", "mailto:addr1%00addr2?foo", true, Component(7, 13), Component(21, 3)}, |
+ {"MaIlTo:addr1 \t ", |
+ "mailto:addr1", |
+ true, Component(7, 5), Component()}, |
+ {"MaIlTo:addr1?to=jon", |
+ "mailto:addr1?to=jon", |
+ true, Component(7, 5), Component(13,6)}, |
+ {"mailto:addr1,addr2", |
+ "mailto:addr1,addr2", |
+ true, Component(7, 11), Component()}, |
+ // Embedded spaces must be encoded. |
+ {"mailto:addr1, addr2", |
+ "mailto:addr1,%20addr2", |
+ true, Component(7, 14), Component()}, |
+ {"mailto:addr1, addr2?subject=one two ", |
+ "mailto:addr1,%20addr2?subject=one%20two", |
+ true, Component(7, 14), Component(22, 17)}, |
+ {"mailto:addr1%2caddr2", |
+ "mailto:addr1%2caddr2", |
+ true, Component(7, 13), Component()}, |
+ {"mailto:\xF0\x90\x8C\x80", |
+ "mailto:%F0%90%8C%80", |
+ true, Component(7, 12), Component()}, |
// Invalid -- UTF-8 encoded surrogate value. |
- {"mailto:\xed\xa0\x80", "mailto:%EF%BF%BD", false, Component(7, 9), Component()}, |
- {"mailto:addr1?", "mailto:addr1?", true, Component(7, 5), Component(13, 0)}, |
+ {"mailto:\xed\xa0\x80", |
+ "mailto:%EF%BF%BD", |
+ false, Component(7, 9), Component()}, |
+ {"mailto:addr1?", |
+ "mailto:addr1?", |
+ true, Component(7, 5), Component(13, 0)}, |
+ // Certain characters have special meanings and must be encoded. |
+ {"mailto:! \x22$&()+,-./09:;<=>@AZ[\\]&_`az{|}~\x7f?Query! \x22$&()+,-./09:;<=>@AZ[\\]&_`az{|}~", |
+ "mailto:!%20%22$&()+,-./09:;%3C=%3E@AZ[\\]&_%60az%7B%7C%7D~%7F?Query!%20%22$&()+,-./09:;%3C=%3E@AZ[\\]&_`az{|}~", |
+ true, Component(7, 53), Component(61, 47)}, |
}; |
// Define outside of loop to catch bugs where components aren't reset |
@@ -1869,8 +1900,8 @@ TEST(URLCanonTest, CanonicalizeMailtoURL) { |
for (size_t i = 0; i < arraysize(cases); i++) { |
int url_len = static_cast<int>(strlen(cases[i].input)); |
- if (i == 8) { |
- // The 9th test case purposely has a '\0' in it -- don't count it |
+ if (i == 0) { |
+ // The first test case purposely has a '\0' in it -- don't count it |
// as the string terminator. |
url_len = 22; |
} |