79 lines · cpp
1//===-- SourceManagerTest.cpp ---------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Core/SourceManager.h"10#include "lldb/Host/FileSystem.h"11#include "lldb/Utility/SupportFile.h"12#include "gtest/gtest.h"13 14#include "TestingSupport/MockTildeExpressionResolver.h"15 16using namespace lldb;17using namespace lldb_private;18 19class SourceFileCache : public ::testing::Test {20public:21 void SetUp() override {22 FileSystem::Initialize(std::unique_ptr<TildeExpressionResolver>(23 new MockTildeExpressionResolver("Jonas", "/jonas")));24 }25 void TearDown() override { FileSystem::Terminate(); }26};27 28TEST_F(SourceFileCache, FindSourceFileFound) {29 SourceManager::SourceFileCache cache;30 31 // Insert: foo32 FileSpec foo_file_spec("foo");33 auto foo_file_sp = std::make_shared<SourceManager::File>(34 std::make_shared<SupportFile>(foo_file_spec), lldb::DebuggerSP());35 cache.AddSourceFile(foo_file_spec, foo_file_sp);36 37 // Query: foo, expect found.38 FileSpec another_foo_file_spec("foo");39 ASSERT_EQ(cache.FindSourceFile(another_foo_file_spec), foo_file_sp);40}41 42TEST_F(SourceFileCache, FindSourceFileNotFound) {43 SourceManager::SourceFileCache cache;44 45 // Insert: foo46 FileSpec foo_file_spec("foo");47 auto foo_file_sp = std::make_shared<SourceManager::File>(48 std::make_shared<SupportFile>(foo_file_spec), lldb::DebuggerSP());49 cache.AddSourceFile(foo_file_spec, foo_file_sp);50 51 // Query: bar, expect not found.52 FileSpec bar_file_spec("bar");53 ASSERT_EQ(cache.FindSourceFile(bar_file_spec), nullptr);54}55 56TEST_F(SourceFileCache, FindSourceFileByUnresolvedPath) {57 SourceManager::SourceFileCache cache;58 59 FileSpec foo_file_spec("~/foo");60 61 // Mimic the resolution in SourceManager::GetFile.62 FileSpec resolved_foo_file_spec = foo_file_spec;63 FileSystem::Instance().Resolve(resolved_foo_file_spec);64 65 // Create the file with the resolved file spec.66 auto foo_file_sp = std::make_shared<SourceManager::File>(67 std::make_shared<SupportFile>(resolved_foo_file_spec),68 lldb::DebuggerSP());69 70 // Cache the result with the unresolved file spec.71 cache.AddSourceFile(foo_file_spec, foo_file_sp);72 73 // Query the unresolved path.74 EXPECT_EQ(cache.FindSourceFile(FileSpec("~/foo")), foo_file_sp);75 76 // Query the resolved path.77 EXPECT_EQ(cache.FindSourceFile(FileSpec("/jonas/foo")), foo_file_sp);78}79