mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Switched from loading test files to testing specific parsing constructs. The tests don't fully cover the span (eventually I'll add more, maybe), but there's a bunch there.
More to the point, the yaml-reader program doesn't do any file IO, so it doesn't require a specific working directory.
This commit is contained in:
222
yaml-reader/parsertests.cpp
Normal file
222
yaml-reader/parsertests.cpp
Normal file
@@ -0,0 +1,222 @@
|
||||
#include "tests.h"
|
||||
#include "yaml.h"
|
||||
#include <sstream>
|
||||
|
||||
namespace Test
|
||||
{
|
||||
namespace Parser {
|
||||
void SimpleScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "Hello, World!";
|
||||
desiredOutput = "Hello, World!";
|
||||
}
|
||||
|
||||
void MultiLineScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
"normal scalar, but\n"
|
||||
"over several lines";
|
||||
desiredOutput = "normal scalar, but over several lines";
|
||||
}
|
||||
|
||||
void LiteralScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
"|\n"
|
||||
" literal scalar - so we can draw ASCII:\n"
|
||||
" \n"
|
||||
" - -\n"
|
||||
" | - |\n"
|
||||
" -----\n";
|
||||
desiredOutput =
|
||||
"literal scalar - so we can draw ASCII:\n"
|
||||
"\n"
|
||||
" - -\n"
|
||||
" | - |\n"
|
||||
" -----\n";
|
||||
}
|
||||
|
||||
void FoldedScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
">\n"
|
||||
" and a folded scalar... so we\n"
|
||||
" can just keep writing various\n"
|
||||
" things. And if we want to keep indentation:\n"
|
||||
" \n"
|
||||
" we just indent a little\n"
|
||||
" see, this stays indented";
|
||||
desiredOutput =
|
||||
"and a folded scalar... so we"
|
||||
" can just keep writing various"
|
||||
" things. And if we want to keep indentation:\n"
|
||||
"\n"
|
||||
" we just indent a little\n"
|
||||
" see, this stays indented";
|
||||
}
|
||||
|
||||
void ChompedFoldedScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
">-\n"
|
||||
" Here's a folded scalar\n"
|
||||
" that gets chomped.";
|
||||
desiredOutput =
|
||||
"Here's a folded scalar"
|
||||
" that gets chomped.";
|
||||
}
|
||||
|
||||
void ChompedLiteralScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
"|-\n"
|
||||
" Here's a literal scalar\n"
|
||||
" that gets chomped.";
|
||||
desiredOutput =
|
||||
"Here's a literal scalar\n"
|
||||
"that gets chomped.";
|
||||
}
|
||||
|
||||
void FoldedScalarWithIndent(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar =
|
||||
">2\n"
|
||||
" Here's a folded scalar\n"
|
||||
" that starts with some indentation.";
|
||||
desiredOutput =
|
||||
" Here's a folded scalar\n"
|
||||
"that starts with some indentation.";
|
||||
}
|
||||
|
||||
void ColonScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "::vector";
|
||||
desiredOutput = "::vector";
|
||||
}
|
||||
|
||||
void QuotedScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "\": - ()\"";
|
||||
desiredOutput = ": - ()";
|
||||
}
|
||||
|
||||
void CommaScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "Up, up, and away!";
|
||||
desiredOutput = "Up, up, and away!";
|
||||
}
|
||||
|
||||
void DashScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "-123";
|
||||
desiredOutput = "-123";
|
||||
}
|
||||
|
||||
void URLScalar(std::string& inputScalar, std::string& desiredOutput)
|
||||
{
|
||||
inputScalar = "http://example.com/foo#bar";
|
||||
desiredOutput = "http://example.com/foo#bar";
|
||||
}
|
||||
|
||||
bool SimpleSeq()
|
||||
{
|
||||
std::string input =
|
||||
"- eggs\n"
|
||||
"- bread\n"
|
||||
"- milk";
|
||||
|
||||
std::stringstream stream(input);
|
||||
YAML::Parser parser(stream);
|
||||
YAML::Node doc;
|
||||
parser.GetNextDocument(doc);
|
||||
|
||||
std::string output;
|
||||
doc[0] >> output;
|
||||
if(output != "eggs")
|
||||
return false;
|
||||
doc[1] >> output;
|
||||
if(output != "bread")
|
||||
return false;
|
||||
doc[2] >> output;
|
||||
if(output != "milk")
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SimpleMap()
|
||||
{
|
||||
std::string input =
|
||||
"name: Prince Fielder\n"
|
||||
"position: 1B\n"
|
||||
"bats: L";
|
||||
|
||||
std::stringstream stream(input);
|
||||
YAML::Parser parser(stream);
|
||||
YAML::Node doc;
|
||||
parser.GetNextDocument(doc);
|
||||
|
||||
std::string output;
|
||||
doc["name"] >> output;
|
||||
if(output != "Prince Fielder")
|
||||
return false;
|
||||
doc["position"] >> output;
|
||||
if(output != "1B")
|
||||
return false;
|
||||
doc["bats"] >> output;
|
||||
if(output != "L")
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FlowSeq()
|
||||
{
|
||||
std::string input = "[ 2 , 3, 5 , 7, 11]";
|
||||
|
||||
std::stringstream stream(input);
|
||||
YAML::Parser parser(stream);
|
||||
YAML::Node doc;
|
||||
parser.GetNextDocument(doc);
|
||||
|
||||
int output;
|
||||
doc[0] >> output;
|
||||
if(output != 2)
|
||||
return false;
|
||||
doc[1] >> output;
|
||||
if(output != 3)
|
||||
return false;
|
||||
doc[2] >> output;
|
||||
if(output != 5)
|
||||
return false;
|
||||
doc[3] >> output;
|
||||
if(output != 7)
|
||||
return false;
|
||||
doc[4] >> output;
|
||||
if(output != 11)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FlowMap()
|
||||
{
|
||||
std::string input = "{hr: 65, avg: 0.278}";
|
||||
|
||||
std::stringstream stream(input);
|
||||
YAML::Parser parser(stream);
|
||||
YAML::Node doc;
|
||||
parser.GetNextDocument(doc);
|
||||
|
||||
std::string output;
|
||||
doc["hr"] >> output;
|
||||
if(output != "65")
|
||||
return false;
|
||||
doc["avg"] >> output;
|
||||
if(output != "0.278")
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user