blob: 0d5c6e8fe03b6a305c83b561ba802eec3b09bb04 [file] [log] [blame]
// Copyright 2019 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/inspect/contrib/cpp/archive_reader.h>
#include <rapidjson/document.h>
#include <zxtest/zxtest.h>
namespace {
using inspect::contrib::DiagnosticsData;
TEST(DiagnosticsDataTest, ComponentNameExtraction) {
{
rapidjson::Document doc;
doc.Parse(R"({"moniker": "root/hub/my_component.cmx"})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ("my_component.cmx", data.component_name());
}
{
rapidjson::Document doc;
doc.Parse(R"({"moniker": "abcd"})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ("abcd", data.component_name());
}
{
// Can't find path, empty return.
rapidjson::Document doc;
doc.Parse(R"({"not_moniker": "abcd"})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ("", data.component_name());
}
}
TEST(DiagnosticsDataTest, ContentExtraction) {
{
rapidjson::Document doc;
doc.Parse(R"({"payload": {"value": "hello", "count": 10}})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ(rapidjson::Value("hello"), data.GetByPath({"value"}));
EXPECT_EQ(rapidjson::Value(10), data.GetByPath({"count"}));
EXPECT_EQ(rapidjson::Value(), data.GetByPath({"value", "1234"}));
}
{
rapidjson::Document doc;
doc.Parse(R"({"payload": {"name/with/slashes": "hello"}})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ(rapidjson::Value("hello"), data.GetByPath({"name/with/slashes"}));
}
{
// Content is missing, return nullptr.
rapidjson::Document doc;
doc.Parse(R"({"moniker": "root/hub/my_component.cmx"})");
DiagnosticsData data(std::move(doc));
EXPECT_EQ(rapidjson::Value(), data.GetByPath({"value"}));
}
}
} // namespace