mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Merged the extra tests from other-tags into the trunk (forgot last commit)
This commit is contained in:
@@ -373,6 +373,31 @@ namespace Test
|
|||||||
desiredOutput = "---\n- !<!foo>\n []\n- !<!bar>\n {}";
|
desiredOutput = "---\n- !<!foo>\n []\n- !<!bar>\n {}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ByKindTagWithScalar(YAML::Emitter& out, std::string& desiredOutput)
|
||||||
|
{
|
||||||
|
out << YAML::BeginSeq;
|
||||||
|
out << YAML::DoubleQuoted << "12";
|
||||||
|
out << "12";
|
||||||
|
out << YAML::TagByKind << "12";
|
||||||
|
out << YAML::EndSeq;
|
||||||
|
|
||||||
|
desiredOutput = "---\n- \"12\"\n- 12\n- ! 12";
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalTagWithScalar(YAML::Emitter& out, std::string& desiredOutput)
|
||||||
|
{
|
||||||
|
out << YAML::LocalTag("foo") << "bar";
|
||||||
|
|
||||||
|
desiredOutput = "--- !foo bar";
|
||||||
|
}
|
||||||
|
|
||||||
|
void BadLocalTag(YAML::Emitter& out, std::string& desiredError)
|
||||||
|
{
|
||||||
|
out << YAML::LocalTag("e!far") << "bar";
|
||||||
|
|
||||||
|
desiredError = "invalid tag";
|
||||||
|
}
|
||||||
|
|
||||||
void ComplexDoc(YAML::Emitter& out, std::string& desiredOutput)
|
void ComplexDoc(YAML::Emitter& out, std::string& desiredOutput)
|
||||||
{
|
{
|
||||||
out << YAML::BeginMap;
|
out << YAML::BeginMap;
|
||||||
@@ -789,6 +814,8 @@ namespace Test
|
|||||||
RunEmitterTest(&Emitter::VerbatimTagWithEmptySeq, "verbatim tag with empty seq", passed, total);
|
RunEmitterTest(&Emitter::VerbatimTagWithEmptySeq, "verbatim tag with empty seq", passed, total);
|
||||||
RunEmitterTest(&Emitter::VerbatimTagWithEmptyMap, "verbatim tag with empty map", passed, total);
|
RunEmitterTest(&Emitter::VerbatimTagWithEmptyMap, "verbatim tag with empty map", passed, total);
|
||||||
RunEmitterTest(&Emitter::VerbatimTagWithEmptySeqAndMap, "verbatim tag with empty seq and map", passed, total);
|
RunEmitterTest(&Emitter::VerbatimTagWithEmptySeqAndMap, "verbatim tag with empty seq and map", passed, total);
|
||||||
|
RunEmitterTest(&Emitter::ByKindTagWithScalar, "by-kind tag with scalar", passed, total);
|
||||||
|
RunEmitterTest(&Emitter::LocalTagWithScalar, "local tag with scalar", passed, total);
|
||||||
RunEmitterTest(&Emitter::ComplexDoc, "complex doc", passed, total);
|
RunEmitterTest(&Emitter::ComplexDoc, "complex doc", passed, total);
|
||||||
RunEmitterTest(&Emitter::STLContainers, "STL containers", passed, total);
|
RunEmitterTest(&Emitter::STLContainers, "STL containers", passed, total);
|
||||||
RunEmitterTest(&Emitter::SimpleComment, "simple comment", passed, total);
|
RunEmitterTest(&Emitter::SimpleComment, "simple comment", passed, total);
|
||||||
@@ -815,6 +842,7 @@ namespace Test
|
|||||||
RunEmitterErrorTest(&Emitter::MissingValue, "missing value", passed, total);
|
RunEmitterErrorTest(&Emitter::MissingValue, "missing value", passed, total);
|
||||||
RunEmitterErrorTest(&Emitter::UnexpectedKey, "unexpected key", passed, total);
|
RunEmitterErrorTest(&Emitter::UnexpectedKey, "unexpected key", passed, total);
|
||||||
RunEmitterErrorTest(&Emitter::UnexpectedValue, "unexpected value", passed, total);
|
RunEmitterErrorTest(&Emitter::UnexpectedValue, "unexpected value", passed, total);
|
||||||
|
RunEmitterErrorTest(&Emitter::BadLocalTag, "bad local tag", passed, total);
|
||||||
|
|
||||||
std::cout << "Emitter tests: " << passed << "/" << total << " passed\n";
|
std::cout << "Emitter tests: " << passed << "/" << total << " passed\n";
|
||||||
return passed == total;
|
return passed == total;
|
||||||
|
@@ -706,6 +706,106 @@ namespace Test
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrepareNodeForTagExam(YAML::Node& doc, const std::string& input)
|
||||||
|
{
|
||||||
|
std::stringstream stream(input);
|
||||||
|
YAML::Parser parser(stream);
|
||||||
|
parser.GetNextDocument(doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TagMismatch: public std::exception {
|
||||||
|
TagMismatch(const std::string& actualTag, const std::string& expectedTag) {
|
||||||
|
std::stringstream output;
|
||||||
|
output << "Tag has value \"" << actualTag << "\" but \"" << expectedTag << "\" was expected";
|
||||||
|
what_ = output.str();
|
||||||
|
}
|
||||||
|
virtual ~TagMismatch() throw() {}
|
||||||
|
virtual const char *what() const throw() { return what_.c_str(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string what_;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool ExpectedTagValue(YAML::Node& node, const char* tag)
|
||||||
|
{
|
||||||
|
if(node.GetTag() == tag)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
throw TagMismatch(node.GetTag(), tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DefaultPlainScalarTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "?");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DefaultSingleQuotedScalarTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- '12'");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "!");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExplicitNonSpecificPlainScalarTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- ! 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "!");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BasicLocalTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- !foo 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "!foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VerbatimLocalTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- !<!foo> 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "!foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StandardShortcutTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- !!int 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "tag:yaml.org,2002:int");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VerbatimURITag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- !<tag:yaml.org,2002:int> 12");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "tag:yaml.org,2002:int");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DefaultSequenceTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- [12]");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "?");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExplicitNonSpecificSequenceTag()
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
PrepareNodeForTagExam(node, "--- ! [12]");
|
||||||
|
|
||||||
|
return ExpectedTagValue(node, "!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@@ -746,7 +846,10 @@ namespace Test
|
|||||||
ok = test();
|
ok = test();
|
||||||
} catch(const YAML::Exception& e) {
|
} catch(const YAML::Exception& e) {
|
||||||
ok = false;
|
ok = false;
|
||||||
error = e.msg;
|
error = e.what();
|
||||||
|
} catch(const Parser::TagMismatch& e) {
|
||||||
|
ok = false;
|
||||||
|
error = e.what();
|
||||||
}
|
}
|
||||||
if(ok) {
|
if(ok) {
|
||||||
passed++;
|
passed++;
|
||||||
@@ -969,6 +1072,16 @@ namespace Test
|
|||||||
RunParserTest(&Parser::Bases, "bases", passed, total);
|
RunParserTest(&Parser::Bases, "bases", passed, total);
|
||||||
RunParserTest(&Parser::KeyNotFound, "key not found", passed, total);
|
RunParserTest(&Parser::KeyNotFound, "key not found", passed, total);
|
||||||
RunParserTest(&Parser::DuplicateKey, "duplicate key", passed, total);
|
RunParserTest(&Parser::DuplicateKey, "duplicate key", passed, total);
|
||||||
|
RunParserTest(&Parser::DefaultPlainScalarTag, "default plain scalar tag", passed, total);
|
||||||
|
RunParserTest(&Parser::DefaultSingleQuotedScalarTag, "default single-quoted scalar tag", passed, total);
|
||||||
|
RunParserTest(&Parser::ExplicitNonSpecificPlainScalarTag, "explicit, non-specific plain scalar tag", passed, total);
|
||||||
|
RunParserTest(&Parser::BasicLocalTag, "basic local tag", passed, total);
|
||||||
|
RunParserTest(&Parser::VerbatimLocalTag, "verbatim local tag", passed, total);
|
||||||
|
RunParserTest(&Parser::StandardShortcutTag, "standard shortcut tag", passed, total);
|
||||||
|
RunParserTest(&Parser::VerbatimURITag, "verbatim URI tag", passed, total);
|
||||||
|
RunParserTest(&Parser::DefaultPlainScalarTag, "default plain scalar tag", passed, total);
|
||||||
|
RunParserTest(&Parser::DefaultSequenceTag, "default sequence tag", passed, total);
|
||||||
|
RunParserTest(&Parser::ExplicitNonSpecificSequenceTag, "explicit, non-specific sequence tag", passed, total);
|
||||||
|
|
||||||
RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total);
|
RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total);
|
||||||
RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total);
|
RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total);
|
||||||
|
Reference in New Issue
Block a user