Fixed bug with simple keys that are quoted scalars

This commit is contained in:
Jesse Beder
2009-07-25 18:58:41 +00:00
parent 946d3260d7
commit 2160bb2bcc
4 changed files with 260 additions and 224 deletions

View File

@@ -309,8 +309,8 @@ namespace YAML
{ {
std::string scalar; std::string scalar;
// eat single or double quote // peek at single or double quote (don't eat because we need to preserve (for the time being) the input position)
char quote = INPUT.get(); char quote = INPUT.peek();
bool single = (quote == '\''); bool single = (quote == '\'');
// setup the scanning parameters // setup the scanning parameters
@@ -330,6 +330,11 @@ namespace YAML
InsertSimpleKey(); InsertSimpleKey();
int line = INPUT.line, column = INPUT.column; int line = INPUT.line, column = INPUT.column;
// now eat that opening quote
INPUT.get();
// and scan
scalar = ScanScalar(INPUT, params); scalar = ScanScalar(INPUT, params);
m_simpleKeyAllowed = false; m_simpleKeyAllowed = false;

View File

@@ -1,6 +1,7 @@
#include "tests.h" #include "tests.h"
#include "yaml.h" #include "yaml.h"
#include <sstream> #include <sstream>
#include <algorithm>
namespace Test namespace Test
{ {
@@ -218,5 +219,33 @@ namespace Test
return true; return true;
} }
bool QuotedSimpleKeys()
{
std::string KeyValue[3] = { "\"double\": double\n", "'single': single\n", "plain: plain\n" };
int perm[3] = { 0, 1, 2 };
do {
std::string input = KeyValue[perm[0]] + KeyValue[perm[1]] + KeyValue[perm[2]];
std::stringstream stream(input);
YAML::Parser parser(stream);
YAML::Node doc;
parser.GetNextDocument(doc);
std::string output;
doc["double"] >> output;
if(output != "double")
return false;
doc["single"] >> output;
if(output != "single")
return false;
doc["plain"] >> output;
if(output != "plain")
return false;
} while(std::next_permutation(perm, perm + 3));
return true;
}
} }
} }

View File

@@ -262,6 +262,7 @@ namespace Test
RunParserTest(&Parser::SimpleMap, "simple map", passed); RunParserTest(&Parser::SimpleMap, "simple map", passed);
RunParserTest(&Parser::FlowSeq, "flow seq", passed); RunParserTest(&Parser::FlowSeq, "flow seq", passed);
RunParserTest(&Parser::FlowMap, "flow map", passed); RunParserTest(&Parser::FlowMap, "flow map", passed);
RunParserTest(&Parser::QuotedSimpleKeys, "quoted simple keys", passed);
RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed); RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed);
RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed); RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed);

View File

@@ -28,6 +28,7 @@ namespace Test {
bool SimpleMap(); bool SimpleMap();
bool FlowSeq(); bool FlowSeq();
bool FlowMap(); bool FlowMap();
bool QuotedSimpleKeys();
} }
namespace Emitter { namespace Emitter {