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