xref: /llvm-project/lldb/unittests/Utility/FileSpecListTest.cpp (revision 26670e7fa4f032a019d23d56c6a02926e854e8af)
147721d46Sroyitaqi //===-- FileSpecListTest.cpp ----------------------------------------------===//
247721d46Sroyitaqi //
347721d46Sroyitaqi // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
447721d46Sroyitaqi // See https://llvm.org/LICENSE.txt for license information.
547721d46Sroyitaqi // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
647721d46Sroyitaqi //
747721d46Sroyitaqi //===----------------------------------------------------------------------===//
847721d46Sroyitaqi 
947721d46Sroyitaqi #include "gtest/gtest.h"
1047721d46Sroyitaqi 
1147721d46Sroyitaqi #include "MockSymlinkFileSystem.h"
1247721d46Sroyitaqi #include "lldb/Utility/FileSpecList.h"
1347721d46Sroyitaqi #include "lldb/Utility/RealpathPrefixes.h"
1447721d46Sroyitaqi 
1547721d46Sroyitaqi using namespace lldb_private;
1647721d46Sroyitaqi 
1747721d46Sroyitaqi static FileSpec PosixSpec(llvm::StringRef path) {
1847721d46Sroyitaqi   return FileSpec(path, FileSpec::Style::posix);
1947721d46Sroyitaqi }
2047721d46Sroyitaqi 
2147721d46Sroyitaqi static FileSpec WindowsSpec(llvm::StringRef path) {
2247721d46Sroyitaqi   return FileSpec(path, FileSpec::Style::windows);
2347721d46Sroyitaqi }
2447721d46Sroyitaqi 
2547721d46Sroyitaqi TEST(SupportFileListTest, RelativePathMatchesPosix) {
2647721d46Sroyitaqi 
2747721d46Sroyitaqi   const FileSpec fullpath = PosixSpec("/build/src/main.cpp");
2847721d46Sroyitaqi   const FileSpec relative = PosixSpec("./src/main.cpp");
2947721d46Sroyitaqi   const FileSpec basename = PosixSpec("./main.cpp");
3047721d46Sroyitaqi   const FileSpec full_wrong = PosixSpec("/other/wrong/main.cpp");
3147721d46Sroyitaqi   const FileSpec rel_wrong = PosixSpec("./wrong/main.cpp");
3247721d46Sroyitaqi   // Make sure these don't match "src/main.cpp" as we want to match full
3347721d46Sroyitaqi   // directories only
3447721d46Sroyitaqi   const FileSpec rel2_wrong = PosixSpec("asrc/main.cpp");
3547721d46Sroyitaqi   const FileSpec rel3_wrong = PosixSpec("rc/main.cpp");
3647721d46Sroyitaqi 
3747721d46Sroyitaqi   SupportFileList files;
3847721d46Sroyitaqi   files.Append(fullpath);
3947721d46Sroyitaqi   files.Append(relative);
4047721d46Sroyitaqi   files.Append(basename);
4147721d46Sroyitaqi   files.Append(full_wrong);
4247721d46Sroyitaqi   files.Append(rel_wrong);
4347721d46Sroyitaqi   files.Append(rel2_wrong);
4447721d46Sroyitaqi   files.Append(rel3_wrong);
4547721d46Sroyitaqi 
4647721d46Sroyitaqi   // Make sure the full path only matches the first entry
4747721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, fullpath));
4847721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, fullpath));
4947721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, fullpath));
5047721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(3, fullpath));
5147721d46Sroyitaqi   // Make sure the relative path matches the all of the entries that contain
5247721d46Sroyitaqi   // the relative path
5347721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, relative));
5447721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, relative));
5547721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, relative));
5647721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(3, relative));
5747721d46Sroyitaqi 
5847721d46Sroyitaqi   // Make sure looking file a file using the basename matches all entries
5947721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, basename));
6047721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, basename));
6147721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, basename));
6247721d46Sroyitaqi   EXPECT_EQ((size_t)3, files.FindCompatibleIndex(3, basename));
6347721d46Sroyitaqi   EXPECT_EQ((size_t)4, files.FindCompatibleIndex(4, basename));
6447721d46Sroyitaqi   EXPECT_EQ((size_t)5, files.FindCompatibleIndex(5, basename));
6547721d46Sroyitaqi   EXPECT_EQ((size_t)6, files.FindCompatibleIndex(6, basename));
6647721d46Sroyitaqi 
6747721d46Sroyitaqi   // Make sure that paths that have a common suffix don't return values that
6847721d46Sroyitaqi   // don't match on directory delimiters.
6947721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(0, rel2_wrong));
7047721d46Sroyitaqi   EXPECT_EQ((size_t)5, files.FindCompatibleIndex(3, rel2_wrong));
7147721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(6, rel2_wrong));
7247721d46Sroyitaqi 
7347721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(0, rel3_wrong));
7447721d46Sroyitaqi   EXPECT_EQ((size_t)6, files.FindCompatibleIndex(3, rel3_wrong));
7547721d46Sroyitaqi }
7647721d46Sroyitaqi 
7747721d46Sroyitaqi TEST(SupportFileListTest, RelativePathMatchesWindows) {
7847721d46Sroyitaqi 
7947721d46Sroyitaqi   const FileSpec fullpath = WindowsSpec(R"(C:\build\src\main.cpp)");
8047721d46Sroyitaqi   const FileSpec relative = WindowsSpec(R"(.\src\main.cpp)");
8147721d46Sroyitaqi   const FileSpec basename = WindowsSpec(R"(.\main.cpp)");
8247721d46Sroyitaqi   const FileSpec full_wrong = WindowsSpec(R"(\other\wrong\main.cpp)");
8347721d46Sroyitaqi   const FileSpec rel_wrong = WindowsSpec(R"(.\wrong\main.cpp)");
8447721d46Sroyitaqi   // Make sure these don't match "src\main.cpp" as we want to match full
8547721d46Sroyitaqi   // directories only
8647721d46Sroyitaqi   const FileSpec rel2_wrong = WindowsSpec(R"(asrc\main.cpp)");
8747721d46Sroyitaqi   const FileSpec rel3_wrong = WindowsSpec(R"("rc\main.cpp)");
8847721d46Sroyitaqi 
8947721d46Sroyitaqi   SupportFileList files;
9047721d46Sroyitaqi   files.Append(fullpath);
9147721d46Sroyitaqi   files.Append(relative);
9247721d46Sroyitaqi   files.Append(basename);
9347721d46Sroyitaqi   files.Append(full_wrong);
9447721d46Sroyitaqi   files.Append(rel_wrong);
9547721d46Sroyitaqi   files.Append(rel2_wrong);
9647721d46Sroyitaqi   files.Append(rel3_wrong);
9747721d46Sroyitaqi 
9847721d46Sroyitaqi   // Make sure the full path only matches the first entry
9947721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, fullpath));
10047721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, fullpath));
10147721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, fullpath));
10247721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(3, fullpath));
10347721d46Sroyitaqi   // Make sure the relative path matches the all of the entries that contain
10447721d46Sroyitaqi   // the relative path
10547721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, relative));
10647721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, relative));
10747721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, relative));
10847721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(3, relative));
10947721d46Sroyitaqi 
11047721d46Sroyitaqi   // Make sure looking file a file using the basename matches all entries
11147721d46Sroyitaqi   EXPECT_EQ((size_t)0, files.FindCompatibleIndex(0, basename));
11247721d46Sroyitaqi   EXPECT_EQ((size_t)1, files.FindCompatibleIndex(1, basename));
11347721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(2, basename));
11447721d46Sroyitaqi   EXPECT_EQ((size_t)3, files.FindCompatibleIndex(3, basename));
11547721d46Sroyitaqi   EXPECT_EQ((size_t)4, files.FindCompatibleIndex(4, basename));
11647721d46Sroyitaqi   EXPECT_EQ((size_t)5, files.FindCompatibleIndex(5, basename));
11747721d46Sroyitaqi   EXPECT_EQ((size_t)6, files.FindCompatibleIndex(6, basename));
11847721d46Sroyitaqi 
11947721d46Sroyitaqi   // Make sure that paths that have a common suffix don't return values that
12047721d46Sroyitaqi   // don't match on directory delimiters.
12147721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(0, rel2_wrong));
12247721d46Sroyitaqi   EXPECT_EQ((size_t)5, files.FindCompatibleIndex(3, rel2_wrong));
12347721d46Sroyitaqi   EXPECT_EQ((size_t)UINT32_MAX, files.FindCompatibleIndex(6, rel2_wrong));
12447721d46Sroyitaqi 
12547721d46Sroyitaqi   EXPECT_EQ((size_t)2, files.FindCompatibleIndex(0, rel3_wrong));
12647721d46Sroyitaqi   EXPECT_EQ((size_t)6, files.FindCompatibleIndex(3, rel3_wrong));
12747721d46Sroyitaqi }
12847721d46Sroyitaqi 
12947721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
13047721d46Sroyitaqi // Absolute paths are used.
13147721d46Sroyitaqi // A matching prefix is set.
13247721d46Sroyitaqi // Should find it compatible.
13347721d46Sroyitaqi TEST(SupportFileListTest, SymlinkedAbsolutePaths) {
13447721d46Sroyitaqi   // Prepare FS
13547721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
136*26670e7fSroyitaqi       PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
137*26670e7fSroyitaqi       FileSpec::Style::posix));
13847721d46Sroyitaqi 
13947721d46Sroyitaqi   // Prepare RealpathPrefixes
14047721d46Sroyitaqi   FileSpecList file_spec_list;
141*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("/symlink_dir"));
14247721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
14347721d46Sroyitaqi 
14447721d46Sroyitaqi   // Prepare support file list
14547721d46Sroyitaqi   SupportFileList support_file_list;
146*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
14747721d46Sroyitaqi 
14847721d46Sroyitaqi   // Test
14947721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
150*26670e7fSroyitaqi       0, PosixSpec("/real_dir/foo.h"), &prefixes);
15147721d46Sroyitaqi   EXPECT_EQ(ret, (size_t)0);
15247721d46Sroyitaqi }
15347721d46Sroyitaqi 
15447721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
15547721d46Sroyitaqi // Absolute paths are used.
15647721d46Sroyitaqi // A matching prefix is set, which is the root directory.
15747721d46Sroyitaqi // Should find it compatible.
15847721d46Sroyitaqi TEST(SupportFileListTest, RootDirectory) {
15947721d46Sroyitaqi   // Prepare FS
16047721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
161*26670e7fSroyitaqi       PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
162*26670e7fSroyitaqi       FileSpec::Style::posix));
16347721d46Sroyitaqi 
16447721d46Sroyitaqi   // Prepare RealpathPrefixes
16547721d46Sroyitaqi   FileSpecList file_spec_list;
166*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("/"));
16747721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
16847721d46Sroyitaqi 
16947721d46Sroyitaqi   // Prepare support file list
17047721d46Sroyitaqi   SupportFileList support_file_list;
171*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
17247721d46Sroyitaqi 
17347721d46Sroyitaqi   // Test
17447721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
175*26670e7fSroyitaqi       0, PosixSpec("/real_dir/foo.h"), &prefixes);
17647721d46Sroyitaqi   EXPECT_EQ(ret, (size_t)0);
17747721d46Sroyitaqi }
17847721d46Sroyitaqi 
17947721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
18047721d46Sroyitaqi // Relative paths are used.
18147721d46Sroyitaqi // A matching prefix is set.
18247721d46Sroyitaqi // Should find it compatible.
18347721d46Sroyitaqi TEST(SupportFileListTest, SymlinkedRelativePaths) {
18447721d46Sroyitaqi   // Prepare FS
18547721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
186*26670e7fSroyitaqi       PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
187*26670e7fSroyitaqi       FileSpec::Style::posix));
18847721d46Sroyitaqi 
18947721d46Sroyitaqi   // Prepare RealpathPrefixes
19047721d46Sroyitaqi   FileSpecList file_spec_list;
191*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("symlink_dir"));
19247721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
19347721d46Sroyitaqi 
19447721d46Sroyitaqi   // Prepare support file list
19547721d46Sroyitaqi   SupportFileList support_file_list;
196*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
19747721d46Sroyitaqi 
19847721d46Sroyitaqi   // Test
19947721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
200*26670e7fSroyitaqi       0, PosixSpec("real_dir/foo.h"), &prefixes);
20147721d46Sroyitaqi   EXPECT_EQ(ret, (size_t)0);
20247721d46Sroyitaqi }
20347721d46Sroyitaqi 
20447721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
20547721d46Sroyitaqi // A matching prefix is set.
20647721d46Sroyitaqi // Input file only match basename and not directory.
20747721d46Sroyitaqi // Should find it incompatible.
20847721d46Sroyitaqi TEST(SupportFileListTest, RealpathOnlyMatchFileName) {
20947721d46Sroyitaqi   // Prepare FS
21047721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
211*26670e7fSroyitaqi       PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
212*26670e7fSroyitaqi       FileSpec::Style::posix));
21347721d46Sroyitaqi 
21447721d46Sroyitaqi   // Prepare RealpathPrefixes
21547721d46Sroyitaqi   FileSpecList file_spec_list;
216*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("symlink_dir"));
21747721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
21847721d46Sroyitaqi 
21947721d46Sroyitaqi   // Prepare support file list
22047721d46Sroyitaqi   SupportFileList support_file_list;
221*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
22247721d46Sroyitaqi 
22347721d46Sroyitaqi   // Test
22447721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
225*26670e7fSroyitaqi       0, PosixSpec("some_other_dir/foo.h"), &prefixes);
22647721d46Sroyitaqi   EXPECT_EQ(ret, UINT32_MAX);
22747721d46Sroyitaqi }
22847721d46Sroyitaqi 
22947721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
23047721d46Sroyitaqi // A prefix is set, which is a matching string prefix, but not a path prefix.
23147721d46Sroyitaqi // Should find it incompatible.
23247721d46Sroyitaqi TEST(SupportFileListTest, DirectoryMatchStringPrefixButNotWholeDirectoryName) {
23347721d46Sroyitaqi   // Prepare FS
23447721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
235*26670e7fSroyitaqi       PosixSpec("symlink_dir/foo.h"), PosixSpec("real_dir/foo.h"),
236*26670e7fSroyitaqi       FileSpec::Style::posix));
23747721d46Sroyitaqi 
23847721d46Sroyitaqi   // Prepare RealpathPrefixes
23947721d46Sroyitaqi   FileSpecList file_spec_list;
240*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("symlink")); // This is a string prefix of the
24147721d46Sroyitaqi                                                // symlink but not a path prefix.
24247721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
24347721d46Sroyitaqi 
24447721d46Sroyitaqi   // Prepare support file list
24547721d46Sroyitaqi   SupportFileList support_file_list;
246*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
24747721d46Sroyitaqi 
24847721d46Sroyitaqi   // Test
24947721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
250*26670e7fSroyitaqi       0, PosixSpec("real_dir/foo.h"), &prefixes);
25147721d46Sroyitaqi   EXPECT_EQ(ret, UINT32_MAX);
25247721d46Sroyitaqi }
25347721d46Sroyitaqi 
25447721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
25547721d46Sroyitaqi // A matching prefix is set.
25647721d46Sroyitaqi // However, the breakpoint is set with a partial path.
25747721d46Sroyitaqi // Should find it compatible.
25847721d46Sroyitaqi TEST(SupportFileListTest, PartialBreakpointPath) {
25947721d46Sroyitaqi   // Prepare FS
26047721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
261*26670e7fSroyitaqi       PosixSpec("symlink_dir/foo.h"), PosixSpec("/real_dir/foo.h"),
262*26670e7fSroyitaqi       FileSpec::Style::posix));
26347721d46Sroyitaqi 
26447721d46Sroyitaqi   // Prepare RealpathPrefixes
26547721d46Sroyitaqi   FileSpecList file_spec_list;
266*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("symlink_dir"));
26747721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
26847721d46Sroyitaqi 
26947721d46Sroyitaqi   // Prepare support file list
27047721d46Sroyitaqi   SupportFileList support_file_list;
271*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("symlink_dir/foo.h"));
27247721d46Sroyitaqi 
27347721d46Sroyitaqi   // Test
27447721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
275*26670e7fSroyitaqi       0, PosixSpec("real_dir/foo.h"), &prefixes);
27647721d46Sroyitaqi   EXPECT_EQ(ret, (size_t)0);
27747721d46Sroyitaqi }
27847721d46Sroyitaqi 
27947721d46Sroyitaqi // Support file is a symlink to the breakpoint file.
28047721d46Sroyitaqi // A matching prefix is set.
28147721d46Sroyitaqi // However, the basename is different between the symlink and its target.
28247721d46Sroyitaqi // Should find it incompatible.
28347721d46Sroyitaqi TEST(SupportFileListTest, DifferentBasename) {
28447721d46Sroyitaqi   // Prepare FS
28547721d46Sroyitaqi   llvm::IntrusiveRefCntPtr<MockSymlinkFileSystem> fs(new MockSymlinkFileSystem(
286*26670e7fSroyitaqi       PosixSpec("/symlink_dir/foo.h"), PosixSpec("/real_dir/bar.h"),
287*26670e7fSroyitaqi       FileSpec::Style::posix));
28847721d46Sroyitaqi 
28947721d46Sroyitaqi   // Prepare RealpathPrefixes
29047721d46Sroyitaqi   FileSpecList file_spec_list;
291*26670e7fSroyitaqi   file_spec_list.Append(PosixSpec("/symlink_dir"));
29247721d46Sroyitaqi   RealpathPrefixes prefixes(file_spec_list, fs);
29347721d46Sroyitaqi 
29447721d46Sroyitaqi   // Prepare support file list
29547721d46Sroyitaqi   SupportFileList support_file_list;
296*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("/symlink_dir/foo.h"));
29747721d46Sroyitaqi 
29847721d46Sroyitaqi   // Test
29947721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
300*26670e7fSroyitaqi       0, PosixSpec("real_dir/bar.h"), &prefixes);
30147721d46Sroyitaqi   EXPECT_EQ(ret, UINT32_MAX);
30247721d46Sroyitaqi }
30347721d46Sroyitaqi 
30447721d46Sroyitaqi // No prefixes are configured.
30547721d46Sroyitaqi // The support file and the breakpoint file are different.
30647721d46Sroyitaqi // Should find it incompatible.
30747721d46Sroyitaqi TEST(SupportFileListTest, NoPrefixes) {
30847721d46Sroyitaqi   // Prepare support file list
30947721d46Sroyitaqi   SupportFileList support_file_list;
310*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("/real_dir/bar.h"));
31147721d46Sroyitaqi 
31247721d46Sroyitaqi   // Test
31347721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
314*26670e7fSroyitaqi       0, PosixSpec("/real_dir/foo.h"), nullptr);
31547721d46Sroyitaqi   EXPECT_EQ(ret, UINT32_MAX);
31647721d46Sroyitaqi }
31747721d46Sroyitaqi 
31847721d46Sroyitaqi // No prefixes are configured.
31947721d46Sroyitaqi // The support file and the breakpoint file are the same.
32047721d46Sroyitaqi // Should find it compatible.
32147721d46Sroyitaqi TEST(SupportFileListTest, SameFile) {
32247721d46Sroyitaqi   // Prepare support file list
32347721d46Sroyitaqi   SupportFileList support_file_list;
324*26670e7fSroyitaqi   support_file_list.Append(PosixSpec("/real_dir/foo.h"));
32547721d46Sroyitaqi 
32647721d46Sroyitaqi   // Test
32747721d46Sroyitaqi   size_t ret = support_file_list.FindCompatibleIndex(
328*26670e7fSroyitaqi       0, PosixSpec("/real_dir/foo.h"), nullptr);
32947721d46Sroyitaqi   EXPECT_EQ(ret, (size_t)0);
33047721d46Sroyitaqi }
331