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

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

Issue 2880543003: Implement a parser for Content-Disposition header fields (Closed)
Patch Set: Rebase Created 3 years, 7 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "platform/network/ParsedContentDisposition.h"
6 #include "platform/network/ParsedContentHeaderFieldParameters.h"
7 #include "platform/network/ParsedContentType.h"
8
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace blink {
12
13 namespace {
14
15 using Mode = ParsedContentHeaderFieldParameters::Mode;
16
17 void CheckValidity(bool expected,
18 const String& input,
19 Mode mode = Mode::kNormal) {
20 EXPECT_EQ(expected,
21 ParsedContentHeaderFieldParameters::CreateForTesting(input, mode)
22 .IsValid())
23 << input;
24
25 const String disposition_input = "attachment" + input;
26 EXPECT_EQ(expected,
27 ParsedContentDisposition(disposition_input, mode).IsValid())
28 << disposition_input;
29
30 const String type_input = "text/plain" + input;
31 EXPECT_EQ(expected, ParsedContentType(type_input, mode).IsValid())
32 << type_input;
33 }
34
35 TEST(ParsedContentHeaderFieldParametersTest, Validity) {
36 CheckValidity(true, "");
37 CheckValidity(true, " ");
38 CheckValidity(true, " ;p1=v1");
39 CheckValidity(true, "; p1=v1");
40 CheckValidity(true, ";p1=v1 ");
41 CheckValidity(true, ";p1 = v1");
42 CheckValidity(true, ";z=\"ttx&r=z;;\\u\\\"kd==\"");
43 CheckValidity(true, "; z=\"\xff\"");
44
45 CheckValidity(false, "\r");
46 CheckValidity(false, "\n");
47 CheckValidity(false, " p1=v1");
48 CheckValidity(false, ";p1=v1;");
49 CheckValidity(false, ";");
50 CheckValidity(false, "; ");
51 CheckValidity(false, "; p1");
52 CheckValidity(false, "; p1;");
53 CheckValidity(false, ";\"xx");
54 CheckValidity(false, ";\"xx=y");
55 CheckValidity(false, "; \"z\"=u");
56 CheckValidity(false, "; z=\xff");
57
58 CheckValidity(false, ";z=q/t:()<>@,:\\/[]?");
59 CheckValidity(true, ";z=q/t:()<>@,:\\/[]?=", Mode::kRelaxed);
60 CheckValidity(false, ";z=q r", Mode::kRelaxed);
61 CheckValidity(false, ";z=q;r", Mode::kRelaxed);
62 CheckValidity(false, ";z=q\"r", Mode::kRelaxed);
63 CheckValidity(false, "; z=\xff", Mode::kRelaxed);
64 }
65
66 TEST(ParsedContentHeaderFieldParametersTest, ParameterName) {
67 String input = "; y=z ; y= u ; t=r;k= \"t \\u\\\"x\" ;Q=U;T=S";
68
69 CheckValidity(true, input);
70
71 ParsedContentHeaderFieldParameters t =
72 ParsedContentHeaderFieldParameters::CreateForTesting(input,
73 Mode::kNormal);
74 EXPECT_TRUE(t.IsValid());
75 EXPECT_EQ(4u, t.ParameterCount());
76 EXPECT_EQ(String(), t.ParameterValueForName("a"));
77 EXPECT_EQ(String(), t.ParameterValueForName("x"));
78 EXPECT_EQ("u", t.ParameterValueForName("y"));
79 EXPECT_EQ("S", t.ParameterValueForName("t"));
80 EXPECT_EQ("t u\"x", t.ParameterValueForName("k"));
81 EXPECT_EQ("U", t.ParameterValueForName("Q"));
82 EXPECT_EQ("S", t.ParameterValueForName("T"));
83
84 String kelvin = String::FromUTF8("\xe2\x84\xaa");
85 DCHECK_EQ(kelvin.LowerUnicode(AtomicString()), "k");
86 EXPECT_EQ(String(), t.ParameterValueForName(kelvin));
87 }
88
89 TEST(ParsedContentHeaderFieldParametersTest, RelaxedParameterName) {
90 String input = "; z=q/t:()<>@,:\\/[]?=;y=u";
91
92 CheckValidity(true, input, Mode::kRelaxed);
93
94 ParsedContentHeaderFieldParameters t =
95 ParsedContentHeaderFieldParameters::CreateForTesting(input,
96 Mode::kRelaxed);
97 EXPECT_TRUE(t.IsValid());
98 EXPECT_EQ(2u, t.ParameterCount());
99 EXPECT_EQ("q/t:()<>@,:\\/[]?=", t.ParameterValueForName("z"));
100 EXPECT_EQ("u", t.ParameterValueForName("y"));
101 }
102
103 TEST(ParsedContentHeaderFieldParametersTest, StrictParameterName) {
104 CheckValidity(true, "", Mode::kStrict);
105 CheckValidity(true, "; p1=a", Mode::kStrict);
106 CheckValidity(false, "; p1=a; p1=b", Mode::kStrict);
107 CheckValidity(true, "; p1=a; p2=b", Mode::kStrict);
108 }
109
110 } // namespace
111
112 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698