forked from OSchip/llvm-project
184 lines
7.4 KiB
C++
184 lines
7.4 KiB
C++
//===-- SourceLocationSpecTest.cpp ----------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "lldb/Core/SourceLocationSpec.h"
|
|
#include "lldb/Utility/LLDBAssert.h"
|
|
|
|
#include "llvm/Testing/Support/Error.h"
|
|
|
|
using namespace lldb_private;
|
|
|
|
TEST(SourceLocationSpecTest, OperatorBool) {
|
|
SourceLocationSpec invalid(FileSpec(), 0);
|
|
EXPECT_FALSE(invalid);
|
|
|
|
SourceLocationSpec invalid_filespec(FileSpec(), 4);
|
|
EXPECT_FALSE(invalid_filespec);
|
|
|
|
SourceLocationSpec invalid_line(FileSpec("/foo/bar"), 0);
|
|
EXPECT_FALSE(invalid_line);
|
|
|
|
SourceLocationSpec valid_fs_line_no_column(FileSpec("/foo/bar"), 4);
|
|
EXPECT_TRUE(valid_fs_line_no_column);
|
|
|
|
SourceLocationSpec invalid_fs_column(FileSpec(), 4, 0);
|
|
EXPECT_FALSE(invalid_fs_column);
|
|
|
|
SourceLocationSpec invalid_line_column(FileSpec("/foo/bar"), 0, 19);
|
|
EXPECT_FALSE(invalid_line_column);
|
|
|
|
SourceLocationSpec valid_fs_line_zero_column(FileSpec("/foo/bar"), 4, 0);
|
|
EXPECT_TRUE(valid_fs_line_zero_column);
|
|
|
|
SourceLocationSpec valid_fs_line_column(FileSpec("/foo/bar"), 4, 19);
|
|
EXPECT_TRUE(valid_fs_line_column);
|
|
}
|
|
|
|
TEST(SourceLocationSpecTest, FileLineColumnComponents) {
|
|
FileSpec fs("/foo/bar", FileSpec::Style::posix);
|
|
const uint32_t line = 19;
|
|
const uint16_t column = 4;
|
|
|
|
SourceLocationSpec without_column(fs, line, LLDB_INVALID_COLUMN_NUMBER, false,
|
|
true);
|
|
EXPECT_TRUE(without_column);
|
|
EXPECT_EQ(fs, without_column.GetFileSpec());
|
|
EXPECT_EQ(line, without_column.GetLine().getValueOr(0));
|
|
EXPECT_EQ(llvm::None, without_column.GetColumn());
|
|
EXPECT_FALSE(without_column.GetCheckInlines());
|
|
EXPECT_TRUE(without_column.GetExactMatch());
|
|
EXPECT_STREQ("check inlines = false, exact match = true, decl = /foo/bar:19",
|
|
without_column.GetString().c_str());
|
|
|
|
SourceLocationSpec with_column(fs, line, column, true, false);
|
|
EXPECT_TRUE(with_column);
|
|
EXPECT_EQ(column, *with_column.GetColumn());
|
|
EXPECT_TRUE(with_column.GetCheckInlines());
|
|
EXPECT_FALSE(with_column.GetExactMatch());
|
|
EXPECT_STREQ(
|
|
"check inlines = true, exact match = false, decl = /foo/bar:19:4",
|
|
with_column.GetString().c_str());
|
|
}
|
|
|
|
static SourceLocationSpec Create(bool check_inlines, bool exact_match,
|
|
FileSpec fs, uint32_t line,
|
|
uint16_t column = LLDB_INVALID_COLUMN_NUMBER) {
|
|
return SourceLocationSpec(fs, line, column, check_inlines, exact_match);
|
|
}
|
|
|
|
TEST(SourceLocationSpecTest, Equal) {
|
|
auto Equal = [](SourceLocationSpec lhs, SourceLocationSpec rhs, bool full) {
|
|
return SourceLocationSpec::Equal(lhs, rhs, full);
|
|
};
|
|
|
|
const FileSpec fs("/foo/bar", FileSpec::Style::posix);
|
|
const FileSpec other_fs("/foo/baz", FileSpec::Style::posix);
|
|
|
|
// mutating FileSpec + const Inlined, ExactMatch, Line
|
|
EXPECT_TRUE(
|
|
Equal(Create(false, false, fs, 4), Create(false, false, fs, 4), true));
|
|
EXPECT_TRUE(
|
|
Equal(Create(true, true, fs, 4), Create(true, true, fs, 4), false));
|
|
EXPECT_FALSE(Equal(Create(false, false, fs, 4),
|
|
Create(false, false, other_fs, 4), true));
|
|
EXPECT_FALSE(
|
|
Equal(Create(true, true, fs, 4), Create(true, true, other_fs, 4), false));
|
|
|
|
// Mutating FileSpec + const Inlined, ExactMatch, Line, Column
|
|
EXPECT_TRUE(Equal(Create(false, false, fs, 4, 19),
|
|
Create(false, false, fs, 4, 19), true));
|
|
EXPECT_TRUE(Equal(Create(true, true, fs, 4, 19),
|
|
Create(true, true, fs, 4, 19), false));
|
|
EXPECT_FALSE(Equal(Create(false, false, fs, 4, 19),
|
|
Create(false, false, other_fs, 4, 19), true));
|
|
EXPECT_FALSE(Equal(Create(true, true, fs, 4, 19),
|
|
Create(true, true, other_fs, 4, 19), false));
|
|
|
|
// Asymetric match
|
|
EXPECT_FALSE(
|
|
Equal(Create(true, true, fs, 4), Create(true, true, fs, 4, 19), true));
|
|
EXPECT_TRUE(Equal(Create(false, false, fs, 4),
|
|
Create(false, false, fs, 4, 19), false));
|
|
|
|
// Mutating Inlined, ExactMatch
|
|
EXPECT_FALSE(
|
|
Equal(Create(true, false, fs, 4), Create(false, true, fs, 4), true));
|
|
EXPECT_TRUE(
|
|
Equal(Create(false, true, fs, 4), Create(true, false, fs, 4), false));
|
|
|
|
// Mutating Column
|
|
EXPECT_FALSE(Equal(Create(true, true, fs, 4, 96),
|
|
Create(true, true, fs, 4, 19), true));
|
|
EXPECT_TRUE(Equal(Create(false, false, fs, 4, 96),
|
|
Create(false, false, fs, 4, 19), false));
|
|
}
|
|
|
|
TEST(SourceLocationSpecTest, Compare) {
|
|
auto Cmp = [](SourceLocationSpec a, SourceLocationSpec b) {
|
|
return SourceLocationSpec::Compare(a, b);
|
|
};
|
|
|
|
FileSpec fs("/foo/bar", FileSpec::Style::posix);
|
|
FileSpec other_fs("/foo/baz", FileSpec::Style::posix);
|
|
|
|
// Asymetric comparaison
|
|
EXPECT_EQ(-1, Cmp(Create(true, true, fs, 4), Create(true, true, fs, 4, 19)));
|
|
EXPECT_EQ(-1,
|
|
Cmp(Create(false, false, fs, 4), Create(false, false, fs, 4, 19)));
|
|
EXPECT_EQ(1, Cmp(Create(true, true, fs, 4, 19), Create(true, true, fs, 4)));
|
|
|
|
// Mutating FS, const Line
|
|
EXPECT_EQ(
|
|
-1, Cmp(Create(false, false, fs, 4), Create(false, false, other_fs, 4)));
|
|
EXPECT_EQ(-1,
|
|
Cmp(Create(true, true, fs, 4), Create(true, true, other_fs, 4)));
|
|
EXPECT_EQ(1,
|
|
Cmp(Create(false, true, other_fs, 4), Create(false, true, fs, 4)));
|
|
EXPECT_EQ(1,
|
|
Cmp(Create(true, false, other_fs, 4), Create(true, false, fs, 4)));
|
|
|
|
// Const FS, mutating Line
|
|
EXPECT_EQ(-1, Cmp(Create(false, false, fs, 1), Create(false, false, fs, 4)));
|
|
EXPECT_EQ(-1, Cmp(Create(true, true, fs, 1), Create(true, true, fs, 4)));
|
|
EXPECT_EQ(0, Cmp(Create(false, true, fs, 4), Create(false, true, fs, 4)));
|
|
EXPECT_EQ(0, Cmp(Create(true, false, fs, 4), Create(true, false, fs, 4)));
|
|
EXPECT_EQ(1, Cmp(Create(false, false, fs, 4), Create(false, false, fs, 1)));
|
|
EXPECT_EQ(1, Cmp(Create(true, true, fs, 4), Create(true, true, fs, 1)));
|
|
|
|
// Const FS, mutating Line, const Column
|
|
EXPECT_EQ(-1,
|
|
Cmp(Create(false, true, fs, 1), Create(false, true, fs, 4, 19)));
|
|
EXPECT_EQ(-1, Cmp(Create(true, true, fs, 1), Create(true, true, fs, 4, 19)));
|
|
EXPECT_EQ(1, Cmp(Create(true, false, fs, 4, 19), Create(true, false, fs, 1)));
|
|
EXPECT_EQ(1, Cmp(Create(true, false, fs, 4, 19), Create(true, false, fs, 1)));
|
|
|
|
// Mutating FS, const Line, const Column
|
|
EXPECT_EQ(-1, Cmp(Create(false, false, fs, 4, 19),
|
|
Create(false, false, other_fs, 4, 19)));
|
|
EXPECT_EQ(-1, Cmp(Create(true, true, fs, 4, 19),
|
|
Create(true, true, other_fs, 4, 19)));
|
|
EXPECT_EQ(
|
|
0, Cmp(Create(false, false, fs, 4, 19), Create(false, false, fs, 4, 19)));
|
|
EXPECT_EQ(0,
|
|
Cmp(Create(true, true, fs, 4, 19), Create(true, true, fs, 4, 19)));
|
|
EXPECT_EQ(1, Cmp(Create(false, true, other_fs, 4, 19),
|
|
Create(false, true, fs, 4, 19)));
|
|
EXPECT_EQ(1, Cmp(Create(true, false, other_fs, 4, 19),
|
|
Create(true, false, fs, 4, 19)));
|
|
|
|
// Const FS, const Line, mutating Column
|
|
EXPECT_EQ(-1, Cmp(Create(false, false, fs, 4, 19),
|
|
Create(false, false, fs, 4, 96)));
|
|
EXPECT_EQ(1,
|
|
Cmp(Create(true, true, fs, 4, 96), Create(true, true, fs, 4, 19)));
|
|
EXPECT_EQ(
|
|
1, Cmp(Create(false, true, fs, 4, 96), Create(false, true, fs, 4, 19)));
|
|
}
|