11f820fa4SEmre Kultursay //===-- SourceManagerTest.cpp ---------------------------------------------===// 21f820fa4SEmre Kultursay // 31f820fa4SEmre Kultursay // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41f820fa4SEmre Kultursay // See https://llvm.org/LICENSE.txt for license information. 51f820fa4SEmre Kultursay // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61f820fa4SEmre Kultursay // 71f820fa4SEmre Kultursay //===----------------------------------------------------------------------===// 81f820fa4SEmre Kultursay 91f820fa4SEmre Kultursay #include "lldb/Core/SourceManager.h" 101f820fa4SEmre Kultursay #include "lldb/Host/FileSystem.h" 11*ab40ae8fSJonas Devlieghere #include "lldb/Utility/SupportFile.h" 121f820fa4SEmre Kultursay #include "gtest/gtest.h" 131f820fa4SEmre Kultursay 14ca791456SJonas Devlieghere #include "TestingSupport/MockTildeExpressionResolver.h" 15ca791456SJonas Devlieghere 161f820fa4SEmre Kultursay using namespace lldb; 171f820fa4SEmre Kultursay using namespace lldb_private; 181f820fa4SEmre Kultursay 191f820fa4SEmre Kultursay class SourceFileCache : public ::testing::Test { 201f820fa4SEmre Kultursay public: 21ca791456SJonas Devlieghere void SetUp() override { 22ca791456SJonas Devlieghere FileSystem::Initialize(std::unique_ptr<TildeExpressionResolver>( 23ca791456SJonas Devlieghere new MockTildeExpressionResolver("Jonas", "/jonas"))); 24ca791456SJonas Devlieghere } 251f820fa4SEmre Kultursay void TearDown() override { FileSystem::Terminate(); } 261f820fa4SEmre Kultursay }; 271f820fa4SEmre Kultursay 281f820fa4SEmre Kultursay TEST_F(SourceFileCache, FindSourceFileFound) { 291f820fa4SEmre Kultursay SourceManager::SourceFileCache cache; 301f820fa4SEmre Kultursay 311f820fa4SEmre Kultursay // Insert: foo 321f820fa4SEmre Kultursay FileSpec foo_file_spec("foo"); 33*ab40ae8fSJonas Devlieghere auto foo_file_sp = std::make_shared<SourceManager::File>( 34*ab40ae8fSJonas Devlieghere std::make_shared<SupportFile>(foo_file_spec), lldb::DebuggerSP()); 35ca791456SJonas Devlieghere cache.AddSourceFile(foo_file_spec, foo_file_sp); 361f820fa4SEmre Kultursay 371f820fa4SEmre Kultursay // Query: foo, expect found. 381f820fa4SEmre Kultursay FileSpec another_foo_file_spec("foo"); 391f820fa4SEmre Kultursay ASSERT_EQ(cache.FindSourceFile(another_foo_file_spec), foo_file_sp); 401f820fa4SEmre Kultursay } 411f820fa4SEmre Kultursay 421f820fa4SEmre Kultursay TEST_F(SourceFileCache, FindSourceFileNotFound) { 431f820fa4SEmre Kultursay SourceManager::SourceFileCache cache; 441f820fa4SEmre Kultursay 451f820fa4SEmre Kultursay // Insert: foo 461f820fa4SEmre Kultursay FileSpec foo_file_spec("foo"); 47*ab40ae8fSJonas Devlieghere auto foo_file_sp = std::make_shared<SourceManager::File>( 48*ab40ae8fSJonas Devlieghere std::make_shared<SupportFile>(foo_file_spec), lldb::DebuggerSP()); 49ca791456SJonas Devlieghere cache.AddSourceFile(foo_file_spec, foo_file_sp); 501f820fa4SEmre Kultursay 511f820fa4SEmre Kultursay // Query: bar, expect not found. 521f820fa4SEmre Kultursay FileSpec bar_file_spec("bar"); 531f820fa4SEmre Kultursay ASSERT_EQ(cache.FindSourceFile(bar_file_spec), nullptr); 541f820fa4SEmre Kultursay } 55ca791456SJonas Devlieghere 56ca791456SJonas Devlieghere TEST_F(SourceFileCache, FindSourceFileByUnresolvedPath) { 57ca791456SJonas Devlieghere SourceManager::SourceFileCache cache; 58ca791456SJonas Devlieghere 59ca791456SJonas Devlieghere FileSpec foo_file_spec("~/foo"); 60ca791456SJonas Devlieghere 61ca791456SJonas Devlieghere // Mimic the resolution in SourceManager::GetFile. 62ca791456SJonas Devlieghere FileSpec resolved_foo_file_spec = foo_file_spec; 63ca791456SJonas Devlieghere FileSystem::Instance().Resolve(resolved_foo_file_spec); 64ca791456SJonas Devlieghere 65ca791456SJonas Devlieghere // Create the file with the resolved file spec. 6651944e78SJonas Devlieghere auto foo_file_sp = std::make_shared<SourceManager::File>( 67*ab40ae8fSJonas Devlieghere std::make_shared<SupportFile>(resolved_foo_file_spec), 68*ab40ae8fSJonas Devlieghere lldb::DebuggerSP()); 69ca791456SJonas Devlieghere 70ca791456SJonas Devlieghere // Cache the result with the unresolved file spec. 71ca791456SJonas Devlieghere cache.AddSourceFile(foo_file_spec, foo_file_sp); 72ca791456SJonas Devlieghere 73ca791456SJonas Devlieghere // Query the unresolved path. 74ca791456SJonas Devlieghere EXPECT_EQ(cache.FindSourceFile(FileSpec("~/foo")), foo_file_sp); 75ca791456SJonas Devlieghere 76ca791456SJonas Devlieghere // Query the resolved path. 77ca791456SJonas Devlieghere EXPECT_EQ(cache.FindSourceFile(FileSpec("/jonas/foo")), foo_file_sp); 78ca791456SJonas Devlieghere } 79