================ @@ -0,0 +1,1374 @@ +//===- unittests/Analysis/Scalable/JSONFormatTest.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 +// +//===----------------------------------------------------------------------===// +// +// Unit tests for SSAF JSON serialization format reading and writing. +// +//===----------------------------------------------------------------------===// + + +#include "clang/Analysis/Scalable/Serialization/JSONFormat.h" +#include "clang/Analysis/Scalable/TUSummary/TUSummary.h" +#include "llvm/ADT/IntrusiveRefCntPtr.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/Registry.h" +#include "llvm/Support/VirtualFileSystem.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> +#include <vector> + +using namespace clang::ssaf; +using namespace llvm; +using ::testing::AllOf; +using ::testing::HasSubstr; + +namespace { + +// ============================================================================ +// Test Analysis - Simple analysis for testing JSON serialization +// ============================================================================ + +struct TestAnalysis : EntitySummary { + TestAnalysis() : EntitySummary(SummaryName("test_summary")) {} + std::vector<std::pair<EntityId, EntityId>> Pairs; +}; + +static json::Object +serializeTestAnalysis(const EntitySummary &Summary, + const JSONFormat::EntityIdConverter &Converter) { + const auto &TA = static_cast<const TestAnalysis &>(Summary); + json::Array PairsArray; + for (const auto &[First, Second] : TA.Pairs) { + PairsArray.push_back(json::Object{ + {"first", Converter.toJSON(First)}, + {"second", Converter.toJSON(Second)}, + }); + } + return json::Object{{"pairs", std::move(PairsArray)}}; +} + +static Expected<std::unique_ptr<EntitySummary>> +deserializeTestAnalysis(const json::Object &Obj, EntityIdTable &IdTable, + const JSONFormat::EntityIdConverter &Converter) { + auto Result = std::make_unique<TestAnalysis>(); + const json::Array *PairsArray = Obj.getArray("pairs"); + if (!PairsArray) + return createStringError(inconvertibleErrorCode(), + "missing or invalid field 'pairs'"); + for (const auto &[Index, Value] : llvm::enumerate(*PairsArray)) { + const json::Object *Pair = Value.getAsObject(); + if (!Pair) + return createStringError( + inconvertibleErrorCode(), + "pairs element at index %zu is not a JSON object", Index); ---------------- aviralg wrote:
Fixed. Check "PairsEntitySummaryForJSONFormatTest Deserialization Error Tests" section of the test file. https://github.com/llvm/llvm-project/pull/180021 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
