1 // Copyright 2014 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.
6 #include "HTTPParsers.h"
8 #include "wtf/MathExtras.h"
9 #include "wtf/text/AtomicString.h"
11 #include <gtest/gtest.h>
15 TEST(HTTPParsersTest, ParseCacheControl)
17 CacheControlHeader header;
19 header = parseCacheControlDirectives("no-cache", AtomicString());
20 EXPECT_TRUE(header.parsed);
21 EXPECT_TRUE(header.containsNoCache);
22 EXPECT_FALSE(header.containsNoStore);
23 EXPECT_FALSE(header.containsMustRevalidate);
24 EXPECT_TRUE(std::isnan(header.maxAge));
26 header = parseCacheControlDirectives("no-cache no-store", AtomicString());
27 EXPECT_TRUE(header.parsed);
28 EXPECT_TRUE(header.containsNoCache);
29 EXPECT_FALSE(header.containsNoStore);
30 EXPECT_FALSE(header.containsMustRevalidate);
31 EXPECT_TRUE(std::isnan(header.maxAge));
33 header = parseCacheControlDirectives("no-store must-revalidate", AtomicString());
34 EXPECT_TRUE(header.parsed);
35 EXPECT_FALSE(header.containsNoCache);
36 EXPECT_TRUE(header.containsNoStore);
37 EXPECT_FALSE(header.containsMustRevalidate);
38 EXPECT_TRUE(std::isnan(header.maxAge));
40 header = parseCacheControlDirectives("max-age=0", AtomicString());
41 EXPECT_TRUE(header.parsed);
42 EXPECT_FALSE(header.containsNoCache);
43 EXPECT_FALSE(header.containsNoStore);
44 EXPECT_FALSE(header.containsMustRevalidate);
45 EXPECT_EQ(0.0, header.maxAge);
47 header = parseCacheControlDirectives("max-age", AtomicString());
48 EXPECT_TRUE(header.parsed);
49 EXPECT_FALSE(header.containsNoCache);
50 EXPECT_FALSE(header.containsNoStore);
51 EXPECT_FALSE(header.containsMustRevalidate);
52 EXPECT_TRUE(std::isnan(header.maxAge));
54 header = parseCacheControlDirectives("max-age=0 no-cache", AtomicString());
55 EXPECT_TRUE(header.parsed);
56 EXPECT_FALSE(header.containsNoCache);
57 EXPECT_FALSE(header.containsNoStore);
58 EXPECT_FALSE(header.containsMustRevalidate);
59 EXPECT_EQ(0.0, header.maxAge);
61 header = parseCacheControlDirectives("no-cache=foo", AtomicString());
62 EXPECT_TRUE(header.parsed);
63 EXPECT_FALSE(header.containsNoCache);
64 EXPECT_FALSE(header.containsNoStore);
65 EXPECT_FALSE(header.containsMustRevalidate);
66 EXPECT_TRUE(std::isnan(header.maxAge));
68 header = parseCacheControlDirectives("nonsense", AtomicString());
69 EXPECT_TRUE(header.parsed);
70 EXPECT_FALSE(header.containsNoCache);
71 EXPECT_FALSE(header.containsNoStore);
72 EXPECT_FALSE(header.containsMustRevalidate);
73 EXPECT_TRUE(std::isnan(header.maxAge));
75 header = parseCacheControlDirectives("\rno-cache\n\t\v\0\b", AtomicString());
76 EXPECT_TRUE(header.parsed);
77 EXPECT_TRUE(header.containsNoCache);
78 EXPECT_FALSE(header.containsNoStore);
79 EXPECT_FALSE(header.containsMustRevalidate);
80 EXPECT_TRUE(std::isnan(header.maxAge));
82 header = parseCacheControlDirectives(" no-cache ", AtomicString());
83 EXPECT_TRUE(header.parsed);
84 EXPECT_TRUE(header.containsNoCache);
85 EXPECT_FALSE(header.containsNoStore);
86 EXPECT_FALSE(header.containsMustRevalidate);
87 EXPECT_TRUE(std::isnan(header.maxAge));
89 header = parseCacheControlDirectives(AtomicString(), "no-cache");
90 EXPECT_TRUE(header.parsed);
91 EXPECT_TRUE(header.containsNoCache);
92 EXPECT_FALSE(header.containsNoStore);
93 EXPECT_FALSE(header.containsMustRevalidate);
94 EXPECT_TRUE(std::isnan(header.maxAge));
97 } // namespace WebCore