xref: /llvm-project/lldb/unittests/Core/SourceManagerTest.cpp (revision ab40ae8ff9f87b6e3d68cab2c47d692016ede958)
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