diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e061e0..4ab7746 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ set(YAML_CPP_VERSION "${YAML_CPP_VERSION_MAJOR}.${YAML_CPP_VERSION_MINOR}.${YAML enable_testing() -option(YAML_CPP_BUILD_TOOLS "Enables or disables yaml-reader and parse tools" true) +option(YAML_CPP_BUILD_TOOLS "Enables or disables testing and parse tools" true) if(WIN32) set(_library_dir bin) # .dll are in PATH, like executables @@ -67,6 +67,6 @@ if(UNIX) endif(UNIX) if(YAML_CPP_BUILD_TOOLS) - add_subdirectory (yaml-reader) + add_subdirectory (test) add_subdirectory (util) endif(YAML_CPP_BUILD_TOOLS) diff --git a/yaml-reader/CMakeLists.txt b/yaml-reader/CMakeLists.txt deleted file mode 100644 index 2b58180..0000000 --- a/yaml-reader/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -file(GLOB yaml-reader_headers [a-z]*.h) -file(GLOB yaml-reader_sources [a-z]*.cpp) - -add_executable(yaml-reader - ${yaml-reader_sources} - ${yaml-reader_headers} -) -target_link_libraries(yaml-reader yaml-cpp) - -add_test(yaml-reader-test yaml-reader) diff --git a/yaml-reader/emittertests.cpp b/yaml-reader/emittertests.cpp deleted file mode 100644 index f85af8d..0000000 --- a/yaml-reader/emittertests.cpp +++ /dev/null @@ -1,650 +0,0 @@ -#include "tests.h" -#include "yaml.h" - -namespace Test -{ - namespace Emitter { - //////////////////////////////////////////////////////////////////////////////////////////////////////// - // correct emitting - - void SimpleScalar(YAML::Emitter& out, std::string& desiredOutput) { - out << "Hello, World!"; - desiredOutput = "Hello, World!"; - } - - void SimpleSeq(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginSeq; - out << "eggs"; - out << "bread"; - out << "milk"; - out << YAML::EndSeq; - - desiredOutput = "- eggs\n- bread\n- milk"; - } - - void SimpleFlowSeq(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::Flow; - out << YAML::BeginSeq; - out << "Larry"; - out << "Curly"; - out << "Moe"; - out << YAML::EndSeq; - - desiredOutput = "[Larry, Curly, Moe]"; - } - - void EmptyFlowSeq(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::Flow; - out << YAML::BeginSeq; - out << YAML::EndSeq; - - desiredOutput = "[]"; - } - - void NestedBlockSeq(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginSeq; - out << "item 1"; - out << YAML::BeginSeq << "subitem 1" << "subitem 2" << YAML::EndSeq; - out << YAML::EndSeq; - - desiredOutput = "- item 1\n-\n - subitem 1\n - subitem 2"; - } - - void NestedFlowSeq(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginSeq; - out << "one"; - out << YAML::Flow << YAML::BeginSeq << "two" << "three" << YAML::EndSeq; - out << YAML::EndSeq; - - desiredOutput = "- one\n- [two, three]"; - } - - void SimpleMap(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginMap; - out << YAML::Key << "name"; - out << YAML::Value << "Ryan Braun"; - out << YAML::Key << "position"; - out << YAML::Value << "3B"; - out << YAML::EndMap; - - desiredOutput = "name: Ryan Braun\nposition: 3B"; - } - - void SimpleFlowMap(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::Flow; - out << YAML::BeginMap; - out << YAML::Key << "shape"; - out << YAML::Value << "square"; - out << YAML::Key << "color"; - out << YAML::Value << "blue"; - out << YAML::EndMap; - - desiredOutput = "{shape: square, color: blue}"; - } - - void MapAndList(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginMap; - out << YAML::Key << "name"; - out << YAML::Value << "Barack Obama"; - out << YAML::Key << "children"; - out << YAML::Value << YAML::BeginSeq << "Sasha" << "Malia" << YAML::EndSeq; - out << YAML::EndMap; - - desiredOutput = "name: Barack Obama\nchildren:\n - Sasha\n - Malia"; - } - - void ListAndMap(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginSeq; - out << "item 1"; - out << YAML::BeginMap; - out << YAML::Key << "pens" << YAML::Value << 8; - out << YAML::Key << "pencils" << YAML::Value << 14; - out << YAML::EndMap; - out << "item 2"; - out << YAML::EndSeq; - - desiredOutput = "- item 1\n-\n pens: 8\n pencils: 14\n- item 2"; - } - - void NestedBlockMap(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginMap; - out << YAML::Key << "name"; - out << YAML::Value << "Fred"; - out << YAML::Key << "grades"; - out << YAML::Value; - out << YAML::BeginMap; - out << YAML::Key << "algebra" << YAML::Value << "A"; - out << YAML::Key << "physics" << YAML::Value << "C+"; - out << YAML::Key << "literature" << YAML::Value << "B"; - out << YAML::EndMap; - out << YAML::EndMap; - - desiredOutput = "name: Fred\ngrades:\n algebra: A\n physics: C+\n literature: B"; - } - - void NestedFlowMap(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::Flow; - out << YAML::BeginMap; - out << YAML::Key << "name"; - out << YAML::Value << "Fred"; - out << YAML::Key << "grades"; - out << YAML::Value; - out << YAML::BeginMap; - out << YAML::Key << "algebra" << YAML::Value << "A"; - out << YAML::Key << "physics" << YAML::Value << "C+"; - out << YAML::Key << "literature" << YAML::Value << "B"; - out << YAML::EndMap; - out << YAML::EndMap; - - desiredOutput = "{name: Fred, grades: {algebra: A, physics: C+, literature: B}}"; - } - - void MapListMix(YAML::Emitter& out, std::string& desiredOutput) { - out << YAML::BeginMap; - out << YAML::Key << "name"; - out << YAML::Value << "Bob"; - out << YAML::Key << "position"; - out << YAML::Value; - out << YAML::Flow << YAML::BeginSeq << 2 << 4 << YAML::EndSeq; - out << YAML::Key << "invincible" << YAML::Value << YAML::OnOffBool << false; - out << YAML::EndMap; - - desiredOutput = "name: Bob\nposition: [2, 4]\ninvincible: off"; - } - - void SimpleLongKey(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::LongKey; - out << YAML::BeginMap; - out << YAML::Key << "height"; - out << YAML::Value << "5'9\""; - out << YAML::Key << "weight"; - out << YAML::Value << 145; - out << YAML::EndMap; - - desiredOutput = "? height\n: 5'9\"\n? weight\n: 145"; - } - - void SingleLongKey(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key << "age"; - out << YAML::Value << "24"; - out << YAML::LongKey << YAML::Key << "height"; - out << YAML::Value << "5'9\""; - out << YAML::Key << "weight"; - out << YAML::Value << 145; - out << YAML::EndMap; - - desiredOutput = "age: 24\n? height\n: 5'9\"\nweight: 145"; - } - - void ComplexLongKey(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::LongKey; - out << YAML::BeginMap; - out << YAML::Key << YAML::BeginSeq << 1 << 3 << YAML::EndSeq; - out << YAML::Value << "monster"; - out << YAML::Key << YAML::Flow << YAML::BeginSeq << 2 << 0 << YAML::EndSeq; - out << YAML::Value << "demon"; - out << YAML::EndMap; - - desiredOutput = "?\n - 1\n - 3\n: monster\n? [2, 0]\n: demon"; - } - - void AutoLongKey(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key << YAML::BeginSeq << 1 << 3 << YAML::EndSeq; - out << YAML::Value << "monster"; - out << YAML::Key << YAML::Flow << YAML::BeginSeq << 2 << 0 << YAML::EndSeq; - out << YAML::Value << "demon"; - out << YAML::Key << "the origin"; - out << YAML::Value << "angel"; - out << YAML::EndMap; - - desiredOutput = "?\n - 1\n - 3\n: monster\n? [2, 0]\n: demon\nthe origin: angel"; - } - - void ScalarFormat(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << "simple scalar"; - out << YAML::SingleQuoted << "explicit single-quoted scalar"; - out << YAML::DoubleQuoted << "explicit double-quoted scalar"; - out << "auto-detected\ndouble-quoted scalar"; - out << "a non-\"auto-detected\" double-quoted scalar"; - out << YAML::Literal << "literal scalar\nthat may span\nmany, many\nlines and have \"whatever\" crazy\tsymbols that we like"; - out << YAML::EndSeq; - - desiredOutput = "- simple scalar\n- 'explicit single-quoted scalar'\n- \"explicit double-quoted scalar\"\n- \"auto-detected\\x0adouble-quoted scalar\"\n- a non-\"auto-detected\" double-quoted scalar\n- |\n literal scalar\n that may span\n many, many\n lines and have \"whatever\" crazy\tsymbols that we like"; - } - - void AutoLongKeyScalar(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key << YAML::Literal << "multi-line\nscalar"; - out << YAML::Value << "and its value"; - out << YAML::EndMap; - - desiredOutput = "? |\n multi-line\n scalar\n: and its value"; - } - - void LongKeyFlowMap(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::Flow; - out << YAML::BeginMap; - out << YAML::Key << "simple key"; - out << YAML::Value << "and value"; - out << YAML::LongKey << YAML::Key << "long key"; - out << YAML::Value << "and its value"; - out << YAML::EndMap; - - desiredOutput = "{simple key: and value, ? long key: and its value}"; - } - - void BlockMapAsKey(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key; - out << YAML::BeginMap; - out << YAML::Key << "key" << YAML::Value << "value"; - out << YAML::Key << "next key" << YAML::Value << "next value"; - out << YAML::EndMap; - out << YAML::Value; - out << "total value"; - out << YAML::EndMap; - - desiredOutput = "?\n key: value\n next key: next value\n: total value"; - } - - void AliasAndAnchor(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << YAML::Anchor("fred"); - out << YAML::BeginMap; - out << YAML::Key << "name" << YAML::Value << "Fred"; - out << YAML::Key << "age" << YAML::Value << 42; - out << YAML::EndMap; - out << YAML::Alias("fred"); - out << YAML::EndSeq; - - desiredOutput = "- &fred\n name: Fred\n age: 42\n- *fred"; - } - - void AliasAndAnchorWithNull(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << YAML::Anchor("fred") << YAML::Null; - out << YAML::Alias("fred"); - out << YAML::EndSeq; - - desiredOutput = "- &fred ~\n- *fred"; - } - - void ComplexDoc(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key << "receipt"; - out << YAML::Value << "Oz-Ware Purchase Invoice"; - out << YAML::Key << "date"; - out << YAML::Value << "2007-08-06"; - out << YAML::Key << "customer"; - out << YAML::Value; - out << YAML::BeginMap; - out << YAML::Key << "given"; - out << YAML::Value << "Dorothy"; - out << YAML::Key << "family"; - out << YAML::Value << "Gale"; - out << YAML::EndMap; - out << YAML::Key << "items"; - out << YAML::Value; - out << YAML::BeginSeq; - out << YAML::BeginMap; - out << YAML::Key << "part_no"; - out << YAML::Value << "A4786"; - out << YAML::Key << "descrip"; - out << YAML::Value << "Water Bucket (Filled)"; - out << YAML::Key << "price"; - out << YAML::Value << 1.47; - out << YAML::Key << "quantity"; - out << YAML::Value << 4; - out << YAML::EndMap; - out << YAML::BeginMap; - out << YAML::Key << "part_no"; - out << YAML::Value << "E1628"; - out << YAML::Key << "descrip"; - out << YAML::Value << "High Heeled \"Ruby\" Slippers"; - out << YAML::Key << "price"; - out << YAML::Value << 100.27; - out << YAML::Key << "quantity"; - out << YAML::Value << 1; - out << YAML::EndMap; - out << YAML::EndSeq; - out << YAML::Key << "bill-to"; - out << YAML::Value << YAML::Anchor("id001"); - out << YAML::BeginMap; - out << YAML::Key << "street"; - out << YAML::Value << YAML::Literal << "123 Tornado Alley\nSuite 16"; - out << YAML::Key << "city"; - out << YAML::Value << "East Westville"; - out << YAML::Key << "state"; - out << YAML::Value << "KS"; - out << YAML::EndMap; - out << YAML::Key << "ship-to"; - out << YAML::Value << YAML::Alias("id001"); - out << YAML::EndMap; - - desiredOutput = "receipt: Oz-Ware Purchase Invoice\ndate: 2007-08-06\ncustomer:\n given: Dorothy\n family: Gale\nitems:\n -\n part_no: A4786\n descrip: Water Bucket (Filled)\n price: 1.47\n quantity: 4\n -\n part_no: E1628\n descrip: High Heeled \"Ruby\" Slippers\n price: 100.27\n quantity: 1\nbill-to: &id001\n street: |\n 123 Tornado Alley\n Suite 16\n city: East Westville\n state: KS\nship-to: *id001"; - } - - void STLContainers(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - std::vector primes; - primes.push_back(2); - primes.push_back(3); - primes.push_back(5); - primes.push_back(7); - primes.push_back(11); - primes.push_back(13); - out << YAML::Flow << primes; - std::map ages; - ages["Daniel"] = 26; - ages["Jesse"] = 24; - out << ages; - out << YAML::EndSeq; - - desiredOutput = "- [2, 3, 5, 7, 11, 13]\n-\n Daniel: 26\n Jesse: 24"; - } - - void SimpleComment(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::Key << "method"; - out << YAML::Value << "least squares" << YAML::Comment("should we change this method?"); - out << YAML::EndMap; - - desiredOutput = "method: least squares # should we change this method?"; - } - - void MultiLineComment(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << "item 1" << YAML::Comment("really really long\ncomment that couldn't possibly\nfit on one line"); - out << "item 2"; - out << YAML::EndSeq; - - desiredOutput = "- item 1 # really really long\n # comment that couldn't possibly\n # fit on one line\n- item 2"; - } - - void ComplexComments(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginMap; - out << YAML::LongKey << YAML::Key << "long key" << YAML::Comment("long key"); - out << YAML::Value << "value"; - out << YAML::EndMap; - - desiredOutput = "? long key # long key\n: value"; - } - - void Indentation(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::Indent(4); - out << YAML::BeginSeq; - out << YAML::BeginMap; - out << YAML::Key << "key 1" << YAML::Value << "value 1"; - out << YAML::Key << "key 2" << YAML::Value << YAML::BeginSeq << "a" << "b" << "c" << YAML::EndSeq; - out << YAML::EndMap; - out << YAML::EndSeq; - - desiredOutput = "-\n key 1: value 1\n key 2:\n - a\n - b\n - c"; - } - - void SimpleGlobalSettings(YAML::Emitter& out, std::string& desiredOutput) - { - out.SetIndent(4); - out.SetMapFormat(YAML::LongKey); - - out << YAML::BeginSeq; - out << YAML::BeginMap; - out << YAML::Key << "key 1" << YAML::Value << "value 1"; - out << YAML::Key << "key 2" << YAML::Value << YAML::Flow << YAML::BeginSeq << "a" << "b" << "c" << YAML::EndSeq; - out << YAML::EndMap; - out << YAML::EndSeq; - - desiredOutput = "-\n ? key 1\n : value 1\n ? key 2\n : [a, b, c]"; - } - - void ComplexGlobalSettings(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << YAML::Block; - out << YAML::BeginMap; - out << YAML::Key << "key 1" << YAML::Value << "value 1"; - out << YAML::Key << "key 2" << YAML::Value; - out.SetSeqFormat(YAML::Flow); - out << YAML::BeginSeq << "a" << "b" << "c" << YAML::EndSeq; - out << YAML::EndMap; - out << YAML::BeginMap; - out << YAML::Key << YAML::BeginSeq << 1 << 2 << YAML::EndSeq; - out << YAML::Value << YAML::BeginMap << YAML::Key << "a" << YAML::Value << "b" << YAML::EndMap; - out << YAML::EndMap; - out << YAML::EndSeq; - - desiredOutput = "-\n key 1: value 1\n key 2: [a, b, c]\n-\n ? [1, 2]\n :\n a: b"; - } - - void Null(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::BeginSeq; - out << YAML::Null; - out << YAML::BeginMap; - out << YAML::Key << "null value" << YAML::Value << YAML::Null; - out << YAML::Key << YAML::Null << YAML::Value << "null key"; - out << YAML::EndMap; - out << YAML::EndSeq; - - desiredOutput = "- ~\n-\n null value: ~\n ~: null key"; - } - - void EscapedUnicode(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::EscapeNonAscii << "\x24 \xC2\xA2 \xE2\x82\xAC \xF0\xA4\xAD\xA2"; - - desiredOutput = "\"$ \\xa2 \\u20ac \\U00024b62\""; - } - - void Unicode(YAML::Emitter& out, std::string& desiredOutput) - { - out << "\x24 \xC2\xA2 \xE2\x82\xAC \xF0\xA4\xAD\xA2"; - desiredOutput = "\x24 \xC2\xA2 \xE2\x82\xAC \xF0\xA4\xAD\xA2"; - } - - void DoubleQuotedUnicode(YAML::Emitter& out, std::string& desiredOutput) - { - out << YAML::DoubleQuoted << "\x24 \xC2\xA2 \xE2\x82\xAC \xF0\xA4\xAD\xA2"; - desiredOutput = "\"\x24 \xC2\xA2 \xE2\x82\xAC \xF0\xA4\xAD\xA2\""; - } - - - //////////////////////////////////////////////////////////////////////////////////////////////////////// - // incorrect emitting - - void ExtraEndSeq(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::UNEXPECTED_END_SEQ; - - out << YAML::BeginSeq; - out << "Hello"; - out << "World"; - out << YAML::EndSeq; - out << YAML::EndSeq; - } - - void ExtraEndMap(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::UNEXPECTED_END_MAP; - - out << YAML::BeginMap; - out << YAML::Key << "Hello" << YAML::Value << "World"; - out << YAML::EndMap; - out << YAML::EndMap; - } - - void BadSingleQuoted(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::SINGLE_QUOTED_CHAR; - - out << YAML::SingleQuoted << "Hello\nWorld"; - } - - void InvalidAnchor(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::INVALID_ANCHOR; - - out << YAML::BeginSeq; - out << YAML::Anchor("new\nline") << "Test"; - out << YAML::EndSeq; - } - - void InvalidAlias(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::INVALID_ALIAS; - - out << YAML::BeginSeq; - out << YAML::Alias("new\nline"); - out << YAML::EndSeq; - } - - void MissingKey(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::EXPECTED_KEY_TOKEN; - - out << YAML::BeginMap; - out << YAML::Key << "key" << YAML::Value << "value"; - out << "missing key" << YAML::Value << "value"; - out << YAML::EndMap; - } - - void MissingValue(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::EXPECTED_VALUE_TOKEN; - - out << YAML::BeginMap; - out << YAML::Key << "key" << "value"; - out << YAML::EndMap; - } - - void UnexpectedKey(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::UNEXPECTED_KEY_TOKEN; - - out << YAML::BeginSeq; - out << YAML::Key << "hi"; - out << YAML::EndSeq; - } - - void UnexpectedValue(YAML::Emitter& out, std::string& desiredError) - { - desiredError = YAML::ErrorMsg::UNEXPECTED_VALUE_TOKEN; - - out << YAML::BeginSeq; - out << YAML::Value << "hi"; - out << YAML::EndSeq; - } - } - - namespace { - void RunEmitterTest(void (*test)(YAML::Emitter&, std::string&), const std::string& name, int& passed, int& total) { - YAML::Emitter out; - std::string desiredOutput; - test(out, desiredOutput); - std::string output = out.c_str(); - - if(output == desiredOutput) { - passed++; - } else { - std::cout << "Emitter test failed: " << name << "\n"; - std::cout << "Output:\n"; - std::cout << output << "<<<\n"; - std::cout << "Desired output:\n"; - std::cout << desiredOutput << "<<<\n"; - } - total++; - } - - void RunEmitterErrorTest(void (*test)(YAML::Emitter&, std::string&), const std::string& name, int& passed, int& total) { - YAML::Emitter out; - std::string desiredError; - test(out, desiredError); - std::string lastError = out.GetLastError(); - if(!out.good() && lastError == desiredError) { - passed++; - } else { - std::cout << "Emitter test failed: " << name << "\n"; - if(out.good()) - std::cout << "No error detected\n"; - else - std::cout << "Detected error: " << lastError << "\n"; - std::cout << "Expected error: " << desiredError << "\n"; - } - total++; - } - } - - bool RunEmitterTests() - { - int passed = 0; - int total = 0; - RunEmitterTest(&Emitter::SimpleScalar, "simple scalar", passed, total); - RunEmitterTest(&Emitter::SimpleSeq, "simple seq", passed, total); - RunEmitterTest(&Emitter::SimpleFlowSeq, "simple flow seq", passed, total); - RunEmitterTest(&Emitter::EmptyFlowSeq, "empty flow seq", passed, total); - RunEmitterTest(&Emitter::NestedBlockSeq, "nested block seq", passed, total); - RunEmitterTest(&Emitter::NestedFlowSeq, "nested flow seq", passed, total); - RunEmitterTest(&Emitter::SimpleMap, "simple map", passed, total); - RunEmitterTest(&Emitter::SimpleFlowMap, "simple flow map", passed, total); - RunEmitterTest(&Emitter::MapAndList, "map and list", passed, total); - RunEmitterTest(&Emitter::ListAndMap, "list and map", passed, total); - RunEmitterTest(&Emitter::NestedBlockMap, "nested block map", passed, total); - RunEmitterTest(&Emitter::NestedFlowMap, "nested flow map", passed, total); - RunEmitterTest(&Emitter::MapListMix, "map list mix", passed, total); - RunEmitterTest(&Emitter::SimpleLongKey, "simple long key", passed, total); - RunEmitterTest(&Emitter::SingleLongKey, "single long key", passed, total); - RunEmitterTest(&Emitter::ComplexLongKey, "complex long key", passed, total); - RunEmitterTest(&Emitter::AutoLongKey, "auto long key", passed, total); - RunEmitterTest(&Emitter::ScalarFormat, "scalar format", passed, total); - RunEmitterTest(&Emitter::AutoLongKeyScalar, "auto long key scalar", passed, total); - RunEmitterTest(&Emitter::LongKeyFlowMap, "long key flow map", passed, total); - RunEmitterTest(&Emitter::BlockMapAsKey, "block map as key", passed, total); - RunEmitterTest(&Emitter::AliasAndAnchor, "alias and anchor", passed, total); - RunEmitterTest(&Emitter::AliasAndAnchorWithNull, "alias and anchor with null", passed, total); - RunEmitterTest(&Emitter::ComplexDoc, "complex doc", passed, total); - RunEmitterTest(&Emitter::STLContainers, "STL containers", passed, total); - RunEmitterTest(&Emitter::SimpleComment, "simple comment", passed, total); - RunEmitterTest(&Emitter::MultiLineComment, "multi-line comment", passed, total); - RunEmitterTest(&Emitter::ComplexComments, "complex comments", passed, total); - RunEmitterTest(&Emitter::Indentation, "indentation", passed, total); - RunEmitterTest(&Emitter::SimpleGlobalSettings, "simple global settings", passed, total); - RunEmitterTest(&Emitter::ComplexGlobalSettings, "complex global settings", passed, total); - RunEmitterTest(&Emitter::Null, "null", passed, total); - RunEmitterTest(&Emitter::EscapedUnicode, "escaped unicode", passed, total); - RunEmitterTest(&Emitter::Unicode, "unicode", passed, total); - RunEmitterTest(&Emitter::DoubleQuotedUnicode, "double quoted unicode", passed, total); - - RunEmitterErrorTest(&Emitter::ExtraEndSeq, "extra EndSeq", passed, total); - RunEmitterErrorTest(&Emitter::ExtraEndMap, "extra EndMap", passed, total); - RunEmitterErrorTest(&Emitter::BadSingleQuoted, "bad single quoted string", passed, total); - RunEmitterErrorTest(&Emitter::InvalidAnchor, "invalid anchor", passed, total); - RunEmitterErrorTest(&Emitter::InvalidAlias, "invalid alias", passed, total); - RunEmitterErrorTest(&Emitter::MissingKey, "missing key", passed, total); - RunEmitterErrorTest(&Emitter::MissingValue, "missing value", passed, total); - RunEmitterErrorTest(&Emitter::UnexpectedKey, "unexpected key", passed, total); - RunEmitterErrorTest(&Emitter::UnexpectedValue, "unexpected value", passed, total); - - std::cout << "Emitter tests: " << passed << "/" << total << " passed\n"; - return passed == total; - } -} - diff --git a/yaml-reader/emittertests.h b/yaml-reader/emittertests.h deleted file mode 100644 index e746e5a..0000000 --- a/yaml-reader/emittertests.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifndef EMITTERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define EMITTERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -namespace Test { - bool RunEmitterTests(); -} - -#endif // EMITTERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - diff --git a/yaml-reader/main.cpp b/yaml-reader/main.cpp deleted file mode 100644 index 881bc57..0000000 --- a/yaml-reader/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "tests.h" - -int main() -{ -#ifdef WINDOWS - _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF|_CRTDBG_ALLOC_MEM_DF); -#endif // WINDOWS - Test::RunAll(); - - return 0; -} diff --git a/yaml-reader/parsertests.cpp b/yaml-reader/parsertests.cpp deleted file mode 100644 index 138143c..0000000 --- a/yaml-reader/parsertests.cpp +++ /dev/null @@ -1,888 +0,0 @@ -#include "tests.h" -#include "yaml.h" -#include -#include - -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; - } - - bool FlowMapWithOmittedKey() - { - std::string input = "{: omitted key}"; - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc[YAML::Null] >> output; - if(output != "omitted key") - return false; - - return true; - } - - bool FlowMapWithOmittedValue() - { - std::string input = "{a: b, c:, d:}"; - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc["a"] >> output; - if(output != "b") - return false; - if(!IsNull(doc["c"])) - return false; - if(!IsNull(doc["d"])) - return false; - - return true; - } - - bool FlowMapWithSoloEntry() - { - std::string input = "{a: b, c, d: e}"; - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc["a"] >> output; - if(output != "b") - return false; - if(!IsNull(doc["c"])) - return false; - doc["d"] >> output; - if(output != "e") - return false; - - return true; - } - - bool FlowMapEndingWithSoloEntry() - { - std::string input = "{a: b, c}"; - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc["a"] >> output; - if(output != "b") - return false; - if(!IsNull(doc["c"])) - return false; - - 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; - } - - bool CompressedMapAndSeq() - { - std::string input = "key:\n- one\n- two"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - const YAML::Node& seq = doc["key"]; - if(seq.size() != 2) - return false; - - std::string output; - seq[0] >> output; - if(output != "one") - return false; - seq[1] >> output; - if(output != "two") - return false; - - return true; - } - - bool NullBlockSeqEntry() - { - std::string input = "- hello\n-\n- world"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc[0] >> output; - if(output != "hello") - return false; - if(!IsNull(doc[1])) - return false; - doc[2] >> output; - if(output != "world") - return false; - - return true; - } - - bool NullBlockMapKey() - { - std::string input = ": empty key"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc[YAML::Null] >> output; - if(output != "empty key") - return false; - - return true; - } - - bool NullBlockMapValue() - { - std::string input = "empty value:"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(!IsNull(doc["empty value"])) - return false; - - return true; - } - - bool SimpleAlias() - { - std::string input = "- &alias test\n- *alias"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc[0] >> output; - if(output != "test") - return false; - - doc[1] >> output; - if(output != "test") - return false; - - if(doc.size() != 2) - return false; - - return true; - } - - bool AliasWithNull() - { - std::string input = "- &alias\n- *alias"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(!IsNull(doc[0])) - return false; - - if(!IsNull(doc[1])) - return false; - - if(doc.size() != 2) - return false; - - return true; - } - - bool AnchorInSimpleKey() - { - std::string input = "- &a b: c\n- *a"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(doc.size() != 2) - return false; - - std::string output; - doc[0]["b"] >> output; - if(output != "c") - return false; - - doc[1] >> output; - if(output != "b") - return false; - - return true; - } - - bool AliasAsSimpleKey() - { - std::string input = "- &a b\n- *a: c"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(doc.size() != 2) - return false; - - std::string output; - doc[0] >> output; - if(output != "b") - return false; - - doc[1]["b"] >> output; - if(output != "c") - return false; - - return true; - } - - bool ExplicitDoc() - { - std::string input = "---\n- one\n- two"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(doc.size() != 2) - return false; - - std::string output; - doc[0] >> output; - if(output != "one") - return false; - doc[1] >> output; - if(output != "two") - return false; - - return true; - } - - bool MultipleDocs() - { - std::string input = "---\nname: doc1\n---\nname: doc2"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - std::string output; - doc["name"] >> output; - if(output != "doc1") - return false; - - if(!parser) - return false; - - parser.GetNextDocument(doc); - doc["name"] >> output; - if(output != "doc2") - return false; - - return true; - } - - bool ExplicitEndDoc() - { - std::string input = "- one\n- two\n...\n..."; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(doc.size() != 2) - return false; - - std::string output; - doc[0] >> output; - if(output != "one") - return false; - doc[1] >> output; - if(output != "two") - return false; - - return true; - } - - bool MultipleDocsWithSomeExplicitIndicators() - { - std::string input = - "- one\n- two\n...\n" - "---\nkey: value\n...\n...\n" - "- three\n- four\n" - "---\nkey: value"; - - std::stringstream stream(input); - YAML::Parser parser(stream); - YAML::Node doc; - std::string output; - - parser.GetNextDocument(doc); - if(doc.size() != 2) - return false; - doc[0] >> output; - if(output != "one") - return false; - doc[1] >> output; - if(output != "two") - return false; - - parser.GetNextDocument(doc); - doc["key"] >> output; - if(output != "value") - return false; - - parser.GetNextDocument(doc); - if(doc.size() != 2) - return false; - doc[0] >> output; - if(output != "three") - return false; - doc[1] >> output; - if(output != "four") - return false; - - parser.GetNextDocument(doc); - doc["key"] >> output; - if(output != "value") - return false; - - return true; - } - } - - namespace { - void RunScalarParserTest(void (*test)(std::string&, std::string&), const std::string& name, int& passed, int& total) { - std::string error; - std::string inputScalar, desiredOutput; - std::string output; - bool ok = true; - try { - test(inputScalar, desiredOutput); - std::stringstream stream(inputScalar); - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - doc >> output; - } catch(const YAML::Exception& e) { - ok = false; - error = e.msg; - } - if(ok && output == desiredOutput) { - passed++; - } else { - std::cout << "Parser test failed: " << name << "\n"; - if(error != "") - std::cout << "Caught exception: " << error << "\n"; - else { - std::cout << "Output:\n" << output << "<<<\n"; - std::cout << "Desired output:\n" << desiredOutput << "<<<\n"; - } - } - total++; - } - - void RunParserTest(bool (*test)(), const std::string& name, int& passed, int& total) { - std::string error; - bool ok = true; - try { - ok = test(); - } catch(const YAML::Exception& e) { - ok = false; - error = e.msg; - } - if(ok) { - passed++; - } else { - std::cout << "Parser test failed: " << name << "\n"; - if(error != "") - std::cout << "Caught exception: " << error << "\n"; - } - total++; - } - - typedef void (*EncodingFn)(std::ostream&, int); - - inline char Byte(int ch) - { - return static_cast(static_cast(static_cast(ch))); - } - - void EncodeToUtf8(std::ostream& stream, int ch) - { - if (ch <= 0x7F) - { - stream << Byte(ch); - } - else if (ch <= 0x7FF) - { - stream << Byte(0xC0 | (ch >> 6)); - stream << Byte(0x80 | (ch & 0x3F)); - } - else if (ch <= 0xFFFF) - { - stream << Byte(0xE0 | (ch >> 12)); - stream << Byte(0x80 | ((ch >> 6) & 0x3F)); - stream << Byte(0x80 | (ch & 0x3F)); - } - else if (ch <= 0x1FFFFF) - { - stream << Byte(0xF0 | (ch >> 18)); - stream << Byte(0x80 | ((ch >> 12) & 0x3F)); - stream << Byte(0x80 | ((ch >> 6) & 0x3F)); - stream << Byte(0x80 | (ch & 0x3F)); - } - } - - bool SplitUtf16HighChar(std::ostream& stream, EncodingFn encoding, int ch) - { - int biasedValue = ch - 0x10000; - if (biasedValue < 0) - { - return false; - } - int high = 0xD800 | (biasedValue >> 10); - int low = 0xDC00 | (biasedValue & 0x3FF); - encoding(stream, high); - encoding(stream, low); - return true; - } - - void EncodeToUtf16LE(std::ostream& stream, int ch) - { - if (!SplitUtf16HighChar(stream, &EncodeToUtf16LE, ch)) - { - stream << Byte(ch & 0xFF) << Byte(ch >> 8); - } - } - - void EncodeToUtf16BE(std::ostream& stream, int ch) - { - if (!SplitUtf16HighChar(stream, &EncodeToUtf16BE, ch)) - { - stream << Byte(ch >> 8) << Byte(ch & 0xFF); - } - } - - void EncodeToUtf32LE(std::ostream& stream, int ch) - { - stream << Byte(ch & 0xFF) << Byte((ch >> 8) & 0xFF) - << Byte((ch >> 16) & 0xFF) << Byte((ch >> 24) & 0xFF); - } - - void EncodeToUtf32BE(std::ostream& stream, int ch) - { - stream << Byte((ch >> 24) & 0xFF) << Byte((ch >> 16) & 0xFF) - << Byte((ch >> 8) & 0xFF) << Byte(ch & 0xFF); - } - - class EncodingTester - { - public: - EncodingTester(EncodingFn encoding, bool declareEncoding) - { - if (declareEncoding) - { - encoding(m_yaml, 0xFEFF); - } - - AddEntry(encoding, 0x0021, 0x007E); // Basic Latin - AddEntry(encoding, 0x00A1, 0x00FF); // Latin-1 Supplement - AddEntry(encoding, 0x0660, 0x06FF); // Arabic (largest contiguous block) - - // CJK unified ideographs (multiple lines) - AddEntry(encoding, 0x4E00, 0x4EFF); - AddEntry(encoding, 0x4F00, 0x4FFF); - AddEntry(encoding, 0x5000, 0x51FF); // 512 character line - AddEntry(encoding, 0x5200, 0x54FF); // 768 character line - AddEntry(encoding, 0x5500, 0x58FF); // 1024 character line - - AddEntry(encoding, 0x103A0, 0x103C3); // Old Persian - - m_yaml.seekg(0, std::ios::beg); - } - - std::istream& stream() {return m_yaml;} - const std::vector& entries() {return m_entries;} - - private: - std::stringstream m_yaml; - std::vector m_entries; - - void AddEntry(EncodingFn encoding, int startCh, int endCh) - { - encoding(m_yaml, '-'); - encoding(m_yaml, ' '); - encoding(m_yaml, '|'); - encoding(m_yaml, '\n'); - encoding(m_yaml, ' '); - encoding(m_yaml, ' '); - - std::stringstream entry; - for (int ch = startCh; ch <= endCh; ++ch) - { - encoding(m_yaml, ch); - EncodeToUtf8(entry, ch); - } - encoding(m_yaml, '\n'); - - m_entries.push_back(entry.str()); - } - }; - - void RunEncodingTest(EncodingFn encoding, bool declareEncoding, const std::string& name, int& passed, int& total) - { - EncodingTester tester(encoding, declareEncoding); - std::string error; - bool ok = true; - try { - YAML::Parser parser(tester.stream()); - YAML::Node doc; - parser.GetNextDocument(doc); - - YAML::Iterator itNode = doc.begin(); - std::vector::const_iterator itEntry = tester.entries().begin(); - for (; (itNode != doc.end()) && (itEntry != tester.entries().end()); ++itNode, ++itEntry) - { - std::string stScalarValue; - if (!itNode->GetScalar(stScalarValue) && (stScalarValue == *itEntry)) - { - break; - } - } - - if ((itNode != doc.end()) || (itEntry != tester.entries().end())) - { - ok = false; - } - } catch(const YAML::Exception& e) { - ok = false; - error = e.msg; - } - if(ok) { - passed++; - } else { - std::cout << "Parser test failed: " << name << "\n"; - if(error != "") - std::cout << "Caught exception: " << error << "\n"; - } - total++; - } - } - - bool RunParserTests() - { - int passed = 0; - int total = 0; - RunScalarParserTest(&Parser::SimpleScalar, "simple scalar", passed, total); - RunScalarParserTest(&Parser::MultiLineScalar, "multi-line scalar", passed, total); - RunScalarParserTest(&Parser::LiteralScalar, "literal scalar", passed, total); - RunScalarParserTest(&Parser::FoldedScalar, "folded scalar", passed, total); - RunScalarParserTest(&Parser::ChompedFoldedScalar, "chomped folded scalar", passed, total); - RunScalarParserTest(&Parser::ChompedLiteralScalar, "chomped literal scalar", passed, total); - RunScalarParserTest(&Parser::FoldedScalarWithIndent, "folded scalar with indent", passed, total); - RunScalarParserTest(&Parser::ColonScalar, "colon scalar", passed, total); - RunScalarParserTest(&Parser::QuotedScalar, "quoted scalar", passed, total); - RunScalarParserTest(&Parser::CommaScalar, "comma scalar", passed, total); - RunScalarParserTest(&Parser::DashScalar, "dash scalar", passed, total); - RunScalarParserTest(&Parser::URLScalar, "url scalar", passed, total); - - RunParserTest(&Parser::SimpleSeq, "simple seq", passed, total); - RunParserTest(&Parser::SimpleMap, "simple map", passed, total); - RunParserTest(&Parser::FlowSeq, "flow seq", passed, total); - RunParserTest(&Parser::FlowMap, "flow map", passed, total); - RunParserTest(&Parser::FlowMapWithOmittedKey, "flow map with omitted key", passed, total); - RunParserTest(&Parser::FlowMapWithOmittedValue, "flow map with omitted value", passed, total); - RunParserTest(&Parser::FlowMapWithSoloEntry, "flow map with solo entry", passed, total); - RunParserTest(&Parser::FlowMapEndingWithSoloEntry, "flow map ending with solo entry", passed, total); - RunParserTest(&Parser::QuotedSimpleKeys, "quoted simple keys", passed, total); - RunParserTest(&Parser::CompressedMapAndSeq, "compressed map and seq", passed, total); - RunParserTest(&Parser::NullBlockSeqEntry, "null block seq entry", passed, total); - RunParserTest(&Parser::NullBlockMapKey, "null block map key", passed, total); - RunParserTest(&Parser::NullBlockMapValue, "null block map value", passed, total); - RunParserTest(&Parser::SimpleAlias, "simple alias", passed, total); - RunParserTest(&Parser::AliasWithNull, "alias with null", passed, total); - RunParserTest(&Parser::AnchorInSimpleKey, "anchor in simple key", passed, total); - RunParserTest(&Parser::AliasAsSimpleKey, "alias as simple key", passed, total); - RunParserTest(&Parser::ExplicitDoc, "explicit doc", passed, total); - RunParserTest(&Parser::MultipleDocs, "multiple docs", passed, total); - RunParserTest(&Parser::ExplicitEndDoc, "explicit end doc", passed, total); - RunParserTest(&Parser::MultipleDocsWithSomeExplicitIndicators, "multiple docs with some explicit indicators", passed, total); - - RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total); - RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total); - RunEncodingTest(&EncodeToUtf16LE, false, "UTF-16LE, no BOM", passed, total); - RunEncodingTest(&EncodeToUtf16LE, true, "UTF-16LE with BOM", passed, total); - RunEncodingTest(&EncodeToUtf16BE, false, "UTF-16BE, no BOM", passed, total); - RunEncodingTest(&EncodeToUtf16BE, true, "UTF-16BE with BOM", passed, total); - RunEncodingTest(&EncodeToUtf32LE, false, "UTF-32LE, no BOM", passed, total); - RunEncodingTest(&EncodeToUtf32LE, true, "UTF-32LE with BOM", passed, total); - RunEncodingTest(&EncodeToUtf32BE, false, "UTF-32BE, no BOM", passed, total); - RunEncodingTest(&EncodeToUtf32BE, true, "UTF-32BE with BOM", passed, total); - - std::cout << "Parser tests: " << passed << "/" << total << " passed\n"; - return passed == total; - } -} - diff --git a/yaml-reader/parsertests.h b/yaml-reader/parsertests.h deleted file mode 100644 index e63a2eb..0000000 --- a/yaml-reader/parsertests.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifndef PARSERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define PARSERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -namespace Test { - bool RunParserTests(); -} - -#endif // PARSERTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - diff --git a/yaml-reader/spectests.cpp b/yaml-reader/spectests.cpp deleted file mode 100644 index c4da43f..0000000 --- a/yaml-reader/spectests.cpp +++ /dev/null @@ -1,1280 +0,0 @@ -#include "spectests.h" -#include "yaml.h" -#include -#include -#include -#include - -namespace { - struct TEST { - TEST(): ok(false) {} - TEST(bool ok_): ok(ok_) {} - TEST(const char *error_): ok(false), error(error_) {} - - bool ok; - std::string error; - }; -} - -#define YAML_ASSERT(cond) do { if(!(cond)) return " Assert failed: " #cond; } while(false) -#define PARSE(doc, input) \ - std::stringstream stream(input);\ - YAML::Parser parser(stream);\ - YAML::Node doc;\ - parser.GetNextDocument(doc) -#define PARSE_NEXT(doc) parser.GetNextDocument(doc) - -namespace Test { - namespace { - void RunSpecTest(TEST (*test)(), const std::string& index, const std::string& name, int& passed, int& total) { - TEST ret; - try { - ret = test(); - } catch(const YAML::Exception& e) { - ret.ok = false; - ret.error = " Exception caught: " + e.msg; - } - - if(!ret.ok) { - std::cout << "Spec test " << index << " failed: " << name << "\n"; - std::cout << ret.error << "\n"; - } - - if(ret.ok) - passed++; - total++; - } - } - - namespace Spec { - // 2.1 - TEST SeqScalars() { - std::string input = - "- Mark McGwire\n" - "- Sammy Sosa\n" - "- Ken Griffey"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc[0] == "Mark McGwire"); - YAML_ASSERT(doc[1] == "Sammy Sosa"); - YAML_ASSERT(doc[2] == "Ken Griffey"); - return true; - } - - // 2.2 - TEST MappingScalarsToScalars() { - std::string input = - "hr: 65 # Home runs\n" - "avg: 0.278 # Batting average\n" - "rbi: 147 # Runs Batted In"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["hr"] == "65"); - YAML_ASSERT(doc["avg"] == "0.278"); - YAML_ASSERT(doc["rbi"] == "147"); - return true; - } - - // 2.3 - TEST MappingScalarsToSequences() { - std::string input = - "american:\n" - "- Boston Red Sox\n" - "- Detroit Tigers\n" - "- New York Yankees\n" - "national:\n" - "- New York Mets\n" - "- Chicago Cubs\n" - "- Atlanta Braves"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["american"].size() == 3); - YAML_ASSERT(doc["american"][0] == "Boston Red Sox"); - YAML_ASSERT(doc["american"][1] == "Detroit Tigers"); - YAML_ASSERT(doc["american"][2] == "New York Yankees"); - YAML_ASSERT(doc["national"].size() == 3); - YAML_ASSERT(doc["national"][0] == "New York Mets"); - YAML_ASSERT(doc["national"][1] == "Chicago Cubs"); - YAML_ASSERT(doc["national"][2] == "Atlanta Braves"); - return true; - } - - // 2.4 - TEST SequenceOfMappings() - { - std::string input = - "-\n" - " name: Mark McGwire\n" - " hr: 65\n" - " avg: 0.278\n" - "-\n" - " name: Sammy Sosa\n" - " hr: 63\n" - " avg: 0.288"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc[0].size() == 3); - YAML_ASSERT(doc[0]["name"] == "Mark McGwire"); - YAML_ASSERT(doc[0]["hr"] == "65"); - YAML_ASSERT(doc[0]["avg"] == "0.278"); - YAML_ASSERT(doc[1].size() == 3); - YAML_ASSERT(doc[1]["name"] == "Sammy Sosa"); - YAML_ASSERT(doc[1]["hr"] == "63"); - YAML_ASSERT(doc[1]["avg"] == "0.288"); - return true; - } - - // 2.5 - TEST SequenceOfSequences() - { - std::string input = - "- [name , hr, avg ]\n" - "- [Mark McGwire, 65, 0.278]\n" - "- [Sammy Sosa , 63, 0.288]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc[0].size() == 3); - YAML_ASSERT(doc[0][0] == "name"); - YAML_ASSERT(doc[0][1] == "hr"); - YAML_ASSERT(doc[0][2] == "avg"); - YAML_ASSERT(doc[1].size() == 3); - YAML_ASSERT(doc[1][0] == "Mark McGwire"); - YAML_ASSERT(doc[1][1] == "65"); - YAML_ASSERT(doc[1][2] == "0.278"); - YAML_ASSERT(doc[2].size() == 3); - YAML_ASSERT(doc[2][0] == "Sammy Sosa"); - YAML_ASSERT(doc[2][1] == "63"); - YAML_ASSERT(doc[2][2] == "0.288"); - return true; - } - - // 2.6 - TEST MappingOfMappings() - { - std::string input = - "Mark McGwire: {hr: 65, avg: 0.278}\n" - "Sammy Sosa: {\n" - " hr: 63,\n" - " avg: 0.288\n" - " }"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["Mark McGwire"].size() == 2); - YAML_ASSERT(doc["Mark McGwire"]["hr"] == "65"); - YAML_ASSERT(doc["Mark McGwire"]["avg"] == "0.278"); - YAML_ASSERT(doc["Sammy Sosa"].size() == 2); - YAML_ASSERT(doc["Sammy Sosa"]["hr"] == "63"); - YAML_ASSERT(doc["Sammy Sosa"]["avg"] == "0.288"); - return true; - } - - // 2.7 - TEST TwoDocumentsInAStream() - { - std::string input = - "# Ranking of 1998 home runs\n" - "---\n" - "- Mark McGwire\n" - "- Sammy Sosa\n" - "- Ken Griffey\n" - "\n" - "# Team ranking\n" - "---\n" - "- Chicago Cubs\n" - "- St Louis Cardinals"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc[0] == "Mark McGwire"); - YAML_ASSERT(doc[1] == "Sammy Sosa"); - YAML_ASSERT(doc[2] == "Ken Griffey"); - - PARSE_NEXT(doc); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc[0] == "Chicago Cubs"); - YAML_ASSERT(doc[1] == "St Louis Cardinals"); - return true; - } - - // 2.8 - TEST PlayByPlayFeed() - { - std::string input = - "---\n" - "time: 20:03:20\n" - "player: Sammy Sosa\n" - "action: strike (miss)\n" - "...\n" - "---\n" - "time: 20:03:47\n" - "player: Sammy Sosa\n" - "action: grand slam\n" - "..."; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["time"] == "20:03:20"); - YAML_ASSERT(doc["player"] == "Sammy Sosa"); - YAML_ASSERT(doc["action"] == "strike (miss)"); - - PARSE_NEXT(doc); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["time"] == "20:03:47"); - YAML_ASSERT(doc["player"] == "Sammy Sosa"); - YAML_ASSERT(doc["action"] == "grand slam"); - return true; - } - - // 2.9 - TEST SingleDocumentWithTwoComments() - { - std::string input = - "---\n" - "hr: # 1998 hr ranking\n" - " - Mark McGwire\n" - " - Sammy Sosa\n" - "rbi:\n" - " # 1998 rbi ranking\n" - " - Sammy Sosa\n" - " - Ken Griffey"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["hr"].size() == 2); - YAML_ASSERT(doc["hr"][0] == "Mark McGwire"); - YAML_ASSERT(doc["hr"][1] == "Sammy Sosa"); - YAML_ASSERT(doc["rbi"].size() == 2); - YAML_ASSERT(doc["rbi"][0] == "Sammy Sosa"); - YAML_ASSERT(doc["rbi"][1] == "Ken Griffey"); - return true; - } - - // 2.10 - TEST SimpleAnchor() - { - std::string input = - "---\n" - "hr:\n" - " - Mark McGwire\n" - " # Following node labeled SS\n" - " - &SS Sammy Sosa\n" - "rbi:\n" - " - *SS # Subsequent occurrence\n" - " - Ken Griffey"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["hr"].size() == 2); - YAML_ASSERT(doc["hr"][0] == "Mark McGwire"); - YAML_ASSERT(doc["hr"][1] == "Sammy Sosa"); - YAML_ASSERT(doc["rbi"].size() == 2); - YAML_ASSERT(doc["rbi"][0] == "Sammy Sosa"); - YAML_ASSERT(doc["rbi"][1] == "Ken Griffey"); - return true; - } - - struct Pair { - Pair() {} - Pair(const std::string& f, const std::string& s): first(f), second(s) {} - std::string first, second; - }; - - bool operator == (const Pair& p, const Pair& q) { - return p.first == q.first && p.second == q.second; - } - - void operator >> (const YAML::Node& node, Pair& p) { - node[0] >> p.first; - node[1] >> p.second; - } - - // 2.11 - TEST MappingBetweenSequences() - { - std::string input = - "? - Detroit Tigers\n" - " - Chicago cubs\n" - ":\n" - " - 2001-07-23\n" - "\n" - "? [ New York Yankees,\n" - " Atlanta Braves ]\n" - ": [ 2001-07-02, 2001-08-12,\n" - " 2001-08-14 ]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc[Pair("Detroit Tigers", "Chicago cubs")].size() == 1); - YAML_ASSERT(doc[Pair("Detroit Tigers", "Chicago cubs")][0] == "2001-07-23"); - YAML_ASSERT(doc[Pair("New York Yankees", "Atlanta Braves")].size() == 3); - YAML_ASSERT(doc[Pair("New York Yankees", "Atlanta Braves")][0] == "2001-07-02"); - YAML_ASSERT(doc[Pair("New York Yankees", "Atlanta Braves")][1] == "2001-08-12"); - YAML_ASSERT(doc[Pair("New York Yankees", "Atlanta Braves")][2] == "2001-08-14"); - return true; - } - - // 2.12 - TEST CompactNestedMapping() - { - std::string input = - "---\n" - "# Products purchased\n" - "- item : Super Hoop\n" - " quantity: 1\n" - "- item : Basketball\n" - " quantity: 4\n" - "- item : Big Shoes\n" - " quantity: 1"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc[0].size() == 2); - YAML_ASSERT(doc[0]["item"] == "Super Hoop"); - YAML_ASSERT(doc[0]["quantity"] == 1); - YAML_ASSERT(doc[1].size() == 2); - YAML_ASSERT(doc[1]["item"] == "Basketball"); - YAML_ASSERT(doc[1]["quantity"] == 4); - YAML_ASSERT(doc[2].size() == 2); - YAML_ASSERT(doc[2]["item"] == "Big Shoes"); - YAML_ASSERT(doc[2]["quantity"] == 1); - return true; - } - - // 2.13 - TEST InLiteralsNewlinesArePreserved() - { - std::string input = - "# ASCII Art\n" - "--- |\n" - " \\//||\\/||\n" - " // || ||__"; - - PARSE(doc, input); - YAML_ASSERT(doc == - "\\//||\\/||\n" - "// || ||__"); - return true; - } - - // 2.14 - TEST InFoldedScalarsNewlinesBecomeSpaces() - { - std::string input = - "--- >\n" - " Mark McGwire's\n" - " year was crippled\n" - " by a knee injury."; - - PARSE(doc, input); - YAML_ASSERT(doc == "Mark McGwire's year was crippled by a knee injury."); - return true; - } - - // 2.15 - TEST FoldedNewlinesArePreservedForMoreIndentedAndBlankLines() - { - std::string input = - ">\n" - " Sammy Sosa completed another\n" - " fine season with great stats.\n" - " \n" - " 63 Home Runs\n" - " 0.288 Batting Average\n" - " \n" - " What a year!"; - - PARSE(doc, input); - YAML_ASSERT(doc == - "Sammy Sosa completed another fine season with great stats.\n\n" - " 63 Home Runs\n" - " 0.288 Batting Average\n\n" - "What a year!"); - return true; - } - - // 2.16 - TEST IndentationDeterminesScope() - { - std::string input = - "name: Mark McGwire\n" - "accomplishment: >\n" - " Mark set a major league\n" - " home run record in 1998.\n" - "stats: |\n" - " 65 Home Runs\n" - " 0.278 Batting Average\n"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["name"] == "Mark McGwire"); - YAML_ASSERT(doc["accomplishment"] == "Mark set a major league home run record in 1998.\n"); - YAML_ASSERT(doc["stats"] == "65 Home Runs\n0.278 Batting Average\n"); - return true; - } - - // 2.17 - TEST QuotedScalars() - { - std::string input = - "unicode: \"Sosa did fine.\\u263A\"\n" - "control: \"\\b1998\\t1999\\t2000\\n\"\n" - "hex esc: \"\\x0d\\x0a is \\r\\n\"\n" - "\n" - "single: '\"Howdy!\" he cried.'\n" - "quoted: ' # Not a ''comment''.'\n" - "tie-fighter: '|\\-*-/|'"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 6); - YAML_ASSERT(doc["unicode"] == "Sosa did fine.\xe2\x98\xba"); - YAML_ASSERT(doc["control"] == "\b1998\t1999\t2000\n"); - YAML_ASSERT(doc["hex esc"] == "\x0d\x0a is \r\n"); - YAML_ASSERT(doc["single"] == "\"Howdy!\" he cried."); - YAML_ASSERT(doc["quoted"] == " # Not a 'comment'."); - YAML_ASSERT(doc["tie-fighter"] == "|\\-*-/|"); - return true; - } - - // 2.18 - TEST MultiLineFlowScalars() - { - std::string input = - "plain:\n" - " This unquoted scalar\n" - " spans many lines.\n" - "\n" - "quoted: \"So does this\n" - " quoted scalar.\\n\""; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["plain"] == "This unquoted scalar spans many lines."); - YAML_ASSERT(doc["quoted"] == "So does this quoted scalar.\n"); - return true; - } - - // TODO: 2.19 - 2.26 tags - - // 2.27 - TEST Invoice() - { - std::string input = - "--- !\n" - "invoice: 34843\n" - "date : 2001-01-23\n" - "bill-to: &id001\n" - " given : Chris\n" - " family : Dumars\n" - " address:\n" - " lines: |\n" - " 458 Walkman Dr.\n" - " Suite #292\n" - " city : Royal Oak\n" - " state : MI\n" - " postal : 48046\n" - "ship-to: *id001\n" - "product:\n" - " - sku : BL394D\n" - " quantity : 4\n" - " description : Basketball\n" - " price : 450.00\n" - " - sku : BL4438H\n" - " quantity : 1\n" - " description : Super Hoop\n" - " price : 2392.00\n" - "tax : 251.42\n" - "total: 4443.52\n" - "comments:\n" - " Late afternoon is best.\n" - " Backup contact is Nancy\n" - " Billsmer @ 338-4338."; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 8); - YAML_ASSERT(doc["invoice"] == 34843); - YAML_ASSERT(doc["date"] == "2001-01-23"); - YAML_ASSERT(doc["bill-to"].size() == 3); - YAML_ASSERT(doc["bill-to"]["given"] == "Chris"); - YAML_ASSERT(doc["bill-to"]["family"] == "Dumars"); - YAML_ASSERT(doc["bill-to"]["address"].size() == 4); - YAML_ASSERT(doc["bill-to"]["address"]["lines"] == "458 Walkman Dr.\nSuite #292\n"); - YAML_ASSERT(doc["bill-to"]["address"]["city"] == "Royal Oak"); - YAML_ASSERT(doc["bill-to"]["address"]["state"] == "MI"); - YAML_ASSERT(doc["bill-to"]["address"]["postal"] == "48046"); - YAML_ASSERT(doc["ship-to"].size() == 3); - YAML_ASSERT(doc["ship-to"]["given"] == "Chris"); - YAML_ASSERT(doc["ship-to"]["family"] == "Dumars"); - YAML_ASSERT(doc["ship-to"]["address"].size() == 4); - YAML_ASSERT(doc["ship-to"]["address"]["lines"] == "458 Walkman Dr.\nSuite #292\n"); - YAML_ASSERT(doc["ship-to"]["address"]["city"] == "Royal Oak"); - YAML_ASSERT(doc["ship-to"]["address"]["state"] == "MI"); - YAML_ASSERT(doc["ship-to"]["address"]["postal"] == "48046"); - YAML_ASSERT(doc["product"].size() == 2); - YAML_ASSERT(doc["product"][0].size() == 4); - YAML_ASSERT(doc["product"][0]["sku"] == "BL394D"); - YAML_ASSERT(doc["product"][0]["quantity"] == 4); - YAML_ASSERT(doc["product"][0]["description"] == "Basketball"); - YAML_ASSERT(doc["product"][0]["price"] == "450.00"); - YAML_ASSERT(doc["product"][1].size() == 4); - YAML_ASSERT(doc["product"][1]["sku"] == "BL4438H"); - YAML_ASSERT(doc["product"][1]["quantity"] == 1); - YAML_ASSERT(doc["product"][1]["description"] == "Super Hoop"); - YAML_ASSERT(doc["product"][1]["price"] == "2392.00"); - YAML_ASSERT(doc["tax"] == "251.42"); - YAML_ASSERT(doc["total"] == "4443.52"); - YAML_ASSERT(doc["comments"] == "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."); - return true; - } - - // 2.28 - TEST LogFile() - { - std::string input = - "---\n" - "Time: 2001-11-23 15:01:42 -5\n" - "User: ed\n" - "Warning:\n" - " This is an error message\n" - " for the log file\n" - "---\n" - "Time: 2001-11-23 15:02:31 -5\n" - "User: ed\n" - "Warning:\n" - " A slightly different error\n" - " message.\n" - "---\n" - "Date: 2001-11-23 15:03:17 -5\n" - "User: ed\n" - "Fatal:\n" - " Unknown variable \"bar\"\n" - "Stack:\n" - " - file: TopClass.py\n" - " line: 23\n" - " code: |\n" - " x = MoreObject(\"345\\n\")\n" - " - file: MoreClass.py\n" - " line: 58\n" - " code: |-\n" - " foo = bar"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["Time"] == "2001-11-23 15:01:42 -5"); - YAML_ASSERT(doc["User"] == "ed"); - YAML_ASSERT(doc["Warning"] == "This is an error message for the log file"); - - PARSE_NEXT(doc); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["Time"] == "2001-11-23 15:02:31 -5"); - YAML_ASSERT(doc["User"] == "ed"); - YAML_ASSERT(doc["Warning"] == "A slightly different error message."); - - PARSE_NEXT(doc); - YAML_ASSERT(doc.size() == 4); - YAML_ASSERT(doc["Date"] == "2001-11-23 15:03:17 -5"); - YAML_ASSERT(doc["User"] == "ed"); - YAML_ASSERT(doc["Fatal"] == "Unknown variable \"bar\""); - YAML_ASSERT(doc["Stack"].size() == 2); - YAML_ASSERT(doc["Stack"][0].size() == 3); - YAML_ASSERT(doc["Stack"][0]["file"] == "TopClass.py"); - YAML_ASSERT(doc["Stack"][0]["line"] == "23"); - YAML_ASSERT(doc["Stack"][0]["code"] == "x = MoreObject(\"345\\n\")\n"); - YAML_ASSERT(doc["Stack"][1].size() == 3); - YAML_ASSERT(doc["Stack"][1]["file"] == "MoreClass.py"); - YAML_ASSERT(doc["Stack"][1]["line"] == "58"); - YAML_ASSERT(doc["Stack"][1]["code"] == "foo = bar"); - return true; - } - - // TODO: 5.1 - 5.2 BOM - - // 5.3 - TEST BlockStructureIndicators() - { - std::string input = - "sequence:\n" - "- one\n" - "- two\n" - "mapping:\n" - " ? sky\n" - " : blue\n" - " sea : green"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["sequence"].size() == 2); - YAML_ASSERT(doc["sequence"][0] == "one"); - YAML_ASSERT(doc["sequence"][1] == "two"); - YAML_ASSERT(doc["mapping"].size() == 2); - YAML_ASSERT(doc["mapping"]["sky"] == "blue"); - YAML_ASSERT(doc["mapping"]["sea"] == "green"); - return true; - } - - // 5.4 - TEST FlowStructureIndicators() - { - std::string input = - "sequence: [ one, two, ]\n" - "mapping: { sky: blue, sea: green }"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["sequence"].size() == 2); - YAML_ASSERT(doc["sequence"][0] == "one"); - YAML_ASSERT(doc["sequence"][1] == "two"); - YAML_ASSERT(doc["mapping"].size() == 2); - YAML_ASSERT(doc["mapping"]["sky"] == "blue"); - YAML_ASSERT(doc["mapping"]["sea"] == "green"); - return true; - } - - // TODO: 5.5 comment only - - // 5.6 - TEST NodePropertyIndicators() - { - std::string input = - "anchored: !local &anchor value\n" - "alias: *anchor"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["anchored"] == "value"); // TODO: assert tag - YAML_ASSERT(doc["alias"] == "value"); - return true; - } - - // 5.7 - TEST BlockScalarIndicators() - { - std::string input = - "literal: |\n" - " some\n" - " text\n" - "folded: >\n" - " some\n" - " text\n"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["literal"] == "some\ntext\n"); - YAML_ASSERT(doc["folded"] == "some text\n"); - return true; - } - - // 5.8 - TEST QuotedScalarIndicators() - { - std::string input = - "single: 'text'\n" - "double: \"text\""; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["single"] == "text"); - YAML_ASSERT(doc["double"] == "text"); - return true; - } - - // TODO: 5.9 directive - // TODO: 5.10 reserved indicator - - // 5.11 - TEST LineBreakCharacters() - { - std::string input = - "|\n" - " Line break (no glyph)\n" - " Line break (glyphed)\n"; - - PARSE(doc, input); - YAML_ASSERT(doc == "Line break (no glyph)\nLine break (glyphed)\n"); - return true; - } - - // 5.12 - TEST TabsAndSpaces() - { - std::string input = - "# Tabs and spaces\n" - "quoted: \"Quoted\t\"\n" - "block: |\n" - " void main() {\n" - " \tprintf(\"Hello, world!\\n\");\n" - " }"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["quoted"] == "Quoted\t"); - YAML_ASSERT(doc["block"] == - "void main() {\n" - "\tprintf(\"Hello, world!\\n\");\n" - "}"); - return true; - } - - // 5.13 - TEST EscapedCharacters() - { - std::string input = - "\"Fun with \\\\\n" - "\\\" \\a \\b \\e \\f \\\n" - "\\n \\r \\t \\v \\0 \\\n" - "\\ \\_ \\N \\L \\P \\\n" - "\\x41 \\u0041 \\U00000041\""; - - PARSE(doc, input); - YAML_ASSERT(doc == "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " + std::string("\x00", 1) + " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A"); - return true; - } - - // 5.14 - TEST InvalidEscapedCharacters() - { - std::string input = - "Bad escapes:\n" - " \"\\c\n" - " \\xq-\""; - - std::stringstream stream(input); - try { - YAML::Parser parser(stream); - YAML::Node doc; - parser.GetNextDocument(doc); - } catch(const YAML::ParserException& e) { - YAML_ASSERT(e.msg == YAML::ErrorMsg::INVALID_ESCAPE + "c"); - return true; - } - - return false; - } - - // 6.1 - TEST IndentationSpaces() - { - std::string input = - " # Leading comment line spaces are\n" - " # neither content nor indentation.\n" - " \n" - "Not indented:\n" - " By one space: |\n" - " By four\n" - " spaces\n" - " Flow style: [ # Leading spaces\n" - " By two, # in flow style\n" - " Also by two, # are neither\n" - " \tStill by two # content nor\n" - " ] # indentation."; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["Not indented"].size() == 2); - YAML_ASSERT(doc["Not indented"]["By one space"] == "By four\n spaces\n"); - YAML_ASSERT(doc["Not indented"]["Flow style"].size() == 3); - YAML_ASSERT(doc["Not indented"]["Flow style"][0] == "By two"); - YAML_ASSERT(doc["Not indented"]["Flow style"][1] == "Also by two"); - YAML_ASSERT(doc["Not indented"]["Flow style"][2] == "Still by two"); - return true; - } - - // 6.2 - TEST IndentationIndicators() - { - std::string input = - "? a\n" - ": -\tb\n" - " - -\tc\n" - " - d"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["a"].size() == 2); - YAML_ASSERT(doc["a"][0] == "b"); - YAML_ASSERT(doc["a"][1].size() == 2); - YAML_ASSERT(doc["a"][1][0] == "c"); - YAML_ASSERT(doc["a"][1][1] == "d"); - return true; - } - - // 6.3 - TEST SeparationSpaces() - { - std::string input = - "- foo:\t bar\n" - "- - baz\n" - " -\tbaz"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc[0].size() == 1); - YAML_ASSERT(doc[0]["foo"] == "bar"); - YAML_ASSERT(doc[1].size() == 2); - YAML_ASSERT(doc[1][0] == "baz"); - YAML_ASSERT(doc[1][1] == "baz"); - return true; - } - - // 6.4 - TEST LinePrefixes() - { - std::string input = - "plain: text\n" - " lines\n" - "quoted: \"text\n" - " \tlines\"\n" - "block: |\n" - " text\n" - " \tlines\n"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 3); - YAML_ASSERT(doc["plain"] == "text lines"); - YAML_ASSERT(doc["quoted"] == "text lines"); - YAML_ASSERT(doc["block"] == "text\n \tlines\n"); - return true; - } - - // 6.5 - TEST EmptyLines() - { - std::string input = - "Folding:\n" - " \"Empty line\n" - " \t\n" - " as a line feed\"\n" - "Chomping: |\n" - " Clipped empty lines\n" - " "; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["Folding"] == "Empty line\nas a line feed"); - YAML_ASSERT(doc["Chomping"] == "Clipped empty lines\n"); - return true; - } - - // 6.6 - TEST LineFolding() - { - std::string input = - ">-\n" - " trimmed\n" - " \n" - " \n" - "\n" - " as\n" - " space"; - - PARSE(doc, input); - YAML_ASSERT(doc == "trimmed\n\n\nas space"); - return true; - } - - // 6.7 - TEST BlockFolding() - { - std::string input = - ">\n" - " foo \n" - " \n" - " \t bar\n" - "\n" - " baz\n"; - - PARSE(doc, input); - YAML_ASSERT(doc == "foo \n\n\t bar\n\nbaz\n"); - return true; - } - - // 6.8 - TEST FlowFolding() - { - std::string input = - "\"\n" - " foo \n" - " \n" - " \t bar\n" - "\n" - " baz\n" - "\""; - - PARSE(doc, input); - YAML_ASSERT(doc == " foo\nbar\nbaz "); - return true; - } - - // 6.9 - TEST SeparatedComment() - { - std::string input = - "key: # Comment\n" - " value"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["key"] == "value"); - return true; - } - - // 6.10 - TEST CommentLines() - { - std::string input = - " # Comment\n" - " \n" - "\n"; - std::stringstream stream(input); - YAML::Parser parser(stream); - - YAML_ASSERT(!parser); - return true; - } - - // 6.11 - TEST MultiLineComments() - { - std::string input = - "key: # Comment\n" - " # lines\n" - " value\n" - "\n"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["key"] == "value"); - return true; - } - - struct StringMap { - typedef std::map Map; - Map _; - }; - - bool operator == (const StringMap& m, const StringMap& n) { - return m._ == n._; - } - - void operator >> (const YAML::Node& node, StringMap& m) { - m._.clear(); - for(YAML::Iterator it=node.begin();it!=node.end();++it) { - std::string key = it.first(); - std::string value = it.second(); - m._[key] = value; - } - } - - - // 6.12 - TEST SeparationSpacesII() - { - std::string input = - "{ first: Sammy, last: Sosa }:\n" - "# Statistics:\n" - " hr: # Home runs\n" - " 65\n" - " avg: # Average\n" - " 0.278"; - - PARSE(doc, input); - StringMap key; - key._["first"] = "Sammy"; - key._["last"] = "Sosa"; - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc[key].size() == 2); - YAML_ASSERT(doc[key]["hr"] == 65); - YAML_ASSERT(doc[key]["avg"] == "0.278"); - return true; - } - - // TODO: 6.13 - 6.17 directives - // TODO: 6.18 - 6.28 tags - - // 6.29 - TEST NodeAnchors() - { - std::string input = - "First occurrence: &anchor Value\n" - "Second occurrence: *anchor"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["First occurrence"] == "Value"); - YAML_ASSERT(doc["Second occurrence"] == "Value"); - return true; - } - - // 7.1 - TEST AliasNodes() - { - std::string input = - "First occurrence: &anchor Foo\n" - "Second occurrence: *anchor\n" - "Override anchor: &anchor Bar\n" - "Reuse anchor: *anchor"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 4); - YAML_ASSERT(doc["First occurrence"] == "Foo"); - YAML_ASSERT(doc["Second occurrence"] == "Foo"); - YAML_ASSERT(doc["Override anchor"] == "Bar"); - YAML_ASSERT(doc["Reuse anchor"] == "Bar"); - return true; - } - - // 7.2 - TEST EmptyNodes() - { - std::string input = - "{\n" - " foo : !!str,\n" - " !!str : bar,\n" - "}"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(doc["foo"] == ""); // TODO: check tag - YAML_ASSERT(doc[""] == "bar"); - return true; - } - - // 7.3 - TEST CompletelyEmptyNodes() - { - std::string input = - "{\n" - " ? foo :,\n" - " : bar,\n" - "}\n"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 2); - YAML_ASSERT(IsNull(doc["foo"])); - YAML_ASSERT(doc[YAML::Null] == "bar"); - return true; - } - - // 7.4 - TEST DoubleQuotedImplicitKeys() - { - std::string input = - "\"implicit block key\" : [\n" - " \"implicit flow key\" : value,\n" - " ]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["implicit block key"].size() == 1); - YAML_ASSERT(doc["implicit block key"][0].size() == 1); - YAML_ASSERT(doc["implicit block key"][0]["implicit flow key"] == "value"); - return true; - } - - // 7.5 - TEST DoubleQuotedLineBreaks() - { - std::string input = - "\"folded \n" - "to a space,\t\n" - " \n" - "to a line feed, or \t\\\n" - " \\ \tnon-content\""; - - PARSE(doc, input); - YAML_ASSERT(doc == "folded to a space,\nto a line feed, or \t \tnon-content"); - return true; - } - - // 7.6 - TEST DoubleQuotedLines() - { - std::string input = - "\" 1st non-empty\n" - "\n" - " 2nd non-empty \n" - "\t3rd non-empty \""; - - PARSE(doc, input); - YAML_ASSERT(doc == " 1st non-empty\n2nd non-empty 3rd non-empty "); - return true; - } - - // 7.7 - TEST SingleQuotedCharacters() - { - std::string input = " 'here''s to \"quotes\"'"; - - PARSE(doc, input); - YAML_ASSERT(doc == "here's to \"quotes\""); - return true; - } - - // 7.8 - TEST SingleQuotedImplicitKeys() - { - std::string input = - "'implicit block key' : [\n" - " 'implicit flow key' : value,\n" - " ]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["implicit block key"].size() == 1); - YAML_ASSERT(doc["implicit block key"][0].size() == 1); - YAML_ASSERT(doc["implicit block key"][0]["implicit flow key"] == "value"); - return true; - } - - // 7.9 - TEST SingleQuotedLines() - { - std::string input = - "' 1st non-empty\n" - "\n" - " 2nd non-empty \n" - "\t3rd non-empty '"; - - PARSE(doc, input); - YAML_ASSERT(doc == " 1st non-empty\n2nd non-empty 3rd non-empty "); - return true; - } - - // 7.10 - TEST PlainCharacters() - { - std::string input = - "# Outside flow collection:\n" - "- ::vector\n" - "- \": - ()\"\n" - "- Up, up, and away!\n" - "- -123\n" - "- http://example.com/foo#bar\n" - "# Inside flow collection:\n" - "- [ ::vector,\n" - " \": - ()\",\n" - " \"Up, up, and away!\",\n" - " -123,\n" - " http://example.com/foo#bar ]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 6); - YAML_ASSERT(doc[0] == "::vector"); - YAML_ASSERT(doc[1] == ": - ()"); - YAML_ASSERT(doc[2] == "Up, up, and away!"); - YAML_ASSERT(doc[3] == -123); - YAML_ASSERT(doc[4] == "http://example.com/foo#bar"); - YAML_ASSERT(doc[5].size() == 5); - YAML_ASSERT(doc[5][0] == "::vector"); - YAML_ASSERT(doc[5][1] == ": - ()"); - YAML_ASSERT(doc[5][2] == "Up, up, and away!"); - YAML_ASSERT(doc[5][3] == -123); - YAML_ASSERT(doc[5][4] == "http://example.com/foo#bar"); - return true; - } - - // 7.11 - TEST PlainImplicitKeys() - { - std::string input = - "implicit block key : [\n" - " implicit flow key : value,\n" - " ]"; - - PARSE(doc, input); - YAML_ASSERT(doc.size() == 1); - YAML_ASSERT(doc["implicit block key"].size() == 1); - YAML_ASSERT(doc["implicit block key"][0].size() == 1); - YAML_ASSERT(doc["implicit block key"][0]["implicit flow key"] == "value"); - return true; - } - - // 7.12 - TEST PlainLines() - { - std::string input = - "1st non-empty\n" - "\n" - " 2nd non-empty \n" - "\t3rd non-empty"; - - PARSE(doc, input); - YAML_ASSERT(doc == "1st non-empty\n2nd non-empty 3rd non-empty"); - return true; - } - } - - bool RunSpecTests() - { - int passed = 0; - int total = 0; - RunSpecTest(&Spec::SeqScalars, "2.1", "Sequence of Scalars", passed, total); - RunSpecTest(&Spec::MappingScalarsToScalars, "2.2", "Mapping Scalars to Scalars", passed, total); - RunSpecTest(&Spec::MappingScalarsToSequences, "2.3", "Mapping Scalars to Sequences", passed, total); - RunSpecTest(&Spec::SequenceOfMappings, "2.4", "Sequence of Mappings", passed, total); - RunSpecTest(&Spec::SequenceOfSequences, "2.5", "Sequence of Sequences", passed, total); - RunSpecTest(&Spec::MappingOfMappings, "2.6", "Mapping of Mappings", passed, total); - RunSpecTest(&Spec::TwoDocumentsInAStream, "2.7", "Two Documents in a Stream", passed, total); - RunSpecTest(&Spec::PlayByPlayFeed, "2.8", "Play by Play Feed from a Game", passed, total); - RunSpecTest(&Spec::SingleDocumentWithTwoComments, "2.9", "Single Document with Two Comments", passed, total); - RunSpecTest(&Spec::SimpleAnchor, "2.10", "Node for \"Sammy Sosa\" appears twice in this document", passed, total); - RunSpecTest(&Spec::MappingBetweenSequences, "2.11", "Mapping between Sequences", passed, total); - RunSpecTest(&Spec::CompactNestedMapping, "2.12", "Compact Nested Mapping", passed, total); - RunSpecTest(&Spec::InLiteralsNewlinesArePreserved, "2.13", "In literals, newlines are preserved", passed, total); - RunSpecTest(&Spec::InFoldedScalarsNewlinesBecomeSpaces, "2.14", "In folded scalars, newlines become spaces", passed, total); - RunSpecTest(&Spec::FoldedNewlinesArePreservedForMoreIndentedAndBlankLines, "2.15", "Folded newlines are preserved for \"more indented\" and blank lines", passed, total); - RunSpecTest(&Spec::IndentationDeterminesScope, "2.16", "Indentation determines scope", passed, total); - RunSpecTest(&Spec::QuotedScalars, "2.17", "Quoted scalars", passed, total); - RunSpecTest(&Spec::MultiLineFlowScalars, "2.18", "Multi-line flow scalars", passed, total); - - RunSpecTest(&Spec::Invoice, "2.27", "Invoice", passed, total); - RunSpecTest(&Spec::LogFile, "2.28", "Log File", passed, total); - - RunSpecTest(&Spec::BlockStructureIndicators, "5.3", "Block Structure Indicators", passed, total); - RunSpecTest(&Spec::FlowStructureIndicators, "5.4", "Flow Structure Indicators", passed, total); - RunSpecTest(&Spec::NodePropertyIndicators, "5.6", "Node Property Indicators", passed, total); - RunSpecTest(&Spec::BlockScalarIndicators, "5.7", "Block Scalar Indicators", passed, total); - RunSpecTest(&Spec::QuotedScalarIndicators, "5.8", "Quoted Scalar Indicators", passed, total); - RunSpecTest(&Spec::LineBreakCharacters, "5.11", "Line Break Characters", passed, total); - RunSpecTest(&Spec::TabsAndSpaces, "5.12", "Tabs and Spaces", passed, total); - RunSpecTest(&Spec::EscapedCharacters, "5.13", "Escaped Characters", passed, total); - RunSpecTest(&Spec::InvalidEscapedCharacters, "5.14", "Invalid Escaped Characters", passed, total); - - RunSpecTest(&Spec::IndentationSpaces, "6.1", "Indentation Spaces", passed, total); - RunSpecTest(&Spec::IndentationIndicators, "6.2", "Indentation Indicators", passed, total); - RunSpecTest(&Spec::SeparationSpaces, "6.3", "Separation Spaces", passed, total); - RunSpecTest(&Spec::LinePrefixes, "6.4", "Line Prefixes", passed, total); - RunSpecTest(&Spec::EmptyLines, "6.5", "Empty Lines", passed, total); - RunSpecTest(&Spec::LineFolding, "6.6", "Line Folding", passed, total); - RunSpecTest(&Spec::BlockFolding, "6.7", "Block Folding", passed, total); - RunSpecTest(&Spec::FlowFolding, "6.8", "Flow Folding", passed, total); - RunSpecTest(&Spec::SeparatedComment, "6.9", "Separated Comment", passed, total); - RunSpecTest(&Spec::CommentLines, "6.10", "Comment Lines", passed, total); - RunSpecTest(&Spec::SeparationSpacesII, "6.11", "Separation Spaces", passed, total); - - RunSpecTest(&Spec::NodeAnchors, "6.29", "Node Anchors", passed, total); - - RunSpecTest(&Spec::AliasNodes, "7.1", "Alias Nodes", passed, total); - RunSpecTest(&Spec::EmptyNodes, "7.2", "Empty Nodes", passed, total); - RunSpecTest(&Spec::CompletelyEmptyNodes, "7.3", "Completely Empty Nodes", passed, total); - RunSpecTest(&Spec::DoubleQuotedImplicitKeys, "7.4", "Double Quoted Implicit Keys", passed, total); - RunSpecTest(&Spec::DoubleQuotedLineBreaks, "7.5", "Double Quoted Line Breaks", passed, total); - RunSpecTest(&Spec::DoubleQuotedLines, "7.6", "Double Quoted Lines", passed, total); - RunSpecTest(&Spec::SingleQuotedCharacters, "7.7", "Single Quoted Characters", passed, total); - RunSpecTest(&Spec::SingleQuotedImplicitKeys, "7.8", "Single Quoted Implicit Keys", passed, total); - RunSpecTest(&Spec::SingleQuotedLines, "7.9", "Single Quoted Lines", passed, total); - RunSpecTest(&Spec::PlainCharacters, "7.10", "Plain Characters", passed, total); - RunSpecTest(&Spec::PlainImplicitKeys, "7.11", "Plain Implicit Keys", passed, total); - RunSpecTest(&Spec::PlainLines, "7.12", "Plain Lines", passed, total); - - std::cout << "Spec tests: " << passed << "/" << total << " passed\n"; - return passed == total; - } - -} - diff --git a/yaml-reader/spectests.h b/yaml-reader/spectests.h deleted file mode 100644 index fcb1fb4..0000000 --- a/yaml-reader/spectests.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifndef SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -namespace Test { - bool RunSpecTests(); -} - -#endif // SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - diff --git a/yaml-reader/tests.cpp b/yaml-reader/tests.cpp deleted file mode 100644 index 492a5d1..0000000 --- a/yaml-reader/tests.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "tests.h" -#include "emittertests.h" -#include "parsertests.h" -#include "spectests.h" -#include "yaml.h" -#include -#include -#include -#include - -namespace Test -{ - void RunAll() - { - bool passed = true; - if(!RunParserTests()) - passed = false; - - if(!RunEmitterTests()) - passed = false; - - if(!RunSpecTests()) - passed = false; - - if(passed) - std::cout << "All tests passed!\n"; - } -} - diff --git a/yaml-reader/tests.h b/yaml-reader/tests.h deleted file mode 100644 index 0d39007..0000000 --- a/yaml-reader/tests.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#ifndef TESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define TESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -#include - -namespace Test { - void RunAll(); - - namespace Parser { - // scalar tests - void SimpleScalar(std::string& inputScalar, std::string& desiredOutput); - void MultiLineScalar(std::string& inputScalar, std::string& desiredOutput); - void LiteralScalar(std::string& inputScalar, std::string& desiredOutput); - void FoldedScalar(std::string& inputScalar, std::string& desiredOutput); - void ChompedFoldedScalar(std::string& inputScalar, std::string& desiredOutput); - void ChompedLiteralScalar(std::string& inputScalar, std::string& desiredOutput); - void FoldedScalarWithIndent(std::string& inputScalar, std::string& desiredOutput); - void ColonScalar(std::string& inputScalar, std::string& desiredOutput); - void QuotedScalar(std::string& inputScalar, std::string& desiredOutput); - void CommaScalar(std::string& inputScalar, std::string& desiredOutput); - void DashScalar(std::string& inputScalar, std::string& desiredOutput); - void URLScalar(std::string& inputScalar, std::string& desiredOutput); - - // misc tests - bool SimpleSeq(); - bool SimpleMap(); - bool FlowSeq(); - bool FlowMap(); - bool FlowMapWithOmittedKey(); - bool FlowMapWithOmittedValue(); - bool FlowMapWithSoloEntry(); - bool FlowMapEndingWithSoloEntry(); - bool QuotedSimpleKeys(); - bool CompressedMapAndSeq(); - bool NullBlockSeqEntry(); - bool NullBlockMapKey(); - bool NullBlockMapValue(); - bool SimpleAlias(); - bool AliasWithNull(); - bool AnchorInSimpleKey(); - bool AliasAsSimpleKey(); - bool ExplicitDoc(); - bool MultipleDocs(); - bool ExplicitEndDoc(); - bool MultipleDocsWithSomeExplicitIndicators(); - } -} - -#endif // TESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 diff --git a/yaml-reader/tests/aliased.yaml b/yaml-reader/tests/aliased.yaml deleted file mode 100644 index ca79a64..0000000 --- a/yaml-reader/tests/aliased.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- &list -- This document contains a recursive list. -- *list -...