12 #include "gmock/gmock.h"
13 #include "gtest/gtest.h"
22 class TestCache :
public FileCache {
24 mutable std::string Value;
27 TestCache() : FileCache(
testPath(
"foo.cc")) {}
29 void setContents(
const char *
C) {
36 std::string get(std::chrono::steady_clock::time_point FreshTime,
37 bool ExpectParse)
const {
38 bool GotParse =
false;
43 [&](llvm::Optional<llvm::StringRef> Data) {
45 Value = Data.value_or(
"").str();
51 EXPECT_EQ(GotParse, ExpectParse);
57 TEST(FileCacheTest, Invalidation) {
60 auto StaleOK = std::chrono::steady_clock::now();
61 auto MustBeFresh = StaleOK + std::chrono::hours(1);
64 EXPECT_EQ(
"a",
C.get(StaleOK,
true)) <<
"Parsed first time";
65 EXPECT_EQ(
"a",
C.get(StaleOK,
false)) <<
"Cached (time)";
66 EXPECT_EQ(
"a",
C.get(MustBeFresh,
false)) <<
"Cached (stat)";
68 EXPECT_EQ(
"a",
C.get(StaleOK,
false)) <<
"Cached (time)";
69 EXPECT_EQ(
"bb",
C.get(MustBeFresh,
true)) <<
"Size changed";
70 EXPECT_EQ(
"bb",
C.get(MustBeFresh,
true)) <<
"Cached (stat)";
71 C.setContents(
nullptr);
72 EXPECT_EQ(
"bb",
C.get(StaleOK,
false)) <<
"Cached (time)";
73 EXPECT_EQ(
"",
C.get(MustBeFresh,
true)) <<
"Stat failed";
74 EXPECT_EQ(
"",
C.get(MustBeFresh,
false)) <<
"Cached (404)";
76 EXPECT_EQ(
"",
C.get(StaleOK,
false)) <<
"Cached (time)";
77 EXPECT_EQ(
"bb",
C.get(MustBeFresh,
true)) <<
"Size changed";