Balázs Benics fcd230adc6
[clang][ssaf][NFC] Move SSAF from Analysis/Scalable/ to ScalableStaticAnalysisFramework/ (#186156)
- Rename `clang/{include,lib,unittests}/Analysis/Scalable/` to
`clang/{include,lib,unittests}/ScalableStaticAnalysisFramework/Core/`
- Update header-guards with their new paths
- Rename the library `clangAnalysisScalable` to
`clangScalableStaticAnalysisFrameworkCore`
- Add a new `Clang_ScalableStaticAnalysisFramework` module to
`module.modulemap`
- Update GN build files, GitHub PR labeler, and documentation
- Harmonise license comments
- Add a missing header-guard
2026-03-13 11:50:07 +00:00

159 lines
4.9 KiB
C++

//===- BuildNamespaceTest.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 "clang/ScalableStaticAnalysisFramework/Core/Model/BuildNamespace.h"
#include "clang/ScalableStaticAnalysisFramework/Core/Support/FormatProviders.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/raw_ostream.h"
#include "gtest/gtest.h"
namespace clang::ssaf {
namespace {
TEST(BuildNamespaceTest, Equality) {
auto BN1 = BuildNamespace::makeCompilationUnit("test.cpp");
auto BN2 = BuildNamespace::makeCompilationUnit("test.cpp");
auto BN3 = BuildNamespace::makeCompilationUnit("other.cpp");
EXPECT_EQ(BN1, BN2);
EXPECT_NE(BN1, BN3);
}
TEST(BuildNamespaceTest, DifferentKinds) {
BuildNamespace CU(BuildNamespaceKind::CompilationUnit, "test");
BuildNamespace LU(BuildNamespaceKind::LinkUnit, "test");
EXPECT_NE(CU, LU);
}
// NestedBuildNamespace Tests
TEST(NestedBuildNamespaceTest, DefaultConstruction) {
NestedBuildNamespace NBN;
EXPECT_TRUE(NBN.empty());
}
TEST(NestedBuildNamespaceTest, SingleNamespaceConstruction) {
auto BN = BuildNamespace::makeCompilationUnit("test.cpp");
NestedBuildNamespace NBN(BN);
EXPECT_FALSE(NBN.empty());
}
TEST(NestedBuildNamespaceTest, MakeTU) {
auto NBN = NestedBuildNamespace::makeCompilationUnit("test.cpp");
EXPECT_FALSE(NBN.empty());
}
TEST(NestedBuildNamespaceTest, Equality) {
auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
auto NBN2 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
auto NBN3 = NestedBuildNamespace::makeCompilationUnit("other.cpp");
EXPECT_EQ(NBN1, NBN2);
EXPECT_NE(NBN1, NBN3);
}
TEST(NestedBuildNamespaceTest, MakeQualified) {
auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
BuildNamespace LinkNS(BuildNamespaceKind::LinkUnit, "app");
NestedBuildNamespace NBN2(LinkNS);
auto Qualified = NBN1.makeQualified(NBN2);
EXPECT_NE(Qualified, NBN1);
EXPECT_NE(Qualified, NBN2);
}
TEST(NestedBuildNamespaceTest, EmptyQualified) {
NestedBuildNamespace Empty;
auto NBN = NestedBuildNamespace::makeCompilationUnit("test.cpp");
auto Qualified = Empty.makeQualified(NBN);
EXPECT_EQ(Qualified, NBN);
}
TEST(BuildNamespaceKindTest, FormatProvider) {
EXPECT_EQ(llvm::formatv("{0}", BuildNamespaceKind::CompilationUnit).str(),
"CompilationUnit");
EXPECT_EQ(llvm::formatv("{0}", BuildNamespaceKind::LinkUnit).str(),
"LinkUnit");
}
TEST(BuildNamespaceKindTest, StreamOutputCompilationUnit) {
std::string S;
llvm::raw_string_ostream(S) << BuildNamespaceKind::CompilationUnit;
EXPECT_EQ(S, "CompilationUnit");
}
TEST(BuildNamespaceKindTest, StreamOutputLinkUnit) {
std::string S;
llvm::raw_string_ostream(S) << BuildNamespaceKind::LinkUnit;
EXPECT_EQ(S, "LinkUnit");
}
TEST(BuildNamespaceTest, FormatProvider) {
EXPECT_EQ(
llvm::formatv("{0}", BuildNamespace(BuildNamespaceKind::CompilationUnit,
"test.cpp"))
.str(),
"BuildNamespace(CompilationUnit, test.cpp)");
}
TEST(NestedBuildNamespaceTest, FormatProvider) {
NestedBuildNamespace NBN(
BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
EXPECT_EQ(
llvm::formatv("{0}", NBN).str(),
"NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)])");
}
TEST(BuildNamespaceTest, StreamOutputCompilationUnit) {
BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
std::string S;
llvm::raw_string_ostream(S) << BN;
EXPECT_EQ(S, "BuildNamespace(CompilationUnit, test.cpp)");
}
TEST(BuildNamespaceTest, StreamOutputLinkUnit) {
BuildNamespace BN(BuildNamespaceKind::LinkUnit, "app");
std::string S;
llvm::raw_string_ostream(S) << BN;
EXPECT_EQ(S, "BuildNamespace(LinkUnit, app)");
}
TEST(NestedBuildNamespaceTest, StreamOutputEmpty) {
NestedBuildNamespace NBN;
std::string S;
llvm::raw_string_ostream(S) << NBN;
EXPECT_EQ(S, "NestedBuildNamespace([])");
}
TEST(NestedBuildNamespaceTest, StreamOutputSingle) {
NestedBuildNamespace NBN(
BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
std::string S;
llvm::raw_string_ostream(S) << NBN;
EXPECT_EQ(
S, "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)])");
}
TEST(NestedBuildNamespaceTest, StreamOutputMultiple) {
NestedBuildNamespace NBN(
BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
NBN = NBN.makeQualified(NestedBuildNamespace(
BuildNamespace(BuildNamespaceKind::LinkUnit, "app")));
std::string S;
llvm::raw_string_ostream(S) << NBN;
EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(CompilationUnit, "
"test.cpp), BuildNamespace(LinkUnit, app)])");
}
} // namespace
} // namespace clang::ssaf