xref: /llvm-project/clang/unittests/Basic/FileEntryTest.cpp (revision 84e8257937ec6a332aa0b688f4dce57016516ffd)
1 //===- unittests/Basic/FileEntryTest.cpp - Test FileEntry/FileEntryRef ----===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "clang/Basic/FileEntry.h"
10 #include "llvm/ADT/StringMap.h"
11 #include "gtest/gtest.h"
12 
13 using namespace llvm;
14 using namespace clang;
15 
16 namespace {
17 
18 using MapEntry = FileEntryRef::MapEntry;
19 using MapValue = FileEntryRef::MapValue;
20 using MapType = StringMap<llvm::ErrorOr<MapValue>>;
21 
22 FileEntryRef addRef(MapType &M, StringRef Name, FileEntry &E) {
23   return FileEntryRef(*M.insert({Name, MapValue(E)}).first);
24 }
25 
26 TEST(FileEntryTest, FileEntryRef) {
27   MapType Refs;
28   FileEntry E1, E2;
29   FileEntryRef R1 = addRef(Refs, "1", E1);
30   FileEntryRef R2 = addRef(Refs, "2", E2);
31   FileEntryRef R1Also = addRef(Refs, "1-also", E1);
32 
33   EXPECT_EQ("1", R1.getName());
34   EXPECT_EQ("2", R2.getName());
35   EXPECT_EQ("1-also", R1Also.getName());
36 
37   EXPECT_EQ(&E1, &R1.getFileEntry());
38   EXPECT_EQ(&E2, &R2.getFileEntry());
39   EXPECT_EQ(&E1, &R1Also.getFileEntry());
40 
41   const FileEntry *CE1 = R1;
42   EXPECT_EQ(CE1, &E1);
43 }
44 
45 TEST(FileEntryTest, OptionalFileEntryRefDegradesToFileEntryPtr) {
46   MapType Refs;
47   FileEntry E1, E2;
48   OptionalFileEntryRefDegradesToFileEntryPtr M0;
49   OptionalFileEntryRefDegradesToFileEntryPtr M1 = addRef(Refs, "1", E1);
50   OptionalFileEntryRefDegradesToFileEntryPtr M2 = addRef(Refs, "2", E2);
51   OptionalFileEntryRefDegradesToFileEntryPtr M0Also = None;
52   OptionalFileEntryRefDegradesToFileEntryPtr M1Also =
53       addRef(Refs, "1-also", E1);
54 
55   EXPECT_EQ(M0, M0Also);
56   EXPECT_EQ(StringRef("1"), M1->getName());
57   EXPECT_EQ(StringRef("2"), M2->getName());
58   EXPECT_EQ(StringRef("1-also"), M1Also->getName());
59 
60   EXPECT_EQ(&E1, &M1->getFileEntry());
61   EXPECT_EQ(&E2, &M2->getFileEntry());
62   EXPECT_EQ(&E1, &M1Also->getFileEntry());
63 
64   const FileEntry *CE1 = M1;
65   EXPECT_EQ(CE1, &E1);
66 }
67 
68 TEST(FileEntryTest, equals) {
69   MapType Refs;
70   FileEntry E1, E2;
71   FileEntryRef R1 = addRef(Refs, "1", E1);
72   FileEntryRef R2 = addRef(Refs, "2", E2);
73   FileEntryRef R1Also = addRef(Refs, "1-also", E1);
74 
75   EXPECT_EQ(R1, &E1);
76   EXPECT_EQ(&E1, R1);
77   EXPECT_EQ(R1, R1Also);
78   EXPECT_NE(R1, &E2);
79   EXPECT_NE(&E2, R1);
80   EXPECT_NE(R1, R2);
81 
82   OptionalFileEntryRefDegradesToFileEntryPtr M0;
83   OptionalFileEntryRefDegradesToFileEntryPtr M1 = R1;
84 
85   EXPECT_EQ(M1, &E1);
86   EXPECT_EQ(&E1, M1);
87   EXPECT_NE(M1, &E2);
88   EXPECT_NE(&E2, M1);
89 }
90 
91 TEST(FileEntryTest, isSameRef) {
92   MapType Refs;
93   FileEntry E1, E2;
94   FileEntryRef R1 = addRef(Refs, "1", E1);
95   FileEntryRef R2 = addRef(Refs, "2", E2);
96   FileEntryRef R1Also = addRef(Refs, "1-also", E1);
97 
98   EXPECT_TRUE(R1.isSameRef(FileEntryRef(R1)));
99   EXPECT_TRUE(R1.isSameRef(FileEntryRef(R1.getMapEntry())));
100   EXPECT_FALSE(R1.isSameRef(R2));
101   EXPECT_FALSE(R1.isSameRef(R1Also));
102 }
103 
104 } // end namespace
105