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