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

Side by Side Diff: third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp

Issue 2708523003: Make ParsedContentType more conformant to the spec (Closed)
Patch Set: fix Created 3 years, 10 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 | « third_party/WebKit/Source/platform/network/ParsedContentType.cpp ('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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "platform/network/ParsedContentType.h" 5 #include "platform/network/ParsedContentType.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace blink { 9 namespace blink {
10 10
11 namespace { 11 namespace {
12 12
13 bool isValid(const String& input) { 13 using Mode = ParsedContentType::Mode;
14 return ParsedContentType(input).isValid(); 14
15 bool isValid(const String& input, Mode mode = Mode::Normal) {
16 return ParsedContentType(input, mode).isValid();
15 } 17 }
16 18
17 TEST(ParsedContentTypeTest, MimeTypeWithoutCharset) { 19 TEST(ParsedContentTypeTest, MimeTypeWithoutCharset) {
18 ParsedContentType t("text/plain"); 20 ParsedContentType t("text/plain");
19 21
20 EXPECT_TRUE(t.isValid()); 22 EXPECT_TRUE(t.isValid());
21 EXPECT_EQ("text/plain", t.mimeType()); 23 EXPECT_EQ("text/plain", t.mimeType());
22 EXPECT_EQ(String(), t.charset()); 24 EXPECT_EQ(String(), t.charset());
23 } 25 }
24 26
25 TEST(ParsedContentTypeTest, MimeTypeWithCharSet) { 27 TEST(ParsedContentTypeTest, MimeTypeWithCharSet) {
26 ParsedContentType t(" text/plain ; x=y;charset=utf-8 "); 28 ParsedContentType t("text / plain ; x=y; charset = utf-8 ");
27 29
28 EXPECT_TRUE(t.isValid()); 30 EXPECT_TRUE(t.isValid());
29 EXPECT_EQ("text/plain", t.mimeType()); 31 EXPECT_EQ("text/plain", t.mimeType());
30 EXPECT_EQ("utf-8", t.charset()); 32 EXPECT_EQ("utf-8", t.charset());
31 } 33 }
32 34
33 TEST(ParsedContentTypeTest, MimeTypeWithQuotedCharSet) { 35 TEST(ParsedContentTypeTest, MimeTypeWithQuotedCharSet) {
34 ParsedContentType t("text/plain; \"charset\"=\"x=y;y=z; ;;\""); 36 ParsedContentType t("text/plain; charset=\"x=y;y=\\\"\\pz; ;;\"");
35 37
36 EXPECT_TRUE(t.isValid()); 38 EXPECT_TRUE(t.isValid());
37 EXPECT_EQ("text/plain", t.mimeType()); 39 EXPECT_EQ("text/plain", t.mimeType());
38 EXPECT_EQ("x=y;y=z; ;;", t.charset()); 40 EXPECT_EQ("x=y;y=\"pz; ;;", t.charset());
39 } 41 }
40 42
41 // TODO(yhirano): Add tests for escaped quotation: it's currently
42 // mis-implemented.
43
44 TEST(ParsedContentTypeTest, InvalidMimeTypeWithoutCharset) { 43 TEST(ParsedContentTypeTest, InvalidMimeTypeWithoutCharset) {
45 ParsedContentType t(" "); 44 ParsedContentType t(" ");
46 45
47 EXPECT_FALSE(t.isValid()); 46 EXPECT_FALSE(t.isValid());
48 EXPECT_EQ(String(), t.mimeType()); 47 EXPECT_EQ(String(), t.mimeType());
49 EXPECT_EQ(String(), t.charset()); 48 EXPECT_EQ(String(), t.charset());
50 } 49 }
51 50
52 TEST(ParsedContentTypeTest, InvalidMimeTypeWithCharset) { 51 TEST(ParsedContentTypeTest, InvalidMimeTypeWithCharset) {
53 ParsedContentType t("text/plain; charset;"); 52 ParsedContentType t("text/plain; charset;");
54 53
55 EXPECT_FALSE(t.isValid()); 54 EXPECT_FALSE(t.isValid());
56 EXPECT_EQ("text/plain", t.mimeType()); 55 EXPECT_EQ("text/plain", t.mimeType());
57 EXPECT_EQ(String(), t.charset()); 56 EXPECT_EQ(String(), t.charset());
58 } 57 }
59 58
60 TEST(ParsedContentTypeTest, Validity) { 59 TEST(ParsedContentTypeTest, Validity) {
61 EXPECT_TRUE(isValid("text/plain")); 60 EXPECT_TRUE(isValid("text/plain"));
62 EXPECT_TRUE(isValid("text/plain; charset=utf-8")); 61 EXPECT_TRUE(isValid("text/plain; charset=utf-8"));
63 EXPECT_TRUE(isValid(" text/plain ")); 62 EXPECT_TRUE(isValid(" text/plain "));
64 EXPECT_TRUE(isValid(" text/plain;charset=utf-8 ")); 63 EXPECT_TRUE(isValid(" text/plain;charset=utf-8 "));
65 EXPECT_TRUE(isValid("unknown/unknown")); 64 EXPECT_TRUE(isValid("unknown/unknown"));
66 EXPECT_TRUE(isValid("unknown/unknown; charset=unknown")); 65 EXPECT_TRUE(isValid("unknown/unknown; charset=unknown"));
67 EXPECT_TRUE(isValid("x/y;\"z=\\\"q;t\"=\"ttx&r=z;;kd==\"")); 66 EXPECT_TRUE(isValid("x/y;z=\"ttx&r=z;;\\u\\\"kd==\""));
67 EXPECT_TRUE(isValid("x/y; z=\"\xff\""));
68 68
69 EXPECT_FALSE(isValid("A"));
69 EXPECT_FALSE(isValid("text/plain\r")); 70 EXPECT_FALSE(isValid("text/plain\r"));
70 EXPECT_FALSE(isValid("text/plain\n")); 71 EXPECT_FALSE(isValid("text/plain\n"));
72 EXPECT_FALSE(isValid("text/plain charset=utf-8"));
73 EXPECT_FALSE(isValid("text/plain;charset=utf-8;"));
71 EXPECT_FALSE(isValid("")); 74 EXPECT_FALSE(isValid(""));
72 EXPECT_FALSE(isValid(" ")); 75 EXPECT_FALSE(isValid(" "));
76 EXPECT_FALSE(isValid("\"x\""));
77 EXPECT_FALSE(isValid("\"x\"/\"y\""));
78 EXPECT_FALSE(isValid("x/\"y\""));
73 EXPECT_FALSE(isValid("text/plain;")); 79 EXPECT_FALSE(isValid("text/plain;"));
74 EXPECT_FALSE(isValid("text/plain; ")); 80 EXPECT_FALSE(isValid("text/plain; "));
75 EXPECT_FALSE(isValid("text/plain; charset")); 81 EXPECT_FALSE(isValid("text/plain; charset"));
76 EXPECT_FALSE(isValid("text/plain; charset;")); 82 EXPECT_FALSE(isValid("text/plain; charset;"));
77 EXPECT_FALSE(isValid("x/y;\"xx")); 83 EXPECT_FALSE(isValid("x/y;\"xx"));
78 EXPECT_FALSE(isValid("x/y;\"xx=y")); 84 EXPECT_FALSE(isValid("x/y;\"xx=y"));
85 EXPECT_FALSE(isValid("\"q\""));
86 EXPECT_FALSE(isValid("x/y; \"z\"=u"));
87 EXPECT_FALSE(isValid("x/y; z=\xff"));
79 88
80 // TODO(yhirano): Add tests for non-tokens. They are currently accepted. 89 EXPECT_FALSE(isValid("x/y;z=q/t:()<>@,:\\/[]?"));
90 EXPECT_TRUE(isValid("x/y;z=q/t:()<>@,:\\/[]?=", Mode::Relaxed));
91 EXPECT_FALSE(isValid("x/y;z=q r", Mode::Relaxed));
92 EXPECT_FALSE(isValid("x/y;z=q;r", Mode::Relaxed));
93 EXPECT_FALSE(isValid("x/y;z=q\"r", Mode::Relaxed));
94 EXPECT_FALSE(isValid("x/y; z=\xff", Mode::Relaxed));
81 } 95 }
82 96
83 TEST(ParsedContentTypeTest, ParameterName) { 97 TEST(ParsedContentTypeTest, ParameterName) {
84 String input = "x; y=z; y=u; t=r;s=x;\"Q\"=U;\"T\"=S;\"z u\"=\"q a\""; 98 String input = "x/t; y=z ; y= u ; t=r;s= \"t \\u\\\"x\" ;Q=U;T=S";
85 99
86 ParsedContentType t(input); 100 ParsedContentType t(input);
87 101
88 EXPECT_EQ(6u, t.parameterCount()); 102 EXPECT_TRUE(t.isValid());
103 EXPECT_EQ(5u, t.parameterCount());
89 EXPECT_EQ(String(), t.parameterValueForName("a")); 104 EXPECT_EQ(String(), t.parameterValueForName("a"));
90 EXPECT_EQ(String(), t.parameterValueForName("x")); 105 EXPECT_EQ(String(), t.parameterValueForName("x"));
91 EXPECT_EQ("u", t.parameterValueForName("y")); 106 EXPECT_EQ("u", t.parameterValueForName("y"));
92 EXPECT_EQ("r", t.parameterValueForName("t")); 107 EXPECT_EQ("r", t.parameterValueForName("t"));
93 EXPECT_EQ("x", t.parameterValueForName("s")); 108 EXPECT_EQ("t u\"x", t.parameterValueForName("s"));
94 EXPECT_EQ("U", t.parameterValueForName("Q")); 109 EXPECT_EQ("U", t.parameterValueForName("Q"));
95 EXPECT_EQ("S", t.parameterValueForName("T")); 110 EXPECT_EQ("S", t.parameterValueForName("T"));
96 EXPECT_EQ("q a", t.parameterValueForName("z u"));
97 111
98 // TODO(yhirano): Case-sensitivity is mis-implemented. 112 // TODO(yhirano): Case-sensitivity is mis-implemented.
99 // TODO(yhirano): Add tests for escaped quotations. 113 }
100 // TODO(yhirano): Leading spaces of a parameter value should be ignored. 114
101 // TODO(yhirano): Trailing spaces of a parameter value should be ignored. 115 TEST(ParsedContentTypeTest, RelaxedParameterName) {
116 String input = "x/t; z=q/t:()<>@,:\\/[]?=;y=u";
117
118 ParsedContentType t(input, Mode::Relaxed);
119
120 EXPECT_TRUE(t.isValid());
121 EXPECT_EQ(2u, t.parameterCount());
122 EXPECT_EQ("q/t:()<>@,:\\/[]?=", t.parameterValueForName("z"));
123 EXPECT_EQ("u", t.parameterValueForName("y"));
102 } 124 }
103 125
104 } // namespace 126 } // namespace
105 127
106 } // namespace blink 128 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/network/ParsedContentType.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698