You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.3 KiB
61 lines
2.3 KiB
#include "yaml-cpp/yaml.h" // IWYU pragma: keep
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#define EXPECT_THROW_EXCEPTION(exception_type, statement, message) \
|
|
ASSERT_THROW(statement, exception_type); \
|
|
try { \
|
|
statement; \
|
|
} catch (const exception_type& e) { \
|
|
EXPECT_EQ(e.msg, message); \
|
|
}
|
|
|
|
namespace YAML {
|
|
namespace {
|
|
|
|
TEST(ErrorMessageTest, BadSubscriptErrorMessage) {
|
|
const char *example_yaml = "first:\n"
|
|
" second: 1\n"
|
|
" third: 2\n";
|
|
|
|
Node doc = Load(example_yaml);
|
|
|
|
// Test that printable key is part of error message
|
|
EXPECT_THROW_EXCEPTION(YAML::BadSubscript, doc["first"]["second"]["fourth"],
|
|
"operator[] call on a scalar (key: \"fourth\")");
|
|
|
|
EXPECT_THROW_EXCEPTION(YAML::BadSubscript, doc["first"]["second"][37],
|
|
"operator[] call on a scalar (key: \"37\")");
|
|
|
|
|
|
// Non-printable key is not included in error message
|
|
EXPECT_THROW_EXCEPTION(YAML::BadSubscript,
|
|
doc["first"]["second"][std::vector<int>()],
|
|
"operator[] call on a scalar");
|
|
|
|
EXPECT_THROW_EXCEPTION(YAML::BadSubscript, doc["first"]["second"][Node()],
|
|
"operator[] call on a scalar");
|
|
}
|
|
|
|
TEST(ErrorMessageTest, Ex9_1_InvalidNodeErrorMessage) {
|
|
const char *example_yaml = "first:\n"
|
|
" second: 1\n"
|
|
" third: 2\n";
|
|
|
|
const Node doc = Load(example_yaml);
|
|
|
|
// Test that printable key is part of error message
|
|
EXPECT_THROW_EXCEPTION(YAML::InvalidNode, doc["first"]["fourth"].as<int>(),
|
|
"invalid node; first invalid key: \"fourth\"");
|
|
|
|
EXPECT_THROW_EXCEPTION(YAML::InvalidNode, doc["first"][37].as<int>(),
|
|
"invalid node; first invalid key: \"37\"");
|
|
|
|
// Non-printable key is not included in error message
|
|
EXPECT_THROW_EXCEPTION(YAML::InvalidNode,
|
|
doc["first"][std::vector<int>()].as<int>(),
|
|
"invalid node; this may result from using a map "
|
|
"iterator as a sequence iterator, or vice-versa");
|
|
}
|
|
}
|
|
}
|