| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/entity/cpp/json.h> |
| |
| #include <string> |
| |
| #include "gtest/gtest.h" |
| #include "rapidjson/document.h" |
| |
| namespace modular { |
| |
| TEST(EntityJsonTest, EntityReferenceToJson) { |
| auto ret = EntityReferenceToJson("reference"); |
| EXPECT_EQ(R"({"@entityRef":"reference"})", ret); |
| } |
| |
| TEST(EntityJsonTest, EntityReferenceToJsonDoc) { |
| auto ret = EntityReferenceToJsonDoc("reference"); |
| EXPECT_TRUE(ret.IsObject()); |
| EXPECT_TRUE(ret.HasMember("@entityRef")); |
| EXPECT_EQ("reference", std::string(ret["@entityRef"].GetString())); |
| } |
| |
| TEST(EntityJsonTest, EntityReferenceFromJson) { |
| std::string ret; |
| EXPECT_FALSE(EntityReferenceFromJson("invalid", &ret)); |
| EXPECT_FALSE(EntityReferenceFromJson("1", &ret)); |
| EXPECT_FALSE(EntityReferenceFromJson(R"({"@entityRoof":"reference"})", &ret)); |
| EXPECT_FALSE(EntityReferenceFromJson(R"({"@entityRef":12345})", &ret)); |
| EXPECT_FALSE( |
| EntityReferenceFromJson(R"({"@entityRef":["reference"]})", &ret)); |
| |
| EXPECT_TRUE(EntityReferenceFromJson(R"({"@entityRef":"reference"})", &ret)); |
| EXPECT_EQ("reference", ret); |
| |
| // EntityReferenceFromJson(rapidjson::Value) is tested implicitly with the |
| // above. |
| } |
| |
| TEST(EntityJsonTest, ExtractEntityTypesFromJson) { |
| std::vector<std::string> types; |
| |
| // Unknown type cases. |
| types = {"com.google.fuchsia.unknown"}; |
| EXPECT_TRUE(ExtractEntityTypesFromJson("1", &types)); |
| EXPECT_TRUE(ExtractEntityTypesFromJson("[1,2,3]", &types)); |
| EXPECT_TRUE(ExtractEntityTypesFromJson("{}", &types)); |
| EXPECT_TRUE(ExtractEntityTypesFromJson(R"({"type": "foo"})", &types)); |
| types.clear(); |
| |
| // Types that have a bad format. |
| EXPECT_FALSE(ExtractEntityTypesFromJson(R"({"@type": 1})", &types)); |
| EXPECT_FALSE(ExtractEntityTypesFromJson(R"({"@type": {}})", &types)); |
| EXPECT_FALSE(ExtractEntityTypesFromJson(R"({"@type": [1,"foo"]})", &types)); |
| types.clear(); |
| |
| // JSON string case. |
| EXPECT_TRUE(ExtractEntityTypesFromJson(R"("hello")", &types)); |
| EXPECT_EQ(1lu, types.size()); |
| EXPECT_EQ("com.google.fuchsia.string", types[0]); |
| types.clear(); |
| |
| // Explicit "@type" case. |
| EXPECT_TRUE(ExtractEntityTypesFromJson(R"({"@type": "foo"})", &types)); |
| EXPECT_EQ(1lu, types.size()); |
| EXPECT_EQ("foo", types[0]); |
| types.clear(); |
| |
| EXPECT_TRUE(ExtractEntityTypesFromJson(R"({"@type":["foo","bar"]})", &types)); |
| EXPECT_EQ(2lu, types.size()); |
| EXPECT_EQ("foo", types[0]); |
| EXPECT_EQ("bar", types[1]); |
| types.clear(); |
| } |
| |
| } // namespace modular |