| Index: third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp b/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
|
| index aa477fa1e3eae1fb85e4ab7eea932e9da886f165..e6ffdba4793da2f87947f7cb9e2729f171479ec0 100644
|
| --- a/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
|
| @@ -10,8 +10,10 @@ namespace blink {
|
|
|
| namespace {
|
|
|
| -bool isValid(const String& input) {
|
| - return ParsedContentType(input).isValid();
|
| +using Mode = ParsedContentType::Mode;
|
| +
|
| +bool isValid(const String& input, Mode mode = Mode::Normal) {
|
| + return ParsedContentType(input, mode).isValid();
|
| }
|
|
|
| TEST(ParsedContentTypeTest, MimeTypeWithoutCharset) {
|
| @@ -23,7 +25,7 @@ TEST(ParsedContentTypeTest, MimeTypeWithoutCharset) {
|
| }
|
|
|
| TEST(ParsedContentTypeTest, MimeTypeWithCharSet) {
|
| - ParsedContentType t(" text/plain ; x=y;charset=utf-8 ");
|
| + ParsedContentType t("text / plain ; x=y; charset = utf-8 ");
|
|
|
| EXPECT_TRUE(t.isValid());
|
| EXPECT_EQ("text/plain", t.mimeType());
|
| @@ -31,16 +33,13 @@ TEST(ParsedContentTypeTest, MimeTypeWithCharSet) {
|
| }
|
|
|
| TEST(ParsedContentTypeTest, MimeTypeWithQuotedCharSet) {
|
| - ParsedContentType t("text/plain; \"charset\"=\"x=y;y=z; ;;\"");
|
| + ParsedContentType t("text/plain; charset=\"x=y;y=\\\"\\pz; ;;\"");
|
|
|
| EXPECT_TRUE(t.isValid());
|
| EXPECT_EQ("text/plain", t.mimeType());
|
| - EXPECT_EQ("x=y;y=z; ;;", t.charset());
|
| + EXPECT_EQ("x=y;y=\"pz; ;;", t.charset());
|
| }
|
|
|
| -// TODO(yhirano): Add tests for escaped quotation: it's currently
|
| -// mis-implemented.
|
| -
|
| TEST(ParsedContentTypeTest, InvalidMimeTypeWithoutCharset) {
|
| ParsedContentType t(" ");
|
|
|
| @@ -64,41 +63,64 @@ TEST(ParsedContentTypeTest, Validity) {
|
| EXPECT_TRUE(isValid(" text/plain;charset=utf-8 "));
|
| EXPECT_TRUE(isValid("unknown/unknown"));
|
| EXPECT_TRUE(isValid("unknown/unknown; charset=unknown"));
|
| - EXPECT_TRUE(isValid("x/y;\"z=\\\"q;t\"=\"ttx&r=z;;kd==\""));
|
| + EXPECT_TRUE(isValid("x/y;z=\"ttx&r=z;;\\u\\\"kd==\""));
|
| + EXPECT_TRUE(isValid("x/y; z=\"\xff\""));
|
|
|
| + EXPECT_FALSE(isValid("A"));
|
| EXPECT_FALSE(isValid("text/plain\r"));
|
| EXPECT_FALSE(isValid("text/plain\n"));
|
| + EXPECT_FALSE(isValid("text/plain charset=utf-8"));
|
| + EXPECT_FALSE(isValid("text/plain;charset=utf-8;"));
|
| EXPECT_FALSE(isValid(""));
|
| EXPECT_FALSE(isValid(" "));
|
| + EXPECT_FALSE(isValid("\"x\""));
|
| + EXPECT_FALSE(isValid("\"x\"/\"y\""));
|
| + EXPECT_FALSE(isValid("x/\"y\""));
|
| EXPECT_FALSE(isValid("text/plain;"));
|
| EXPECT_FALSE(isValid("text/plain; "));
|
| EXPECT_FALSE(isValid("text/plain; charset"));
|
| EXPECT_FALSE(isValid("text/plain; charset;"));
|
| EXPECT_FALSE(isValid("x/y;\"xx"));
|
| EXPECT_FALSE(isValid("x/y;\"xx=y"));
|
| -
|
| - // TODO(yhirano): Add tests for non-tokens. They are currently accepted.
|
| + EXPECT_FALSE(isValid("\"q\""));
|
| + EXPECT_FALSE(isValid("x/y; \"z\"=u"));
|
| + EXPECT_FALSE(isValid("x/y; z=\xff"));
|
| +
|
| + EXPECT_FALSE(isValid("x/y;z=q/t:()<>@,:\\/[]?"));
|
| + EXPECT_TRUE(isValid("x/y;z=q/t:()<>@,:\\/[]?=", Mode::Relaxed));
|
| + EXPECT_FALSE(isValid("x/y;z=q r", Mode::Relaxed));
|
| + EXPECT_FALSE(isValid("x/y;z=q;r", Mode::Relaxed));
|
| + EXPECT_FALSE(isValid("x/y;z=q\"r", Mode::Relaxed));
|
| + EXPECT_FALSE(isValid("x/y; z=\xff", Mode::Relaxed));
|
| }
|
|
|
| TEST(ParsedContentTypeTest, ParameterName) {
|
| - String input = "x; y=z; y=u; t=r;s=x;\"Q\"=U;\"T\"=S;\"z u\"=\"q a\"";
|
| + String input = "x/t; y=z ; y= u ; t=r;s= \"t \\u\\\"x\" ;Q=U;T=S";
|
|
|
| ParsedContentType t(input);
|
|
|
| - EXPECT_EQ(6u, t.parameterCount());
|
| + EXPECT_TRUE(t.isValid());
|
| + EXPECT_EQ(5u, t.parameterCount());
|
| EXPECT_EQ(String(), t.parameterValueForName("a"));
|
| EXPECT_EQ(String(), t.parameterValueForName("x"));
|
| EXPECT_EQ("u", t.parameterValueForName("y"));
|
| EXPECT_EQ("r", t.parameterValueForName("t"));
|
| - EXPECT_EQ("x", t.parameterValueForName("s"));
|
| + EXPECT_EQ("t u\"x", t.parameterValueForName("s"));
|
| EXPECT_EQ("U", t.parameterValueForName("Q"));
|
| EXPECT_EQ("S", t.parameterValueForName("T"));
|
| - EXPECT_EQ("q a", t.parameterValueForName("z u"));
|
|
|
| // TODO(yhirano): Case-sensitivity is mis-implemented.
|
| - // TODO(yhirano): Add tests for escaped quotations.
|
| - // TODO(yhirano): Leading spaces of a parameter value should be ignored.
|
| - // TODO(yhirano): Trailing spaces of a parameter value should be ignored.
|
| +}
|
| +
|
| +TEST(ParsedContentTypeTest, RelaxedParameterName) {
|
| + String input = "x/t; z=q/t:()<>@,:\\/[]?=;y=u";
|
| +
|
| + ParsedContentType t(input, Mode::Relaxed);
|
| +
|
| + EXPECT_TRUE(t.isValid());
|
| + EXPECT_EQ(2u, t.parameterCount());
|
| + EXPECT_EQ("q/t:()<>@,:\\/[]?=", t.parameterValueForName("z"));
|
| + EXPECT_EQ("u", t.parameterValueForName("y"));
|
| }
|
|
|
| } // namespace
|
|
|