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