blob: 24f34f9ee23c2d108d640a9a9e0e830c7522c922 [file] [log] [blame]
// 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