[clang] [clang][ssaf] Refactor `JSONFormatTest` into a directory with a shared fixture header (PR #182523)
Aviral Goel via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 20 11:03:00 PST 2026
https://github.com/aviralg updated https://github.com/llvm/llvm-project/pull/182523
>From 7b5e97d93001a816ff545fe64ce9073dff3d38e1 Mon Sep 17 00:00:00 2001
From: Aviral Goel <agoel26 at apple.com>
Date: Fri, 20 Feb 2026 08:09:47 -0800
Subject: [PATCH 1/4] Refactor
---
.../Analysis/Scalable/CMakeLists.txt | 2 +-
.../JSONFormatTest/JSONFormatTest.h | 148 +++++++++++
.../TUSummaryTest.cpp} | 245 +++++-------------
3 files changed, 210 insertions(+), 185 deletions(-)
create mode 100644 clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
rename clang/unittests/Analysis/Scalable/Serialization/{JSONFormatTest.cpp => JSONFormatTest/TUSummaryTest.cpp} (88%)
diff --git a/clang/unittests/Analysis/Scalable/CMakeLists.txt b/clang/unittests/Analysis/Scalable/CMakeLists.txt
index 5529ca06de170..bf0d0e2f3fdea 100644
--- a/clang/unittests/Analysis/Scalable/CMakeLists.txt
+++ b/clang/unittests/Analysis/Scalable/CMakeLists.txt
@@ -11,7 +11,7 @@ add_distinct_clang_unittest(ClangScalableAnalysisTests
Registries/MockSummaryExtractor2.cpp
Registries/SerializationFormatRegistryTest.cpp
Registries/SummaryExtractorRegistryTest.cpp
- Serialization/JSONFormatTest.cpp
+ Serialization/JSONFormatTest/TUSummaryTest.cpp
SummaryNameTest.cpp
TestFixture.cpp
TUSummaryBuilderTest.cpp
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
new file mode 100644
index 0000000000000..4abcecb63b2d5
--- /dev/null
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
@@ -0,0 +1,148 @@
+//===- unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
+//-*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Test fixture and helpers for SSAF JSON serialization format unit tests.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
+#define LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
+
+#include "clang/Analysis/Scalable/Serialization/JSONFormat.h"
+#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include <memory>
+#include <string>
+
+using namespace clang::ssaf;
+using namespace llvm;
+using ::testing::AllOf;
+using ::testing::HasSubstr;
+
+// ============================================================================
+// Test Fixture
+// ============================================================================
+
+class JSONFormatTest : public ::testing::Test {
+public:
+ using PathString = SmallString<128>;
+
+protected:
+ SmallString<128> TestDir;
+
+ void SetUp() override {
+ std::error_code EC =
+ sys::fs::createUniqueDirectory("json-format-test", TestDir);
+ ASSERT_FALSE(EC) << "Failed to create temp directory: " << EC.message();
+ }
+
+ void TearDown() override { sys::fs::remove_directories(TestDir); }
+
+ PathString makePath(StringRef FileOrDirectoryName) const {
+ PathString FullPath = TestDir;
+ sys::path::append(FullPath, FileOrDirectoryName);
+
+ return FullPath;
+ }
+
+ PathString makePath(StringRef Dir, StringRef FileName) const {
+ PathString FullPath = TestDir;
+ sys::path::append(FullPath, Dir, FileName);
+
+ return FullPath;
+ }
+
+ Expected<PathString> makeDirectory(StringRef DirectoryName) const {
+ PathString DirPath = makePath(DirectoryName);
+
+ std::error_code EC = sys::fs::create_directory(DirPath);
+ if (EC) {
+ return createStringError(EC, "Failed to create directory '%s': %s",
+ DirPath.c_str(), EC.message().c_str());
+ }
+
+ return DirPath;
+ }
+
+ Expected<PathString> makeSymlink(StringRef TargetFileName,
+ StringRef SymlinkFileName) const {
+ PathString TargetPath = makePath(TargetFileName);
+ PathString SymlinkPath = makePath(SymlinkFileName);
+
+ std::error_code EC = sys::fs::create_link(TargetPath, SymlinkPath);
+ if (EC) {
+ return createStringError(EC, "Failed to create symlink '%s' -> '%s': %s",
+ SymlinkPath.c_str(), TargetPath.c_str(),
+ EC.message().c_str());
+ }
+
+ return SymlinkPath;
+ }
+
+ llvm::Error setPermission(StringRef FileName,
+ const sys::fs::perms Perms) const {
+ PathString Path = makePath(FileName);
+
+ std::error_code EC = sys::fs::setPermissions(Path, Perms);
+ if (EC) {
+ return createStringError(EC, "Failed to set permissions on '%s': %s",
+ Path.c_str(), EC.message().c_str());
+ }
+
+ return llvm::Error::success();
+ }
+
+ Expected<json::Value> readJSONFromFile(StringRef FileName) const {
+ PathString FilePath = makePath(FileName);
+
+ auto BufferOrError = MemoryBuffer::getFile(FilePath);
+ if (!BufferOrError) {
+ return createStringError(BufferOrError.getError(),
+ "Failed to read file: %s", FilePath.c_str());
+ }
+
+ Expected<json::Value> ExpectedValue =
+ json::parse(BufferOrError.get()->getBuffer());
+ if (!ExpectedValue)
+ return ExpectedValue.takeError();
+
+ return *ExpectedValue;
+ }
+
+ Expected<PathString> writeJSON(StringRef JSON, StringRef FileName) const {
+ PathString FilePath = makePath(FileName);
+
+ std::error_code EC;
+ llvm::raw_fd_ostream OS(FilePath, EC);
+ if (EC) {
+ return createStringError(EC, "Failed to create file '%s': %s",
+ FilePath.c_str(), EC.message().c_str());
+ }
+
+ OS << JSON;
+ OS.close();
+
+ if (OS.has_error()) {
+ return createStringError(OS.error(), "Failed to write to file '%s': %s",
+ FilePath.c_str(), OS.error().message().c_str());
+ }
+
+ return FilePath;
+ }
+};
+
+#endif // LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest.cpp b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
similarity index 88%
rename from clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest.cpp
rename to clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
index 62890da28e248..e953c7d883fdb 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest.cpp
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -1,4 +1,6 @@
-//===- unittests/Analysis/Scalable/JSONFormatTest.cpp --------------------===//
+//===-
+//unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
+//===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,32 +8,16 @@
//
//===----------------------------------------------------------------------===//
//
-// Unit tests for SSAF JSON serialization format reading and writing.
+// Unit tests for SSAF JSON serialization format reading and writing of
+// TUSummary.
//
//===----------------------------------------------------------------------===//
-#include "clang/Analysis/Scalable/Serialization/JSONFormat.h"
-#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Path.h"
+#include "JSONFormatTest.h"
#include "llvm/Support/Registry.h"
-#include "llvm/Support/raw_ostream.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <algorithm>
#include <memory>
-#include <string>
#include <vector>
-using namespace clang::ssaf;
-using namespace llvm;
-using ::testing::AllOf;
-using ::testing::HasSubstr;
-
namespace {
// ============================================================================
@@ -108,117 +94,8 @@ static llvm::Registry<JSONFormat::FormatInfo>::Add<
"PairsEntitySummaryForJSONFormatTest",
"Format info for PairsArrayEntitySummary");
-// ============================================================================
-// Test Fixture
-// ============================================================================
-
-class JSONFormatTest : public ::testing::Test {
-public:
- using PathString = SmallString<128>;
-
+class TUSummaryTest : public JSONFormatTest {
protected:
- SmallString<128> TestDir;
-
- void SetUp() override {
- std::error_code EC =
- sys::fs::createUniqueDirectory("json-format-test", TestDir);
- ASSERT_FALSE(EC) << "Failed to create temp directory: " << EC.message();
- }
-
- void TearDown() override { sys::fs::remove_directories(TestDir); }
-
- PathString makePath(StringRef FileOrDirectoryName) const {
- PathString FullPath = TestDir;
- sys::path::append(FullPath, FileOrDirectoryName);
-
- return FullPath;
- }
-
- PathString makePath(StringRef Dir, StringRef FileName) const {
- PathString FullPath = TestDir;
- sys::path::append(FullPath, Dir, FileName);
-
- return FullPath;
- }
-
- Expected<PathString> makeDirectory(StringRef DirectoryName) const {
- PathString DirPath = makePath(DirectoryName);
-
- std::error_code EC = sys::fs::create_directory(DirPath);
- if (EC) {
- return createStringError(EC, "Failed to create directory '%s': %s",
- DirPath.c_str(), EC.message().c_str());
- }
-
- return DirPath;
- }
-
- Expected<PathString> makeSymlink(StringRef TargetFileName,
- StringRef SymlinkFileName) const {
- PathString TargetPath = makePath(TargetFileName);
- PathString SymlinkPath = makePath(SymlinkFileName);
-
- std::error_code EC = sys::fs::create_link(TargetPath, SymlinkPath);
- if (EC) {
- return createStringError(EC, "Failed to create symlink '%s' -> '%s': %s",
- SymlinkPath.c_str(), TargetPath.c_str(),
- EC.message().c_str());
- }
-
- return SymlinkPath;
- }
-
- llvm::Error setPermission(StringRef FileName,
- const sys::fs::perms Perms) const {
- PathString Path = makePath(FileName);
-
- std::error_code EC = sys::fs::setPermissions(Path, Perms);
- if (EC) {
- return createStringError(EC, "Failed to set permissions on '%s': %s",
- Path.c_str(), EC.message().c_str());
- }
-
- return llvm::Error::success();
- }
-
- Expected<json::Value> readJSONFromFile(StringRef FileName) const {
- PathString FilePath = makePath(FileName);
-
- auto BufferOrError = MemoryBuffer::getFile(FilePath);
- if (!BufferOrError) {
- return createStringError(BufferOrError.getError(),
- "Failed to read file: %s", FilePath.c_str());
- }
-
- Expected<json::Value> ExpectedValue =
- json::parse(BufferOrError.get()->getBuffer());
- if (!ExpectedValue)
- return ExpectedValue.takeError();
-
- return *ExpectedValue;
- }
-
- Expected<PathString> writeJSON(StringRef JSON, StringRef FileName) const {
- PathString FilePath = makePath(FileName);
-
- std::error_code EC;
- llvm::raw_fd_ostream OS(FilePath, EC);
- if (EC) {
- return createStringError(EC, "Failed to create file '%s': %s",
- FilePath.c_str(), EC.message().c_str());
- }
-
- OS << JSON;
- OS.close();
-
- if (OS.has_error()) {
- return createStringError(OS.error(), "Failed to write to file '%s': %s",
- FilePath.c_str(), OS.error().message().c_str());
- }
-
- return FilePath;
- }
-
llvm::Expected<TUSummary> readTUSummaryFromFile(StringRef FileName) const {
PathString FilePath = makePath(FileName);
@@ -362,7 +239,7 @@ class JSONFormatTest : public ::testing::Test {
// readJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, NonexistentFile) {
+TEST_F(TUSummaryTest, NonexistentFile) {
auto Result = readTUSummaryFromFile("nonexistent.json");
EXPECT_THAT_EXPECTED(
@@ -370,7 +247,7 @@ TEST_F(JSONFormatTest, NonexistentFile) {
HasSubstr("file does not exist"))));
}
-TEST_F(JSONFormatTest, PathIsDirectory) {
+TEST_F(TUSummaryTest, PathIsDirectory) {
PathString DirName("test_directory.json");
auto ExpectedDirPath = makeDirectory(DirName);
@@ -384,7 +261,7 @@ TEST_F(JSONFormatTest, PathIsDirectory) {
HasSubstr("path is a directory, not a file"))));
}
-TEST_F(JSONFormatTest, NotJsonExtension) {
+TEST_F(TUSummaryTest, NotJsonExtension) {
PathString FileName("test.txt");
auto ExpectedFilePath = writeJSON("{}", FileName);
@@ -399,7 +276,7 @@ TEST_F(JSONFormatTest, NotJsonExtension) {
HasSubstr("file does not end with '.json' extension"))));
}
-TEST_F(JSONFormatTest, BrokenSymlink) {
+TEST_F(TUSummaryTest, BrokenSymlink) {
#ifdef _WIN32
GTEST_SKIP() << "Symlink model differs on Windows";
#endif
@@ -416,7 +293,7 @@ TEST_F(JSONFormatTest, BrokenSymlink) {
HasSubstr("failed to read file"))));
}
-TEST_F(JSONFormatTest, NoReadPermission) {
+TEST_F(TUSummaryTest, NoReadPermission) {
#ifdef _WIN32
GTEST_SKIP() << "Permission model differs on Windows";
#endif
@@ -449,7 +326,7 @@ TEST_F(JSONFormatTest, NoReadPermission) {
EXPECT_THAT_ERROR(std::move(RestoreError), Succeeded());
}
-TEST_F(JSONFormatTest, InvalidSyntax) {
+TEST_F(TUSummaryTest, InvalidSyntax) {
auto Result = readTUSummaryFromString("{ invalid json }");
EXPECT_THAT_EXPECTED(
@@ -457,7 +334,7 @@ TEST_F(JSONFormatTest, InvalidSyntax) {
HasSubstr("Expected object key"))));
}
-TEST_F(JSONFormatTest, NotObject) {
+TEST_F(TUSummaryTest, NotObject) {
auto Result = readTUSummaryFromString("[]");
EXPECT_THAT_EXPECTED(
@@ -470,7 +347,7 @@ TEST_F(JSONFormatTest, NotObject) {
// JSONFormat::buildNamespaceKindFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, InvalidKind) {
+TEST_F(TUSummaryTest, InvalidKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "invalid_kind",
@@ -494,7 +371,7 @@ TEST_F(JSONFormatTest, InvalidKind) {
// JSONFormat::buildNamespaceFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, MissingKind) {
+TEST_F(TUSummaryTest, MissingKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"name": "test.cpp"
@@ -512,7 +389,7 @@ TEST_F(JSONFormatTest, MissingKind) {
HasSubstr("expected JSON string"))));
}
-TEST_F(JSONFormatTest, MissingName) {
+TEST_F(TUSummaryTest, MissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit"
@@ -534,7 +411,7 @@ TEST_F(JSONFormatTest, MissingName) {
// JSONFormat::nestedBuildNamespaceFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, NamespaceElementNotObject) {
+TEST_F(TUSummaryTest, NamespaceElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -565,7 +442,7 @@ TEST_F(JSONFormatTest, NamespaceElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, NamespaceElementMissingKind) {
+TEST_F(TUSummaryTest, NamespaceElementMissingKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -601,7 +478,7 @@ TEST_F(JSONFormatTest, NamespaceElementMissingKind) {
HasSubstr("expected JSON string"))));
}
-TEST_F(JSONFormatTest, NamespaceElementInvalidKind) {
+TEST_F(TUSummaryTest, NamespaceElementInvalidKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -639,7 +516,7 @@ TEST_F(JSONFormatTest, NamespaceElementInvalidKind) {
"invalid 'kind' BuildNamespaceKind value 'invalid_kind'"))));
}
-TEST_F(JSONFormatTest, NamespaceElementMissingName) {
+TEST_F(TUSummaryTest, NamespaceElementMissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -679,7 +556,7 @@ TEST_F(JSONFormatTest, NamespaceElementMissingName) {
// JSONFormat::entityNameFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, EntityNameMissingUSR) {
+TEST_F(TUSummaryTest, EntityNameMissingUSR) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -707,7 +584,7 @@ TEST_F(JSONFormatTest, EntityNameMissingUSR) {
HasSubstr("expected JSON string"))));
}
-TEST_F(JSONFormatTest, EntityNameMissingSuffix) {
+TEST_F(TUSummaryTest, EntityNameMissingSuffix) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -735,7 +612,7 @@ TEST_F(JSONFormatTest, EntityNameMissingSuffix) {
HasSubstr("expected JSON string"))));
}
-TEST_F(JSONFormatTest, EntityNameMissingNamespace) {
+TEST_F(TUSummaryTest, EntityNameMissingNamespace) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -769,7 +646,7 @@ TEST_F(JSONFormatTest, EntityNameMissingNamespace) {
// JSONFormat::entityIdTableEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, IDTableEntryMissingID) {
+TEST_F(TUSummaryTest, IDTableEntryMissingID) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -797,7 +674,7 @@ TEST_F(JSONFormatTest, IDTableEntryMissingID) {
HasSubstr("expected JSON number (unsigned 64-bit integer)"))));
}
-TEST_F(JSONFormatTest, IDTableEntryMissingName) {
+TEST_F(TUSummaryTest, IDTableEntryMissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -820,7 +697,7 @@ TEST_F(JSONFormatTest, IDTableEntryMissingName) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, IDTableEntryIDNotUInt64) {
+TEST_F(TUSummaryTest, IDTableEntryIDNotUInt64) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -853,7 +730,7 @@ TEST_F(JSONFormatTest, IDTableEntryIDNotUInt64) {
// JSONFormat::entityIdTableFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, IDTableNotArray) {
+TEST_F(TUSummaryTest, IDTableNotArray) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -870,7 +747,7 @@ TEST_F(JSONFormatTest, IDTableNotArray) {
HasSubstr("expected JSON array"))));
}
-TEST_F(JSONFormatTest, IDTableElementNotObject) {
+TEST_F(TUSummaryTest, IDTableElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -889,7 +766,7 @@ TEST_F(JSONFormatTest, IDTableElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, DuplicateEntity) {
+TEST_F(TUSummaryTest, DuplicateEntity) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -939,7 +816,7 @@ TEST_F(JSONFormatTest, DuplicateEntity) {
// JSONFormat::entitySummaryFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, EntitySummaryNoFormatInfo) {
+TEST_F(TUSummaryTest, EntitySummaryNoFormatInfo) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -977,7 +854,7 @@ TEST_F(JSONFormatTest, EntitySummaryNoFormatInfo) {
// PairsEntitySummaryForJSONFormatTest Deserialization Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingPairsField) {
+TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingPairsField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1009,7 +886,7 @@ TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingPairsField) {
HasSubstr("missing or invalid field 'pairs'"))));
}
-TEST_F(JSONFormatTest,
+TEST_F(TUSummaryTest,
PairsEntitySummaryForJSONFormatTestInvalidPairsFieldType) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
@@ -1044,7 +921,7 @@ TEST_F(JSONFormatTest,
HasSubstr("missing or invalid field 'pairs'"))));
}
-TEST_F(JSONFormatTest,
+TEST_F(TUSummaryTest,
PairsEntitySummaryForJSONFormatTestPairsElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
@@ -1079,7 +956,7 @@ TEST_F(JSONFormatTest,
HasSubstr("pairs element at index 0 is not a JSON object"))));
}
-TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingFirstField) {
+TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingFirstField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1117,7 +994,7 @@ TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingFirstField) {
HasSubstr("missing or invalid 'first' field at index '0'"))));
}
-TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
+TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1156,7 +1033,7 @@ TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
HasSubstr("missing or invalid 'first' field at index '0'"))));
}
-TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingSecondField) {
+TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingSecondField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1194,7 +1071,7 @@ TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestMissingSecondField) {
HasSubstr("missing or invalid 'second' field at index '0'"))));
}
-TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
+TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1237,7 +1114,7 @@ TEST_F(JSONFormatTest, PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
// JSONFormat::entityDataMapEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, EntityDataMissingEntityID) {
+TEST_F(TUSummaryTest, EntityDataMissingEntityID) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1268,7 +1145,7 @@ TEST_F(JSONFormatTest, EntityDataMissingEntityID) {
HasSubstr("expected JSON number (unsigned 64-bit integer)"))));
}
-TEST_F(JSONFormatTest, EntityDataMissingEntitySummary) {
+TEST_F(TUSummaryTest, EntityDataMissingEntitySummary) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1299,7 +1176,7 @@ TEST_F(JSONFormatTest, EntityDataMissingEntitySummary) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, EntityIDNotUInt64) {
+TEST_F(TUSummaryTest, EntityIDNotUInt64) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1335,7 +1212,7 @@ TEST_F(JSONFormatTest, EntityIDNotUInt64) {
// JSONFormat::entityDataMapFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, EntityDataElementNotObject) {
+TEST_F(TUSummaryTest, EntityDataElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1361,7 +1238,7 @@ TEST_F(JSONFormatTest, EntityDataElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, DuplicateEntityIdInDataMap) {
+TEST_F(TUSummaryTest, DuplicateEntityIdInDataMap) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1413,7 +1290,7 @@ TEST_F(JSONFormatTest, DuplicateEntityIdInDataMap) {
// JSONFormat::summaryDataMapEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, DataEntryMissingSummaryName) {
+TEST_F(TUSummaryTest, DataEntryMissingSummaryName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1437,7 +1314,7 @@ TEST_F(JSONFormatTest, DataEntryMissingSummaryName) {
HasSubstr("expected JSON string"))));
}
-TEST_F(JSONFormatTest, DataEntryMissingData) {
+TEST_F(TUSummaryTest, DataEntryMissingData) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1466,7 +1343,7 @@ TEST_F(JSONFormatTest, DataEntryMissingData) {
// JSONFormat::summaryDataMapFromJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, DataNotArray) {
+TEST_F(TUSummaryTest, DataNotArray) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1484,7 +1361,7 @@ TEST_F(JSONFormatTest, DataNotArray) {
HasSubstr("expected JSON array"))));
}
-TEST_F(JSONFormatTest, DataElementNotObject) {
+TEST_F(TUSummaryTest, DataElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1502,7 +1379,7 @@ TEST_F(JSONFormatTest, DataElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, DuplicateSummaryName) {
+TEST_F(TUSummaryTest, DuplicateSummaryName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1534,7 +1411,7 @@ TEST_F(JSONFormatTest, DuplicateSummaryName) {
// JSONFormat::readTUSummary() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, MissingTUNamespace) {
+TEST_F(TUSummaryTest, MissingTUNamespace) {
auto Result = readTUSummaryFromString(R"({
"id_table": [],
"data": []
@@ -1548,7 +1425,7 @@ TEST_F(JSONFormatTest, MissingTUNamespace) {
HasSubstr("expected JSON object"))));
}
-TEST_F(JSONFormatTest, MissingIDTable) {
+TEST_F(TUSummaryTest, MissingIDTable) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1564,7 +1441,7 @@ TEST_F(JSONFormatTest, MissingIDTable) {
HasSubstr("expected JSON array"))));
}
-TEST_F(JSONFormatTest, MissingData) {
+TEST_F(TUSummaryTest, MissingData) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1585,7 +1462,7 @@ TEST_F(JSONFormatTest, MissingData) {
// JSONFormat::writeJSON() Error Tests
// ============================================================================
-TEST_F(JSONFormatTest, WriteFileAlreadyExists) {
+TEST_F(TUSummaryTest, WriteFileAlreadyExists) {
PathString FileName("existing.json");
auto ExpectedFilePath = writeJSON("{}", FileName);
@@ -1604,7 +1481,7 @@ TEST_F(JSONFormatTest, WriteFileAlreadyExists) {
HasSubstr("file already exists"))));
}
-TEST_F(JSONFormatTest, WriteParentDirectoryNotFound) {
+TEST_F(TUSummaryTest, WriteParentDirectoryNotFound) {
PathString FilePath = makePath("nonexistent-dir", "test.json");
TUSummary Summary(
@@ -1619,7 +1496,7 @@ TEST_F(JSONFormatTest, WriteParentDirectoryNotFound) {
HasSubstr("parent directory does not exist"))));
}
-TEST_F(JSONFormatTest, WriteNotJsonExtension) {
+TEST_F(TUSummaryTest, WriteNotJsonExtension) {
TUSummary Summary(
BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
@@ -1633,7 +1510,7 @@ TEST_F(JSONFormatTest, WriteNotJsonExtension) {
HasSubstr("file does not end with '.json' extension"))));
}
-TEST_F(JSONFormatTest, WriteStreamOpenFailure) {
+TEST_F(TUSummaryTest, WriteStreamOpenFailure) {
#ifdef _WIN32
GTEST_SKIP() << "Permission model differs on Windows";
#endif
@@ -1668,7 +1545,7 @@ TEST_F(JSONFormatTest, WriteStreamOpenFailure) {
// Round-Trip Tests - Serialization Verification
// ============================================================================
-TEST_F(JSONFormatTest, Empty) {
+TEST_F(TUSummaryTest, Empty) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1679,7 +1556,7 @@ TEST_F(JSONFormatTest, Empty) {
})");
}
-TEST_F(JSONFormatTest, LinkUnit) {
+TEST_F(TUSummaryTest, LinkUnit) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "link_unit",
@@ -1690,7 +1567,7 @@ TEST_F(JSONFormatTest, LinkUnit) {
})");
}
-TEST_F(JSONFormatTest, WithIDTable) {
+TEST_F(TUSummaryTest, WithIDTable) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1732,7 +1609,7 @@ TEST_F(JSONFormatTest, WithIDTable) {
})");
}
-TEST_F(JSONFormatTest, WithEmptyDataEntry) {
+TEST_F(TUSummaryTest, WithEmptyDataEntry) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1748,7 +1625,7 @@ TEST_F(JSONFormatTest, WithEmptyDataEntry) {
})");
}
-TEST_F(JSONFormatTest, RoundTripWithIDTable) {
+TEST_F(TUSummaryTest, RoundTripWithIDTable) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1773,7 +1650,7 @@ TEST_F(JSONFormatTest, RoundTripWithIDTable) {
})");
}
-TEST_F(JSONFormatTest, RoundTripPairsEntitySummaryForJSONFormatTest) {
+TEST_F(TUSummaryTest, RoundTripPairsEntitySummaryForJSONFormatTest) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
>From 292ce3810f795cfb5283fab96720ba040e6e433a Mon Sep 17 00:00:00 2001
From: Aviral Goel <agoel26 at apple.com>
Date: Fri, 20 Feb 2026 08:58:24 -0800
Subject: [PATCH 2/4] Fix formatting
---
.../Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
index e953c7d883fdb..b1c89a899f3e3 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -1,5 +1,5 @@
//===-
-//unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
+// unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
//===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
>From 3252d170f399feb0c9b5481ac775d725e2818c9f Mon Sep 17 00:00:00 2001
From: Aviral Goel <agoel26 at apple.com>
Date: Fri, 20 Feb 2026 10:37:09 -0800
Subject: [PATCH 3/4] Fix headers
---
.../JSONFormatTest/JSONFormatTest.h | 3 +-
.../JSONFormatTest/TUSummaryTest.cpp | 119 +++++++++---------
2 files changed, 62 insertions(+), 60 deletions(-)
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
index 4abcecb63b2d5..ae5e632a4952e 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
@@ -1,5 +1,4 @@
-//===- unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
-//-*- C++ -*-===//
+//===- JSONFormatTest.h -----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
index b1c89a899f3e3..0f3c05d4849ac 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -1,6 +1,4 @@
-//===-
-// unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
-//===//
+//===- TUSummaryTest.cpp --------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -94,7 +92,7 @@ static llvm::Registry<JSONFormat::FormatInfo>::Add<
"PairsEntitySummaryForJSONFormatTest",
"Format info for PairsArrayEntitySummary");
-class TUSummaryTest : public JSONFormatTest {
+class JSONFormatTUSummaryTest final : public JSONFormatTest {
protected:
llvm::Expected<TUSummary> readTUSummaryFromFile(StringRef FileName) const {
PathString FilePath = makePath(FileName);
@@ -239,7 +237,7 @@ class TUSummaryTest : public JSONFormatTest {
// readJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, NonexistentFile) {
+TEST_F(JSONFormatTUSummaryTest, NonexistentFile) {
auto Result = readTUSummaryFromFile("nonexistent.json");
EXPECT_THAT_EXPECTED(
@@ -247,7 +245,7 @@ TEST_F(TUSummaryTest, NonexistentFile) {
HasSubstr("file does not exist"))));
}
-TEST_F(TUSummaryTest, PathIsDirectory) {
+TEST_F(JSONFormatTUSummaryTest, PathIsDirectory) {
PathString DirName("test_directory.json");
auto ExpectedDirPath = makeDirectory(DirName);
@@ -261,7 +259,7 @@ TEST_F(TUSummaryTest, PathIsDirectory) {
HasSubstr("path is a directory, not a file"))));
}
-TEST_F(TUSummaryTest, NotJsonExtension) {
+TEST_F(JSONFormatTUSummaryTest, NotJsonExtension) {
PathString FileName("test.txt");
auto ExpectedFilePath = writeJSON("{}", FileName);
@@ -276,7 +274,7 @@ TEST_F(TUSummaryTest, NotJsonExtension) {
HasSubstr("file does not end with '.json' extension"))));
}
-TEST_F(TUSummaryTest, BrokenSymlink) {
+TEST_F(JSONFormatTUSummaryTest, BrokenSymlink) {
#ifdef _WIN32
GTEST_SKIP() << "Symlink model differs on Windows";
#endif
@@ -293,7 +291,7 @@ TEST_F(TUSummaryTest, BrokenSymlink) {
HasSubstr("failed to read file"))));
}
-TEST_F(TUSummaryTest, NoReadPermission) {
+TEST_F(JSONFormatTUSummaryTest, NoReadPermission) {
#ifdef _WIN32
GTEST_SKIP() << "Permission model differs on Windows";
#endif
@@ -326,7 +324,7 @@ TEST_F(TUSummaryTest, NoReadPermission) {
EXPECT_THAT_ERROR(std::move(RestoreError), Succeeded());
}
-TEST_F(TUSummaryTest, InvalidSyntax) {
+TEST_F(JSONFormatTUSummaryTest, InvalidSyntax) {
auto Result = readTUSummaryFromString("{ invalid json }");
EXPECT_THAT_EXPECTED(
@@ -334,7 +332,7 @@ TEST_F(TUSummaryTest, InvalidSyntax) {
HasSubstr("Expected object key"))));
}
-TEST_F(TUSummaryTest, NotObject) {
+TEST_F(JSONFormatTUSummaryTest, NotObject) {
auto Result = readTUSummaryFromString("[]");
EXPECT_THAT_EXPECTED(
@@ -347,7 +345,7 @@ TEST_F(TUSummaryTest, NotObject) {
// JSONFormat::buildNamespaceKindFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, InvalidKind) {
+TEST_F(JSONFormatTUSummaryTest, InvalidKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "invalid_kind",
@@ -371,7 +369,7 @@ TEST_F(TUSummaryTest, InvalidKind) {
// JSONFormat::buildNamespaceFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, MissingKind) {
+TEST_F(JSONFormatTUSummaryTest, MissingKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"name": "test.cpp"
@@ -389,7 +387,7 @@ TEST_F(TUSummaryTest, MissingKind) {
HasSubstr("expected JSON string"))));
}
-TEST_F(TUSummaryTest, MissingName) {
+TEST_F(JSONFormatTUSummaryTest, MissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit"
@@ -411,7 +409,7 @@ TEST_F(TUSummaryTest, MissingName) {
// JSONFormat::nestedBuildNamespaceFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, NamespaceElementNotObject) {
+TEST_F(JSONFormatTUSummaryTest, NamespaceElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -442,7 +440,7 @@ TEST_F(TUSummaryTest, NamespaceElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, NamespaceElementMissingKind) {
+TEST_F(JSONFormatTUSummaryTest, NamespaceElementMissingKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -478,7 +476,7 @@ TEST_F(TUSummaryTest, NamespaceElementMissingKind) {
HasSubstr("expected JSON string"))));
}
-TEST_F(TUSummaryTest, NamespaceElementInvalidKind) {
+TEST_F(JSONFormatTUSummaryTest, NamespaceElementInvalidKind) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -516,7 +514,7 @@ TEST_F(TUSummaryTest, NamespaceElementInvalidKind) {
"invalid 'kind' BuildNamespaceKind value 'invalid_kind'"))));
}
-TEST_F(TUSummaryTest, NamespaceElementMissingName) {
+TEST_F(JSONFormatTUSummaryTest, NamespaceElementMissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -556,7 +554,7 @@ TEST_F(TUSummaryTest, NamespaceElementMissingName) {
// JSONFormat::entityNameFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, EntityNameMissingUSR) {
+TEST_F(JSONFormatTUSummaryTest, EntityNameMissingUSR) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -584,7 +582,7 @@ TEST_F(TUSummaryTest, EntityNameMissingUSR) {
HasSubstr("expected JSON string"))));
}
-TEST_F(TUSummaryTest, EntityNameMissingSuffix) {
+TEST_F(JSONFormatTUSummaryTest, EntityNameMissingSuffix) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -612,7 +610,7 @@ TEST_F(TUSummaryTest, EntityNameMissingSuffix) {
HasSubstr("expected JSON string"))));
}
-TEST_F(TUSummaryTest, EntityNameMissingNamespace) {
+TEST_F(JSONFormatTUSummaryTest, EntityNameMissingNamespace) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -646,7 +644,7 @@ TEST_F(TUSummaryTest, EntityNameMissingNamespace) {
// JSONFormat::entityIdTableEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, IDTableEntryMissingID) {
+TEST_F(JSONFormatTUSummaryTest, IDTableEntryMissingID) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -674,7 +672,7 @@ TEST_F(TUSummaryTest, IDTableEntryMissingID) {
HasSubstr("expected JSON number (unsigned 64-bit integer)"))));
}
-TEST_F(TUSummaryTest, IDTableEntryMissingName) {
+TEST_F(JSONFormatTUSummaryTest, IDTableEntryMissingName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -697,7 +695,7 @@ TEST_F(TUSummaryTest, IDTableEntryMissingName) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, IDTableEntryIDNotUInt64) {
+TEST_F(JSONFormatTUSummaryTest, IDTableEntryIDNotUInt64) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -730,7 +728,7 @@ TEST_F(TUSummaryTest, IDTableEntryIDNotUInt64) {
// JSONFormat::entityIdTableFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, IDTableNotArray) {
+TEST_F(JSONFormatTUSummaryTest, IDTableNotArray) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -747,7 +745,7 @@ TEST_F(TUSummaryTest, IDTableNotArray) {
HasSubstr("expected JSON array"))));
}
-TEST_F(TUSummaryTest, IDTableElementNotObject) {
+TEST_F(JSONFormatTUSummaryTest, IDTableElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -766,7 +764,7 @@ TEST_F(TUSummaryTest, IDTableElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, DuplicateEntity) {
+TEST_F(JSONFormatTUSummaryTest, DuplicateEntity) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -816,7 +814,7 @@ TEST_F(TUSummaryTest, DuplicateEntity) {
// JSONFormat::entitySummaryFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, EntitySummaryNoFormatInfo) {
+TEST_F(JSONFormatTUSummaryTest, EntitySummaryNoFormatInfo) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -854,7 +852,8 @@ TEST_F(TUSummaryTest, EntitySummaryNoFormatInfo) {
// PairsEntitySummaryForJSONFormatTest Deserialization Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingPairsField) {
+TEST_F(JSONFormatTUSummaryTest,
+ PairsEntitySummaryForJSONFormatTestMissingPairsField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -886,7 +885,7 @@ TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingPairsField) {
HasSubstr("missing or invalid field 'pairs'"))));
}
-TEST_F(TUSummaryTest,
+TEST_F(JSONFormatTUSummaryTest,
PairsEntitySummaryForJSONFormatTestInvalidPairsFieldType) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
@@ -921,7 +920,7 @@ TEST_F(TUSummaryTest,
HasSubstr("missing or invalid field 'pairs'"))));
}
-TEST_F(TUSummaryTest,
+TEST_F(JSONFormatTUSummaryTest,
PairsEntitySummaryForJSONFormatTestPairsElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
@@ -956,7 +955,8 @@ TEST_F(TUSummaryTest,
HasSubstr("pairs element at index 0 is not a JSON object"))));
}
-TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingFirstField) {
+TEST_F(JSONFormatTUSummaryTest,
+ PairsEntitySummaryForJSONFormatTestMissingFirstField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -994,7 +994,8 @@ TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingFirstField) {
HasSubstr("missing or invalid 'first' field at index '0'"))));
}
-TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
+TEST_F(JSONFormatTUSummaryTest,
+ PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1033,7 +1034,8 @@ TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidFirstField) {
HasSubstr("missing or invalid 'first' field at index '0'"))));
}
-TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingSecondField) {
+TEST_F(JSONFormatTUSummaryTest,
+ PairsEntitySummaryForJSONFormatTestMissingSecondField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1071,7 +1073,8 @@ TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestMissingSecondField) {
HasSubstr("missing or invalid 'second' field at index '0'"))));
}
-TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
+TEST_F(JSONFormatTUSummaryTest,
+ PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1114,7 +1117,7 @@ TEST_F(TUSummaryTest, PairsEntitySummaryForJSONFormatTestInvalidSecondField) {
// JSONFormat::entityDataMapEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, EntityDataMissingEntityID) {
+TEST_F(JSONFormatTUSummaryTest, EntityDataMissingEntityID) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1145,7 +1148,7 @@ TEST_F(TUSummaryTest, EntityDataMissingEntityID) {
HasSubstr("expected JSON number (unsigned 64-bit integer)"))));
}
-TEST_F(TUSummaryTest, EntityDataMissingEntitySummary) {
+TEST_F(JSONFormatTUSummaryTest, EntityDataMissingEntitySummary) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1176,7 +1179,7 @@ TEST_F(TUSummaryTest, EntityDataMissingEntitySummary) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, EntityIDNotUInt64) {
+TEST_F(JSONFormatTUSummaryTest, EntityIDNotUInt64) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1212,7 +1215,7 @@ TEST_F(TUSummaryTest, EntityIDNotUInt64) {
// JSONFormat::entityDataMapFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, EntityDataElementNotObject) {
+TEST_F(JSONFormatTUSummaryTest, EntityDataElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1238,7 +1241,7 @@ TEST_F(TUSummaryTest, EntityDataElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, DuplicateEntityIdInDataMap) {
+TEST_F(JSONFormatTUSummaryTest, DuplicateEntityIdInDataMap) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1290,7 +1293,7 @@ TEST_F(TUSummaryTest, DuplicateEntityIdInDataMap) {
// JSONFormat::summaryDataMapEntryFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, DataEntryMissingSummaryName) {
+TEST_F(JSONFormatTUSummaryTest, DataEntryMissingSummaryName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1314,7 +1317,7 @@ TEST_F(TUSummaryTest, DataEntryMissingSummaryName) {
HasSubstr("expected JSON string"))));
}
-TEST_F(TUSummaryTest, DataEntryMissingData) {
+TEST_F(JSONFormatTUSummaryTest, DataEntryMissingData) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1343,7 +1346,7 @@ TEST_F(TUSummaryTest, DataEntryMissingData) {
// JSONFormat::summaryDataMapFromJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, DataNotArray) {
+TEST_F(JSONFormatTUSummaryTest, DataNotArray) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1361,7 +1364,7 @@ TEST_F(TUSummaryTest, DataNotArray) {
HasSubstr("expected JSON array"))));
}
-TEST_F(TUSummaryTest, DataElementNotObject) {
+TEST_F(JSONFormatTUSummaryTest, DataElementNotObject) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1379,7 +1382,7 @@ TEST_F(TUSummaryTest, DataElementNotObject) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, DuplicateSummaryName) {
+TEST_F(JSONFormatTUSummaryTest, DuplicateSummaryName) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1411,7 +1414,7 @@ TEST_F(TUSummaryTest, DuplicateSummaryName) {
// JSONFormat::readTUSummary() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, MissingTUNamespace) {
+TEST_F(JSONFormatTUSummaryTest, MissingTUNamespace) {
auto Result = readTUSummaryFromString(R"({
"id_table": [],
"data": []
@@ -1425,7 +1428,7 @@ TEST_F(TUSummaryTest, MissingTUNamespace) {
HasSubstr("expected JSON object"))));
}
-TEST_F(TUSummaryTest, MissingIDTable) {
+TEST_F(JSONFormatTUSummaryTest, MissingIDTable) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1441,7 +1444,7 @@ TEST_F(TUSummaryTest, MissingIDTable) {
HasSubstr("expected JSON array"))));
}
-TEST_F(TUSummaryTest, MissingData) {
+TEST_F(JSONFormatTUSummaryTest, MissingData) {
auto Result = readTUSummaryFromString(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1462,7 +1465,7 @@ TEST_F(TUSummaryTest, MissingData) {
// JSONFormat::writeJSON() Error Tests
// ============================================================================
-TEST_F(TUSummaryTest, WriteFileAlreadyExists) {
+TEST_F(JSONFormatTUSummaryTest, WriteFileAlreadyExists) {
PathString FileName("existing.json");
auto ExpectedFilePath = writeJSON("{}", FileName);
@@ -1481,7 +1484,7 @@ TEST_F(TUSummaryTest, WriteFileAlreadyExists) {
HasSubstr("file already exists"))));
}
-TEST_F(TUSummaryTest, WriteParentDirectoryNotFound) {
+TEST_F(JSONFormatTUSummaryTest, WriteParentDirectoryNotFound) {
PathString FilePath = makePath("nonexistent-dir", "test.json");
TUSummary Summary(
@@ -1496,7 +1499,7 @@ TEST_F(TUSummaryTest, WriteParentDirectoryNotFound) {
HasSubstr("parent directory does not exist"))));
}
-TEST_F(TUSummaryTest, WriteNotJsonExtension) {
+TEST_F(JSONFormatTUSummaryTest, WriteNotJsonExtension) {
TUSummary Summary(
BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
@@ -1510,7 +1513,7 @@ TEST_F(TUSummaryTest, WriteNotJsonExtension) {
HasSubstr("file does not end with '.json' extension"))));
}
-TEST_F(TUSummaryTest, WriteStreamOpenFailure) {
+TEST_F(JSONFormatTUSummaryTest, WriteStreamOpenFailure) {
#ifdef _WIN32
GTEST_SKIP() << "Permission model differs on Windows";
#endif
@@ -1545,7 +1548,7 @@ TEST_F(TUSummaryTest, WriteStreamOpenFailure) {
// Round-Trip Tests - Serialization Verification
// ============================================================================
-TEST_F(TUSummaryTest, Empty) {
+TEST_F(JSONFormatTUSummaryTest, Empty) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1556,7 +1559,7 @@ TEST_F(TUSummaryTest, Empty) {
})");
}
-TEST_F(TUSummaryTest, LinkUnit) {
+TEST_F(JSONFormatTUSummaryTest, LinkUnit) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "link_unit",
@@ -1567,7 +1570,7 @@ TEST_F(TUSummaryTest, LinkUnit) {
})");
}
-TEST_F(TUSummaryTest, WithIDTable) {
+TEST_F(JSONFormatTUSummaryTest, WithIDTable) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1609,7 +1612,7 @@ TEST_F(TUSummaryTest, WithIDTable) {
})");
}
-TEST_F(TUSummaryTest, WithEmptyDataEntry) {
+TEST_F(JSONFormatTUSummaryTest, WithEmptyDataEntry) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1625,7 +1628,7 @@ TEST_F(TUSummaryTest, WithEmptyDataEntry) {
})");
}
-TEST_F(TUSummaryTest, RoundTripWithIDTable) {
+TEST_F(JSONFormatTUSummaryTest, RoundTripWithIDTable) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
@@ -1650,7 +1653,7 @@ TEST_F(TUSummaryTest, RoundTripWithIDTable) {
})");
}
-TEST_F(TUSummaryTest, RoundTripPairsEntitySummaryForJSONFormatTest) {
+TEST_F(JSONFormatTUSummaryTest, RoundTripPairsEntitySummaryForJSONFormatTest) {
readWriteCompareTUSummary(R"({
"tu_namespace": {
"kind": "compilation_unit",
>From 11a61fdc2a842554cceeab1b75f848f45e38a81f Mon Sep 17 00:00:00 2001
From: Aviral Goel <agoel26 at apple.com>
Date: Fri, 20 Feb 2026 11:02:34 -0800
Subject: [PATCH 4/4] Fixes
---
.../JSONFormatTest/JSONFormatTest.h | 93 +++++++++----------
.../JSONFormatTest/TUSummaryTest.cpp | 10 +-
2 files changed, 54 insertions(+), 49 deletions(-)
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
index ae5e632a4952e..f0d733d874afa 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/JSONFormatTest.h
@@ -10,27 +10,17 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
-#define LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
+#ifndef LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_JSONFORMATTEST_H
+#define LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_JSONFORMATTEST_H
-#include "clang/Analysis/Scalable/Serialization/JSONFormat.h"
-#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/JSON.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gmock/gmock.h"
#include "gtest/gtest.h"
-#include <memory>
-#include <string>
-
-using namespace clang::ssaf;
-using namespace llvm;
-using ::testing::AllOf;
-using ::testing::HasSubstr;
// ============================================================================
// Test Fixture
@@ -38,110 +28,117 @@ using ::testing::HasSubstr;
class JSONFormatTest : public ::testing::Test {
public:
- using PathString = SmallString<128>;
+ using PathString = llvm::SmallString<128>;
protected:
- SmallString<128> TestDir;
+ llvm::SmallString<128> TestDir;
void SetUp() override {
std::error_code EC =
- sys::fs::createUniqueDirectory("json-format-test", TestDir);
+ llvm::sys::fs::createUniqueDirectory("json-format-test", TestDir);
ASSERT_FALSE(EC) << "Failed to create temp directory: " << EC.message();
}
- void TearDown() override { sys::fs::remove_directories(TestDir); }
+ void TearDown() override { llvm::sys::fs::remove_directories(TestDir); }
- PathString makePath(StringRef FileOrDirectoryName) const {
+ PathString makePath(llvm::StringRef FileOrDirectoryName) const {
PathString FullPath = TestDir;
- sys::path::append(FullPath, FileOrDirectoryName);
+ llvm::sys::path::append(FullPath, FileOrDirectoryName);
return FullPath;
}
- PathString makePath(StringRef Dir, StringRef FileName) const {
+ PathString makePath(llvm::StringRef Dir, llvm::StringRef FileName) const {
PathString FullPath = TestDir;
- sys::path::append(FullPath, Dir, FileName);
+ llvm::sys::path::append(FullPath, Dir, FileName);
return FullPath;
}
- Expected<PathString> makeDirectory(StringRef DirectoryName) const {
+ llvm::Expected<PathString>
+ makeDirectory(llvm::StringRef DirectoryName) const {
PathString DirPath = makePath(DirectoryName);
- std::error_code EC = sys::fs::create_directory(DirPath);
+ std::error_code EC = llvm::sys::fs::create_directory(DirPath);
if (EC) {
- return createStringError(EC, "Failed to create directory '%s': %s",
- DirPath.c_str(), EC.message().c_str());
+ return llvm::createStringError(EC, "Failed to create directory '%s': %s",
+ DirPath.c_str(), EC.message().c_str());
}
return DirPath;
}
- Expected<PathString> makeSymlink(StringRef TargetFileName,
- StringRef SymlinkFileName) const {
+ llvm::Expected<PathString>
+ makeSymlink(llvm::StringRef TargetFileName,
+ llvm::StringRef SymlinkFileName) const {
PathString TargetPath = makePath(TargetFileName);
PathString SymlinkPath = makePath(SymlinkFileName);
- std::error_code EC = sys::fs::create_link(TargetPath, SymlinkPath);
+ std::error_code EC = llvm::sys::fs::create_link(TargetPath, SymlinkPath);
if (EC) {
- return createStringError(EC, "Failed to create symlink '%s' -> '%s': %s",
- SymlinkPath.c_str(), TargetPath.c_str(),
- EC.message().c_str());
+ return llvm::createStringError(
+ EC, "Failed to create symlink '%s' -> '%s': %s", SymlinkPath.c_str(),
+ TargetPath.c_str(), EC.message().c_str());
}
return SymlinkPath;
}
- llvm::Error setPermission(StringRef FileName,
- const sys::fs::perms Perms) const {
+ llvm::Error setPermission(llvm::StringRef FileName,
+ llvm::sys::fs::perms Perms) const {
PathString Path = makePath(FileName);
- std::error_code EC = sys::fs::setPermissions(Path, Perms);
+ std::error_code EC = llvm::sys::fs::setPermissions(Path, Perms);
if (EC) {
- return createStringError(EC, "Failed to set permissions on '%s': %s",
- Path.c_str(), EC.message().c_str());
+ return llvm::createStringError(EC,
+ "Failed to set permissions on '%s': %s",
+ Path.c_str(), EC.message().c_str());
}
return llvm::Error::success();
}
- Expected<json::Value> readJSONFromFile(StringRef FileName) const {
+ llvm::Expected<llvm::json::Value>
+ readJSONFromFile(llvm::StringRef FileName) const {
PathString FilePath = makePath(FileName);
- auto BufferOrError = MemoryBuffer::getFile(FilePath);
+ auto BufferOrError = llvm::MemoryBuffer::getFile(FilePath);
if (!BufferOrError) {
- return createStringError(BufferOrError.getError(),
- "Failed to read file: %s", FilePath.c_str());
+ return llvm::createStringError(BufferOrError.getError(),
+ "Failed to read file: %s",
+ FilePath.c_str());
}
- Expected<json::Value> ExpectedValue =
- json::parse(BufferOrError.get()->getBuffer());
+ llvm::Expected<llvm::json::Value> ExpectedValue =
+ llvm::json::parse(BufferOrError.get()->getBuffer());
if (!ExpectedValue)
return ExpectedValue.takeError();
return *ExpectedValue;
}
- Expected<PathString> writeJSON(StringRef JSON, StringRef FileName) const {
+ llvm::Expected<PathString> writeJSON(llvm::StringRef JSON,
+ llvm::StringRef FileName) const {
PathString FilePath = makePath(FileName);
std::error_code EC;
llvm::raw_fd_ostream OS(FilePath, EC);
if (EC) {
- return createStringError(EC, "Failed to create file '%s': %s",
- FilePath.c_str(), EC.message().c_str());
+ return llvm::createStringError(EC, "Failed to create file '%s': %s",
+ FilePath.c_str(), EC.message().c_str());
}
OS << JSON;
OS.close();
if (OS.has_error()) {
- return createStringError(OS.error(), "Failed to write to file '%s': %s",
- FilePath.c_str(), OS.error().message().c_str());
+ return llvm::createStringError(
+ OS.error(), "Failed to write to file '%s': %s", FilePath.c_str(),
+ OS.error().message().c_str());
}
return FilePath;
}
};
-#endif // LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_H
+#endif // LLVM_CLANG_UNITTESTS_ANALYSIS_SCALABLE_SERIALIZATION_JSONFORMATTEST_JSONFORMATTEST_H
\ No newline at end of file
diff --git a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
index 0f3c05d4849ac..2cdbec9675662 100644
--- a/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/Analysis/Scalable/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -11,11 +11,19 @@
//
//===----------------------------------------------------------------------===//
+#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
#include "JSONFormatTest.h"
+#include "clang/Analysis/Scalable/Serialization/JSONFormat.h"
#include "llvm/Support/Registry.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gmock/gmock.h"
#include <memory>
#include <vector>
+using namespace clang::ssaf;
+using namespace llvm;
+using ::testing::AllOf;
+using ::testing::HasSubstr;
namespace {
// ============================================================================
@@ -92,7 +100,7 @@ static llvm::Registry<JSONFormat::FormatInfo>::Add<
"PairsEntitySummaryForJSONFormatTest",
"Format info for PairsArrayEntitySummary");
-class JSONFormatTUSummaryTest final : public JSONFormatTest {
+class JSONFormatTUSummaryTest : public JSONFormatTest {
protected:
llvm::Expected<TUSummary> readTUSummaryFromFile(StringRef FileName) const {
PathString FilePath = makePath(FileName);
More information about the cfe-commits
mailing list