diff options
Diffstat (limited to 'llvm/unittests/Frontend/PropertySetRegistryTest.cpp')
-rw-r--r-- | llvm/unittests/Frontend/PropertySetRegistryTest.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/llvm/unittests/Frontend/PropertySetRegistryTest.cpp b/llvm/unittests/Frontend/PropertySetRegistryTest.cpp new file mode 100644 index 0000000..4c1cdb31 --- /dev/null +++ b/llvm/unittests/Frontend/PropertySetRegistryTest.cpp @@ -0,0 +1,76 @@ +//===- llvm/unittest/Frontend/PropertySetRegistry.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 "llvm/ADT/SmallVector.h" +#include "llvm/Frontend/Offloading/PropertySet.h" +#include "llvm/Support/MemoryBuffer.h" +#include "gtest/gtest.h" + +using namespace llvm::offloading; +using namespace llvm; + +void checkSerialization(const PropertySetRegistry &PSR) { + SmallString<0> Serialized; + raw_svector_ostream OS(Serialized); + writePropertiesToJSON(PSR, OS); + auto PSR2 = readPropertiesFromJSON({Serialized, ""}); + ASSERT_EQ("", toString(PSR2.takeError())); + EXPECT_EQ(PSR, *PSR2); +} + +TEST(PropertySetRegistryTest, PropertySetRegistry) { + PropertySetRegistry PSR; + checkSerialization(PSR); + + PSR["Category1"]["Prop1"] = 42U; + PSR["Category1"]["Prop2"] = ByteArray(StringRef("Hello").bytes()); + PSR["Category2"]["A"] = ByteArray{0, 4, 16, 32, 255}; + checkSerialization(PSR); + + PSR = PropertySetRegistry(); + PSR["ABC"]["empty_array"] = ByteArray(); + PSR["ABC"]["max_val"] = std::numeric_limits<uint32_t>::max(); + checkSerialization(PSR); +} + +TEST(PropertySetRegistryTest, IllFormedJSON) { + SmallString<0> Input; + + // Invalid json + Input = "{ invalid }"; + auto Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + Input = ""; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + // Not a JSON object + Input = "[1, 2, 3]"; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + // Property set not an object + Input = R"({ "Category": 42 })"; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + // Property value has non string/non-integer type + Input = R"({ "Category": { "Prop": [1, 2, 3] } })"; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + // Property value is an invalid base64 string + Input = R"({ "Category": { "Prop": ";" } })"; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); + + Input = R"({ "Category": { "Prop": "!@#$" } })"; + Res = readPropertiesFromJSON({Input, ""}); + EXPECT_NE("", toString(Res.takeError())); +} |