blob: a625dffe8dc098f70201d293b1c272ad2d245e65 [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 "src/lib/json_parser/rapidjson_validation.h"
#include <gtest/gtest.h>
namespace json_parser {
constexpr std::string_view kInvalidSchemaJson1 = "Hello";
constexpr std::string_view kInvalidSchemaJson2 = R"({
"hello": "world",
})";
constexpr std::string_view kValidSchema = R"({
"type": "object",
"additionalProperties": true,
"properties": {
"foo": {
"type": "string"
}
},
"required": ["foo"]
})";
constexpr std::string_view kInvalidJson = R"({
"hello": "world"
})";
constexpr std::string_view kValidJson = R"({
"foo": "bar",
"hello": "world"
})";
bool ParseJson(std::string_view json, rapidjson::Document* document) {
document->Parse(json.data(), json.size());
return !document->HasParseError();
}
TEST(RapidJsonValidation, InvalidSchemaJson) {
{
auto result = InitSchema(kInvalidSchemaJson1);
ASSERT_FALSE(result.is_ok());
auto& err = result.error_value();
EXPECT_EQ(err.offset, 0u);
EXPECT_EQ(err.code, rapidjson::kParseErrorValueInvalid);
}
{
auto result = InitSchema(kInvalidSchemaJson2);
ASSERT_FALSE(result.is_ok());
auto& err = result.error_value();
EXPECT_EQ(err.offset, 22u);
EXPECT_EQ(err.code, rapidjson::kParseErrorObjectMissName);
}
}
TEST(RapidJsonValidation, ValidSchema) {
auto result = InitSchema(kValidSchema);
EXPECT_TRUE(result.is_ok()) << result.error_value().ToString();
}
TEST(RapidJsonValidation, ValidJson) {
auto result = InitSchema(kValidSchema);
ASSERT_TRUE(result.is_ok()) << result.error_value().ToString();
auto& schema = result.value();
rapidjson::Document document;
ASSERT_TRUE(ParseJson(kValidJson, &document));
auto schema_result = ValidateSchema(document, schema);
EXPECT_TRUE(schema_result.is_ok()) << schema_result.error_value();
}
TEST(RapidJsonValidation, InvalidJson) {
auto result = InitSchema(kValidSchema);
ASSERT_TRUE(result.is_ok()) << result.error_value().ToString();
auto& schema = result.value();
rapidjson::Document document;
ASSERT_TRUE(ParseJson(kInvalidJson, &document));
auto schema_result = ValidateSchema(document, schema);
EXPECT_FALSE(schema_result.is_ok());
}
} // namespace json_parser