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 "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(t: 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: foo
32 FileSpec foo_file_spec("foo");
33 auto foo_file_sp = std::make_shared<SourceManager::File>(
34 args: std::make_shared<SupportFile>(args&: foo_file_spec), args: lldb::DebuggerSP());
35 cache.AddSourceFile(file_spec: foo_file_spec, file_sp: 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: foo
46 FileSpec foo_file_spec("foo");
47 auto foo_file_sp = std::make_shared<SourceManager::File>(
48 args: std::make_shared<SupportFile>(args&: foo_file_spec), args: lldb::DebuggerSP());
49 cache.AddSourceFile(file_spec: foo_file_spec, file_sp: 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(file_spec&: 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 args: std::make_shared<SupportFile>(args&: resolved_foo_file_spec),
68 args: lldb::DebuggerSP());
69
70 // Cache the result with the unresolved file spec.
71 cache.AddSourceFile(file_spec: foo_file_spec, file_sp: 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

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of lldb/unittests/Core/SourceManagerTest.cpp