2011-09-10 18:05:35 -05:00
#include "spectests.h"
2011-09-13 01:23:30 -05:00
#include "specexamples.h"
#include "yaml-cpp/yaml.h"
#define YAML_ASSERT(cond) do { if(!(cond)) return " Assert failed: " #cond; } while(false)
2011-09-10 18:05:35 -05:00
2011-09-12 22:55:37 -05:00
namespace Test
{
namespace Spec
2011-09-10 18:05:35 -05:00
{
2011-09-12 22:55:37 -05:00
// 2.1
2011-09-13 01:23:30 -05:00
TEST SeqScalars () {
YAML :: Node doc = YAML :: Parse ( ex2_1 );
YAML_ASSERT ( doc . Type () == YAML :: NodeType :: Sequence );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == "Ken Griffey" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.2
2011-09-13 01:23:30 -05:00
TEST MappingScalarsToScalars () {
YAML :: Node doc = YAML :: Parse ( ex2_2 );
YAML_ASSERT ( doc . Type () == YAML :: NodeType :: Map );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "hr" ]. as < std :: string > () == "65" );
YAML_ASSERT ( doc [ "avg" ]. as < std :: string > () == "0.278" );
YAML_ASSERT ( doc [ "rbi" ]. as < std :: string > () == "147" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.3
2011-09-13 01:23:30 -05:00
TEST MappingScalarsToSequences () {
YAML :: Node doc = YAML :: Parse ( ex2_3 );
YAML_ASSERT ( doc . Type () == YAML :: NodeType :: Map );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "american" ]. size () == 3 );
YAML_ASSERT ( doc [ "american" ][ 0 ]. as < std :: string > () == "Boston Red Sox" );
YAML_ASSERT ( doc [ "american" ][ 1 ]. as < std :: string > () == "Detroit Tigers" );
YAML_ASSERT ( doc [ "american" ][ 2 ]. as < std :: string > () == "New York Yankees" );
YAML_ASSERT ( doc [ "national" ]. size () == 3 );
YAML_ASSERT ( doc [ "national" ][ 0 ]. as < std :: string > () == "New York Mets" );
YAML_ASSERT ( doc [ "national" ][ 1 ]. as < std :: string > () == "Chicago Cubs" );
YAML_ASSERT ( doc [ "national" ][ 2 ]. as < std :: string > () == "Atlanta Braves" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.4
2011-09-13 01:23:30 -05:00
TEST SequenceOfMappings () {
YAML :: Node doc = YAML :: Parse ( ex2_4 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ 0 ]. size () == 3 );
YAML_ASSERT ( doc [ 0 ][ "name" ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ 0 ][ "hr" ]. as < std :: string > () == "65" );
YAML_ASSERT ( doc [ 0 ][ "avg" ]. as < std :: string > () == "0.278" );
YAML_ASSERT ( doc [ 1 ]. size () == 3 );
YAML_ASSERT ( doc [ 1 ][ "name" ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ 1 ][ "hr" ]. as < std :: string > () == "63" );
YAML_ASSERT ( doc [ 1 ][ "avg" ]. as < std :: string > () == "0.288" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.5
2011-09-13 01:23:30 -05:00
TEST SequenceOfSequences () {
YAML :: Node doc = YAML :: Parse ( ex2_5 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ 0 ]. size () == 3 );
YAML_ASSERT ( doc [ 0 ][ 0 ]. as < std :: string > () == "name" );
YAML_ASSERT ( doc [ 0 ][ 1 ]. as < std :: string > () == "hr" );
YAML_ASSERT ( doc [ 0 ][ 2 ]. as < std :: string > () == "avg" );
YAML_ASSERT ( doc [ 1 ]. size () == 3 );
YAML_ASSERT ( doc [ 1 ][ 0 ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ 1 ][ 1 ]. as < std :: string > () == "65" );
YAML_ASSERT ( doc [ 1 ][ 2 ]. as < std :: string > () == "0.278" );
YAML_ASSERT ( doc [ 2 ]. size () == 3 );
YAML_ASSERT ( doc [ 2 ][ 0 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ 2 ][ 1 ]. as < std :: string > () == "63" );
YAML_ASSERT ( doc [ 2 ][ 2 ]. as < std :: string > () == "0.288" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.6
2011-09-13 01:23:30 -05:00
TEST MappingOfMappings () {
YAML :: Node doc = YAML :: Parse ( ex2_6 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "Mark McGwire" ]. size () == 2 );
YAML_ASSERT ( doc [ "Mark McGwire" ][ "hr" ]. as < std :: string > () == "65" );
YAML_ASSERT ( doc [ "Mark McGwire" ][ "avg" ]. as < std :: string > () == "0.278" );
YAML_ASSERT ( doc [ "Sammy Sosa" ]. size () == 2 );
YAML_ASSERT ( doc [ "Sammy Sosa" ][ "hr" ]. as < std :: string > () == "63" );
YAML_ASSERT ( doc [ "Sammy Sosa" ][ "avg" ]. as < std :: string > () == "0.288" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.7
2011-09-13 01:23:30 -05:00
TEST TwoDocumentsInAStream () {
return " not written yet" ;
}
2011-09-12 22:55:37 -05:00
// 2.8
2011-09-13 01:23:30 -05:00
TEST PlayByPlayFeed () {
return " not written yet" ;
}
2011-09-12 22:55:37 -05:00
// 2.9
2011-09-13 01:23:30 -05:00
TEST SingleDocumentWithTwoComments () {
YAML :: Node doc = YAML :: Parse ( ex2_9 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "hr" ]. size () == 2 );
YAML_ASSERT ( doc [ "hr" ][ 0 ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ "hr" ][ 1 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ "rbi" ]. size () == 2 );
YAML_ASSERT ( doc [ "rbi" ][ 0 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ "rbi" ][ 1 ]. as < std :: string > () == "Ken Griffey" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.10
2011-09-13 01:23:30 -05:00
TEST SimpleAnchor () {
YAML :: Node doc = YAML :: Parse ( ex2_10 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "hr" ]. size () == 2 );
YAML_ASSERT ( doc [ "hr" ][ 0 ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ "hr" ][ 1 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ "rbi" ]. size () == 2 );
YAML_ASSERT ( doc [ "rbi" ][ 0 ]. as < std :: string > () == "Sammy Sosa" );
YAML_ASSERT ( doc [ "rbi" ][ 1 ]. as < std :: string > () == "Ken Griffey" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.11
2011-09-13 01:23:30 -05:00
TEST MappingBetweenSequences () {
YAML :: Node doc = YAML :: Parse ( ex2_11 );
std :: vector < std :: string > tigers_cubs ;
tigers_cubs . push_back ( "Detroit Tigers" );
tigers_cubs . push_back ( "Chicago cubs" );
std :: vector < std :: string > yankees_braves ;
yankees_braves . push_back ( "New York Yankees" );
yankees_braves . push_back ( "Atlanta Braves" );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ tigers_cubs ]. size () == 1 );
YAML_ASSERT ( doc [ tigers_cubs ][ 0 ]. as < std :: string > () == "2001-07-23" );
YAML_ASSERT ( doc [ yankees_braves ]. size () == 3 );
YAML_ASSERT ( doc [ yankees_braves ][ 0 ]. as < std :: string > () == "2001-07-02" );
YAML_ASSERT ( doc [ yankees_braves ][ 1 ]. as < std :: string > () == "2001-08-12" );
YAML_ASSERT ( doc [ yankees_braves ][ 2 ]. as < std :: string > () == "2001-08-14" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.12
2011-09-13 01:23:30 -05:00
TEST CompactNestedMapping () {
YAML :: Node doc = YAML :: Parse ( ex2_12 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ 0 ]. size () == 2 );
YAML_ASSERT ( doc [ 0 ][ "item" ]. as < std :: string > () == "Super Hoop" );
YAML_ASSERT ( doc [ 0 ][ "quantity" ]. as < int > () == 1 );
YAML_ASSERT ( doc [ 1 ]. size () == 2 );
YAML_ASSERT ( doc [ 1 ][ "item" ]. as < std :: string > () == "Basketball" );
YAML_ASSERT ( doc [ 1 ][ "quantity" ]. as < int > () == 4 );
YAML_ASSERT ( doc [ 2 ]. size () == 2 );
YAML_ASSERT ( doc [ 2 ][ "item" ]. as < std :: string > () == "Big Shoes" );
YAML_ASSERT ( doc [ 2 ][ "quantity" ]. as < int > () == 1 );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.13
2011-09-13 01:23:30 -05:00
TEST InLiteralsNewlinesArePreserved () {
YAML :: Node doc = YAML :: Parse ( ex2_13 );
YAML_ASSERT ( doc . as < std :: string > () ==
" \\ //|| \\ /|| \n "
"// || ||__" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.14
2011-09-13 01:23:30 -05:00
TEST InFoldedScalarsNewlinesBecomeSpaces () {
YAML :: Node doc = YAML :: Parse ( ex2_14 );
YAML_ASSERT ( doc . as < std :: string > () == "Mark McGwire's year was crippled by a knee injury." );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.15
2011-09-13 01:23:30 -05:00
TEST FoldedNewlinesArePreservedForMoreIndentedAndBlankLines () {
YAML :: Node doc = YAML :: Parse ( ex2_15 );
YAML_ASSERT ( doc . as < std :: string > () ==
"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 ;
}
2011-09-12 22:55:37 -05:00
// 2.16
2011-09-13 01:23:30 -05:00
TEST IndentationDeterminesScope () {
YAML :: Node doc = YAML :: Parse ( ex2_16 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "name" ]. as < std :: string > () == "Mark McGwire" );
YAML_ASSERT ( doc [ "accomplishment" ]. as < std :: string > () == "Mark set a major league home run record in 1998. \n " );
YAML_ASSERT ( doc [ "stats" ]. as < std :: string > () == "65 Home Runs \n 0.278 Batting Average \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.17
2011-09-13 01:23:30 -05:00
TEST QuotedScalars () {
YAML :: Node doc = YAML :: Parse ( ex2_17 );
YAML_ASSERT ( doc . size () == 6 );
YAML_ASSERT ( doc [ "unicode" ]. as < std :: string > () == "Sosa did fine. \xe2\x98\xba " );
YAML_ASSERT ( doc [ "control" ]. as < std :: string > () == " \b 1998 \t 1999 \t 2000 \n " );
YAML_ASSERT ( doc [ "hex esc" ]. as < std :: string > () == " \x0d\x0a is \r\n " );
YAML_ASSERT ( doc [ "single" ]. as < std :: string > () == " \" Howdy! \" he cried." );
YAML_ASSERT ( doc [ "quoted" ]. as < std :: string > () == " # Not a 'comment'." );
YAML_ASSERT ( doc [ "tie-fighter" ]. as < std :: string > () == "| \\ -*-/|" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 2.18
2011-09-13 01:23:30 -05:00
TEST MultiLineFlowScalars () {
YAML :: Node doc = YAML :: Parse ( ex2_18 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "plain" ]. as < std :: string > () == "This unquoted scalar spans many lines." );
YAML_ASSERT ( doc [ "quoted" ]. as < std :: string > () == "So does this quoted scalar. \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// TODO: 2.19 - 2.22 schema tags
// 2.23
TEST VariousExplicitTags () { return " not written yet" ; }
// 2.24
TEST GlobalTags () { return " not written yet" ; }
// 2.25
TEST UnorderedSets () { return " not written yet" ; }
// 2.26
TEST OrderedMappings () { return " not written yet" ; }
// 2.27
TEST Invoice () { return " not written yet" ; }
// 2.28
TEST LogFile () { return " not written yet" ; }
// TODO: 5.1 - 5.2 BOM
// 5.3
2011-09-13 01:28:32 -05:00
TEST BlockStructureIndicators () {
YAML :: Node doc = YAML :: Parse ( ex5_3 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "sequence" ]. size () == 2 );
YAML_ASSERT ( doc [ "sequence" ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ "sequence" ][ 1 ]. as < std :: string > () == "two" );
YAML_ASSERT ( doc [ "mapping" ]. size () == 2 );
YAML_ASSERT ( doc [ "mapping" ][ "sky" ]. as < std :: string > () == "blue" );
YAML_ASSERT ( doc [ "mapping" ][ "sea" ]. as < std :: string > () == "green" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.4
2011-09-13 01:28:32 -05:00
TEST FlowStructureIndicators () {
YAML :: Node doc = YAML :: Parse ( ex5_4 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "sequence" ]. size () == 2 );
YAML_ASSERT ( doc [ "sequence" ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ "sequence" ][ 1 ]. as < std :: string > () == "two" );
YAML_ASSERT ( doc [ "mapping" ]. size () == 2 );
YAML_ASSERT ( doc [ "mapping" ][ "sky" ]. as < std :: string > () == "blue" );
YAML_ASSERT ( doc [ "mapping" ][ "sea" ]. as < std :: string > () == "green" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.5
2011-09-13 01:28:32 -05:00
TEST CommentIndicator () {
YAML :: Node doc = YAML :: Parse ( ex5_5 );
YAML_ASSERT ( doc . Type () == YAML :: NodeType :: Null );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.6
2011-09-13 01:28:32 -05:00
TEST NodePropertyIndicators () {
YAML :: Node doc = YAML :: Parse ( ex5_6 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "anchored" ]. as < std :: string > () == "value" ); // TODO: assert tag
YAML_ASSERT ( doc [ "alias" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.7
2011-09-13 01:28:32 -05:00
TEST BlockScalarIndicators () {
YAML :: Node doc = YAML :: Parse ( ex5_7 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "literal" ]. as < std :: string > () == "some \n text \n " );
YAML_ASSERT ( doc [ "folded" ]. as < std :: string > () == "some text \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.8
2011-09-13 01:28:32 -05:00
TEST QuotedScalarIndicators () {
YAML :: Node doc = YAML :: Parse ( ex5_8 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "single" ]. as < std :: string > () == "text" );
YAML_ASSERT ( doc [ "double" ]. as < std :: string > () == "text" );
return true ;
}
2011-09-12 22:55:37 -05:00
// TODO: 5.9 directive
// TODO: 5.10 reserved indicator
// 5.11
2011-09-13 01:28:32 -05:00
TEST LineBreakCharacters () {
YAML :: Node doc = YAML :: Parse ( ex5_11 );
YAML_ASSERT ( doc . as < std :: string > () == "Line break (no glyph) \n Line break (glyphed) \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.12
2011-09-13 01:28:32 -05:00
TEST TabsAndSpaces () {
YAML :: Node doc = YAML :: Parse ( ex5_12 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "quoted" ]. as < std :: string > () == "Quoted \t " );
YAML_ASSERT ( doc [ "block" ]. as < std :: string > () ==
"void main() { \n "
" \t printf( \" Hello, world! \\ n \" ); \n "
"}" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 5.13
2011-09-13 01:28:32 -05:00
TEST EscapedCharacters () {
YAML :: Node doc = YAML :: Parse ( ex5_13 );
YAML_ASSERT ( doc . as < std :: string > () == "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 ;
}
2011-09-12 22:55:37 -05:00
// 5.14
2011-09-13 01:28:32 -05:00
TEST InvalidEscapedCharacters () {
try {
YAML :: Parse ( ex5_14 );
} catch ( const YAML :: ParserException & e ) {
YAML_ASSERT ( e . msg == std :: string ( YAML :: ErrorMsg :: INVALID_ESCAPE ) + "c" );
return true ;
}
return false ;
}
2011-09-12 22:55:37 -05:00
// 6.1
2011-09-13 01:36:27 -05:00
TEST IndentationSpaces () {
YAML :: Node doc = YAML :: Parse ( ex6_1 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "Not indented" ]. size () == 2 );
YAML_ASSERT ( doc [ "Not indented" ][ "By one space" ]. as < std :: string > () == "By four \n spaces \n " );
YAML_ASSERT ( doc [ "Not indented" ][ "Flow style" ]. size () == 3 );
YAML_ASSERT ( doc [ "Not indented" ][ "Flow style" ][ 0 ]. as < std :: string > () == "By two" );
YAML_ASSERT ( doc [ "Not indented" ][ "Flow style" ][ 1 ]. as < std :: string > () == "Also by two" );
YAML_ASSERT ( doc [ "Not indented" ][ "Flow style" ][ 2 ]. as < std :: string > () == "Still by two" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.2
2011-09-13 01:36:27 -05:00
TEST IndentationIndicators () {
YAML :: Node doc = YAML :: Parse ( ex6_2 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "a" ]. size () == 2 );
YAML_ASSERT ( doc [ "a" ][ 0 ]. as < std :: string > () == "b" );
YAML_ASSERT ( doc [ "a" ][ 1 ]. size () == 2 );
YAML_ASSERT ( doc [ "a" ][ 1 ][ 0 ]. as < std :: string > () == "c" );
YAML_ASSERT ( doc [ "a" ][ 1 ][ 1 ]. as < std :: string > () == "d" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.3
2011-09-13 01:36:27 -05:00
TEST SeparationSpaces () {
YAML :: Node doc = YAML :: Parse ( ex6_3 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ "foo" ]. as < std :: string > () == "bar" );
YAML_ASSERT ( doc [ 1 ]. size () == 2 );
YAML_ASSERT ( doc [ 1 ][ 0 ]. as < std :: string > () == "baz" );
YAML_ASSERT ( doc [ 1 ][ 1 ]. as < std :: string > () == "baz" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.4
2011-09-13 01:36:27 -05:00
TEST LinePrefixes () {
YAML :: Node doc = YAML :: Parse ( ex6_4 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "plain" ]. as < std :: string > () == "text lines" );
YAML_ASSERT ( doc [ "quoted" ]. as < std :: string > () == "text lines" );
YAML_ASSERT ( doc [ "block" ]. as < std :: string > () == "text \n \t lines \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.5
2011-09-13 01:36:27 -05:00
TEST EmptyLines () {
YAML :: Node doc = YAML :: Parse ( ex6_5 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "Folding" ]. as < std :: string > () == "Empty line \n as a line feed" );
YAML_ASSERT ( doc [ "Chomping" ]. as < std :: string > () == "Clipped empty lines \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.6
2011-09-13 01:36:27 -05:00
TEST LineFolding () {
YAML :: Node doc = YAML :: Parse ( ex6_6 );
YAML_ASSERT ( doc . as < std :: string > () == "trimmed \n\n\n as space" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.7
2011-09-13 01:36:27 -05:00
TEST BlockFolding () {
YAML :: Node doc = YAML :: Parse ( ex6_7 );
YAML_ASSERT ( doc . as < std :: string > () == "foo \n\n\t bar \n\n baz \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.8
2011-09-13 01:36:27 -05:00
TEST FlowFolding () {
YAML :: Node doc = YAML :: Parse ( ex6_8 );
YAML_ASSERT ( doc . as < std :: string > () == " foo \n bar \n baz " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.9
2011-09-13 01:36:27 -05:00
TEST SeparatedComment () {
YAML :: Node doc = YAML :: Parse ( ex6_9 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "key" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.10
2011-09-13 01:36:27 -05:00
TEST CommentLines () {
YAML :: Node doc = YAML :: Parse ( ex6_10 );
YAML_ASSERT ( doc . Type () == YAML :: NodeType :: Null );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.11
2011-09-13 01:36:27 -05:00
TEST MultiLineComments () {
YAML :: Node doc = YAML :: Parse ( ex6_11 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "key" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.12
2011-09-13 01:36:27 -05:00
TEST SeparationSpacesII () {
YAML :: Node doc = YAML :: Parse ( ex6_12 );
std :: map < std :: string , std :: string > sammy ;
sammy [ "first" ] = "Sammy" ;
sammy [ "last" ] = "Sosa" ;
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ sammy ]. size () == 2 );
YAML_ASSERT ( doc [ sammy ][ "hr" ]. as < int > () == 65 );
YAML_ASSERT ( doc [ sammy ][ "avg" ]. as < std :: string > () == "0.278" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.13
2011-09-13 01:36:27 -05:00
TEST ReservedDirectives () {
YAML :: Node doc = YAML :: Parse ( ex6_13 );
YAML_ASSERT ( doc . as < std :: string > () == "foo" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.14
2011-09-13 01:36:27 -05:00
TEST YAMLDirective () {
YAML :: Node doc = YAML :: Parse ( ex6_14 );
YAML_ASSERT ( doc . as < std :: string > () == "foo" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 6.15
2011-09-13 01:36:27 -05:00
TEST InvalidRepeatedYAMLDirective () {
try {
YAML :: Parse ( ex6_15 );
} catch ( const YAML :: ParserException & e ) {
YAML_ASSERT ( e . msg == YAML :: ErrorMsg :: REPEATED_YAML_DIRECTIVE );
return true ;
}
return " No exception was thrown" ;
}
2011-09-12 22:55:37 -05:00
// 6.16
TEST TagDirective () { return " not written yet" ; }
// 6.17
TEST InvalidRepeatedTagDirective () { return " not written yet" ; }
// 6.18
TEST PrimaryTagHandle () { return " not written yet" ; }
// 6.19
TEST SecondaryTagHandle () { return " not written yet" ; }
// 6.20
TEST TagHandles () { return " not written yet" ; }
// 6.21
TEST LocalTagPrefix () { return " not written yet" ; }
// 6.22
TEST GlobalTagPrefix () { return " not written yet" ; }
// 6.23
TEST NodeProperties () { return " not written yet" ; }
// 6.24
TEST VerbatimTags () { return " not written yet" ; }
// 6.25
TEST InvalidVerbatimTags () { return " not written yet" ; }
// 6.26
TEST TagShorthands () { return " not written yet" ; }
// 6.27
TEST InvalidTagShorthands () { return " not written yet" ; }
// 6.28
TEST NonSpecificTags () { return " not written yet" ; }
// 6.29
2011-09-13 01:36:27 -05:00
TEST NodeAnchors () {
YAML :: Node doc = YAML :: Parse ( ex6_29 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "First occurrence" ]. as < std :: string > () == "Value" );
YAML_ASSERT ( doc [ "Second occurrence" ]. as < std :: string > () == "Value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.1
2011-09-13 01:46:42 -05:00
TEST AliasNodes () {
YAML :: Node doc = YAML :: Parse ( ex7_1 );
YAML_ASSERT ( doc . size () == 4 );
YAML_ASSERT ( doc [ "First occurrence" ]. as < std :: string > () == "Foo" );
YAML_ASSERT ( doc [ "Second occurrence" ]. as < std :: string > () == "Foo" );
YAML_ASSERT ( doc [ "Override anchor" ]. as < std :: string > () == "Bar" );
YAML_ASSERT ( doc [ "Reuse anchor" ]. as < std :: string > () == "Bar" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.2
TEST EmptyNodes () { return " not written yet" ; }
// 7.3
2011-09-13 01:46:42 -05:00
TEST CompletelyEmptyNodes () {
YAML :: Node doc = YAML :: Parse ( ex7_3 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "foo" ]. Type () == YAML :: NodeType :: Null );
2011-09-13 02:03:56 -05:00
YAML_ASSERT ( doc [ YAML :: Null ]. as < std :: string > () == "bar" );
2011-09-13 01:46:42 -05:00
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.4
2011-09-13 01:46:42 -05:00
TEST DoubleQuotedImplicitKeys () {
YAML :: Node doc = YAML :: Parse ( ex7_4 );
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" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.5
2011-09-13 01:46:42 -05:00
TEST DoubleQuotedLineBreaks () {
YAML :: Node doc = YAML :: Parse ( ex7_5 );
YAML_ASSERT ( doc . as < std :: string > () == "folded to a space, \n to a line feed, or \t \t non-content" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.6
2011-09-13 01:46:42 -05:00
TEST DoubleQuotedLines () {
YAML :: Node doc = YAML :: Parse ( ex7_6 );
YAML_ASSERT ( doc . as < std :: string > () == " 1st non-empty \n 2nd non-empty 3rd non-empty " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.7
2011-09-13 01:46:42 -05:00
TEST SingleQuotedCharacters () {
YAML :: Node doc = YAML :: Parse ( ex7_7 );
YAML_ASSERT ( doc . as < std :: string > () == "here's to \" quotes \" " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.8
2011-09-13 01:46:42 -05:00
TEST SingleQuotedImplicitKeys () {
YAML :: Node doc = YAML :: Parse ( ex7_8 );
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" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.9
2011-09-13 01:46:42 -05:00
TEST SingleQuotedLines () {
YAML :: Node doc = YAML :: Parse ( ex7_9 );
YAML_ASSERT ( doc . as < std :: string > () == " 1st non-empty \n 2nd non-empty 3rd non-empty " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.10
2011-09-13 01:46:42 -05:00
TEST PlainCharacters () {
YAML :: Node doc = YAML :: Parse ( ex7_10 );
YAML_ASSERT ( doc . size () == 6 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "::vector" );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == ": - ()" );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == "Up, up, and away!" );
YAML_ASSERT ( doc [ 3 ]. as < int > () == - 123 );
YAML_ASSERT ( doc [ 4 ]. as < std :: string > () == "http://example.com/foo#bar" );
YAML_ASSERT ( doc [ 5 ]. size () == 5 );
YAML_ASSERT ( doc [ 5 ][ 0 ]. as < std :: string > () == "::vector" );
YAML_ASSERT ( doc [ 5 ][ 1 ]. as < std :: string > () == ": - ()" );
YAML_ASSERT ( doc [ 5 ][ 2 ]. as < std :: string > () == "Up, up, and away!" );
YAML_ASSERT ( doc [ 5 ][ 3 ]. as < int > () == - 123 );
YAML_ASSERT ( doc [ 5 ][ 4 ]. as < std :: string > () == "http://example.com/foo#bar" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.11
2011-09-13 01:46:42 -05:00
TEST PlainImplicitKeys () {
YAML :: Node doc = YAML :: Parse ( ex7_11 );
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" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.12
2011-09-13 01:46:42 -05:00
TEST PlainLines () {
YAML :: Node doc = YAML :: Parse ( ex7_12 );
YAML_ASSERT ( doc . as < std :: string > () == "1st non-empty \n 2nd non-empty 3rd non-empty" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.13
2011-09-13 01:46:42 -05:00
TEST FlowSequence () {
YAML :: Node doc = YAML :: Parse ( ex7_13 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ 0 ]. size () == 2 );
YAML_ASSERT ( doc [ 0 ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ 0 ][ 1 ]. as < std :: string > () == "two" );
YAML_ASSERT ( doc [ 1 ]. size () == 2 );
YAML_ASSERT ( doc [ 1 ][ 0 ]. as < std :: string > () == "three" );
YAML_ASSERT ( doc [ 1 ][ 1 ]. as < std :: string > () == "four" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.14
2011-09-13 01:46:42 -05:00
TEST FlowSequenceEntries () {
YAML :: Node doc = YAML :: Parse ( ex7_14 );
YAML_ASSERT ( doc . size () == 5 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "double quoted" );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == "single quoted" );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == "plain text" );
YAML_ASSERT ( doc [ 3 ]. size () == 1 );
YAML_ASSERT ( doc [ 3 ][ 0 ]. as < std :: string > () == "nested" );
YAML_ASSERT ( doc [ 4 ]. size () == 1 );
YAML_ASSERT ( doc [ 4 ][ "single" ]. as < std :: string > () == "pair" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.15
2011-09-13 01:46:42 -05:00
TEST FlowMappings () {
YAML :: Node doc = YAML :: Parse ( ex7_15 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ 0 ]. size () == 2 );
YAML_ASSERT ( doc [ 0 ][ "one" ]. as < std :: string > () == "two" );
YAML_ASSERT ( doc [ 0 ][ "three" ]. as < std :: string > () == "four" );
YAML_ASSERT ( doc [ 1 ]. size () == 2 );
YAML_ASSERT ( doc [ 1 ][ "five" ]. as < std :: string > () == "six" );
YAML_ASSERT ( doc [ 1 ][ "seven" ]. as < std :: string > () == "eight" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.16
2011-09-13 01:46:42 -05:00
TEST FlowMappingEntries () {
YAML :: Node doc = YAML :: Parse ( ex7_16 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "explicit" ]. as < std :: string > () == "entry" );
YAML_ASSERT ( doc [ "implicit" ]. as < std :: string > () == "entry" );
2011-09-13 02:03:56 -05:00
YAML_ASSERT ( doc [ YAML :: Null ]. Type () == YAML :: NodeType :: Null );
2011-09-13 01:46:42 -05:00
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.17
2011-09-13 01:46:42 -05:00
TEST FlowMappingSeparateValues () {
YAML :: Node doc = YAML :: Parse ( ex7_17 );
YAML_ASSERT ( doc . size () == 4 );
YAML_ASSERT ( doc [ "unquoted" ]. as < std :: string > () == "separate" );
YAML_ASSERT ( doc [ "http://foo.com" ]. Type () == YAML :: NodeType :: Null );
YAML_ASSERT ( doc [ "omitted value" ]. Type () == YAML :: NodeType :: Null );
2011-09-13 02:03:56 -05:00
YAML_ASSERT ( doc [ YAML :: Null ]. as < std :: string > () == "omitted key" );
2011-09-13 01:46:42 -05:00
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.18
2011-09-13 01:46:42 -05:00
TEST FlowMappingAdjacentValues () {
YAML :: Node doc = YAML :: Parse ( ex7_18 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "adjacent" ]. as < std :: string > () == "value" );
YAML_ASSERT ( doc [ "readable" ]. as < std :: string > () == "value" );
YAML_ASSERT ( doc [ "empty" ]. Type () == YAML :: NodeType :: Null );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.19
2011-09-13 01:46:42 -05:00
TEST SinglePairFlowMappings () {
YAML :: Node doc = YAML :: Parse ( ex7_19 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ "foo" ]. as < std :: string > () == "bar" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.20
2011-09-13 01:46:42 -05:00
TEST SinglePairExplicitEntry () {
YAML :: Node doc = YAML :: Parse ( ex7_20 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ "foo bar" ]. as < std :: string > () == "baz" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.21
2011-09-13 01:46:42 -05:00
TEST SinglePairImplicitEntries () {
YAML :: Node doc = YAML :: Parse ( ex7_21 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ 0 ][ "YAML" ]. as < std :: string > () == "separate" );
YAML_ASSERT ( doc [ 1 ]. size () == 1 );
YAML_ASSERT ( doc [ 1 ][ 0 ]. size () == 1 );
2011-09-13 02:03:56 -05:00
YAML_ASSERT ( doc [ 1 ][ 0 ][ YAML :: Null ]. as < std :: string > () == "empty key entry" );
2011-09-13 01:46:42 -05:00
YAML_ASSERT ( doc [ 2 ]. size () == 1 );
YAML_ASSERT ( doc [ 2 ][ 0 ]. size () == 1 );
std :: map < std :: string , std :: string > key ;
key [ "JSON" ] = "like" ;
YAML_ASSERT ( doc [ 2 ][ 0 ][ key ]. as < std :: string > () == "adjacent" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.22
2011-09-13 01:46:42 -05:00
TEST InvalidImplicitKeys () {
try {
YAML :: Parse ( ex7_22 );
} catch ( const YAML :: Exception & e ) {
if ( e . msg == YAML :: ErrorMsg :: END_OF_SEQ_FLOW )
return true ;
throw ;
}
return " no exception thrown" ;
}
2011-09-12 22:55:37 -05:00
// 7.23
2011-09-13 01:46:42 -05:00
TEST FlowContent () {
YAML :: Node doc = YAML :: Parse ( ex7_23 );
YAML_ASSERT ( doc . size () == 5 );
YAML_ASSERT ( doc [ 0 ]. size () == 2 );
YAML_ASSERT ( doc [ 0 ][ 0 ]. as < std :: string > () == "a" );
YAML_ASSERT ( doc [ 0 ][ 1 ]. as < std :: string > () == "b" );
YAML_ASSERT ( doc [ 1 ]. size () == 1 );
YAML_ASSERT ( doc [ 1 ][ "a" ]. as < std :: string > () == "b" );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == "a" );
YAML_ASSERT ( doc [ 3 ]. as < char > () == 'b' );
YAML_ASSERT ( doc [ 4 ]. as < std :: string > () == "c" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 7.24
TEST FlowNodes () { return " not written yet" ; }
2011-09-13 01:56:44 -05:00
2011-09-12 22:55:37 -05:00
// 8.1
2011-09-13 01:56:44 -05:00
TEST BlockScalarHeader () {
YAML :: Node doc = YAML :: Parse ( ex8_1 );
YAML_ASSERT ( doc . size () == 4 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "literal \n " );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == " folded \n " );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == "keep \n\n " );
YAML_ASSERT ( doc [ 3 ]. as < std :: string > () == " strip" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.2
2011-09-13 01:56:44 -05:00
TEST BlockIndentationHeader () {
YAML :: Node doc = YAML :: Parse ( ex8_2 );
YAML_ASSERT ( doc . size () == 4 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "detected \n " );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == " \n\n # detected \n " );
YAML_ASSERT ( doc [ 2 ]. as < std :: string > () == " explicit \n " );
YAML_ASSERT ( doc [ 3 ]. as < std :: string > () == " \t\n detected \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.3
2011-09-13 01:56:44 -05:00
TEST InvalidBlockScalarIndentationIndicators () {
{
bool threw = false ;
try {
YAML :: Parse ( ex8_3a );
} catch ( const YAML :: Exception & e ) {
if ( e . msg != YAML :: ErrorMsg :: END_OF_SEQ )
throw ;
threw = true ;
}
if ( ! threw )
return " no exception thrown for less indented auto-detecting indentation for a literal block scalar" ;
}
{
bool threw = false ;
try {
YAML :: Parse ( ex8_3b );
} catch ( const YAML :: Exception & e ) {
if ( e . msg != YAML :: ErrorMsg :: END_OF_SEQ )
throw ;
threw = true ;
}
if ( ! threw )
return " no exception thrown for less indented auto-detecting indentation for a folded block scalar" ;
}
{
bool threw = false ;
try {
YAML :: Parse ( ex8_3c );
} catch ( const YAML :: Exception & e ) {
if ( e . msg != YAML :: ErrorMsg :: END_OF_SEQ )
throw ;
threw = true ;
}
if ( ! threw )
return " no exception thrown for less indented explicit indentation for a literal block scalar" ;
}
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.4
2011-09-13 01:56:44 -05:00
TEST ChompingFinalLineBreak () {
YAML :: Node doc = YAML :: Parse ( ex8_4 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "strip" ]. as < std :: string > () == "text" );
YAML_ASSERT ( doc [ "clip" ]. as < std :: string > () == "text \n " );
YAML_ASSERT ( doc [ "keep" ]. as < std :: string > () == "text \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.5
2011-09-13 01:56:44 -05:00
TEST ChompingTrailingLines () {
YAML :: Node doc = YAML :: Parse ( ex8_5 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "strip" ]. as < std :: string > () == "# text" );
YAML_ASSERT ( doc [ "clip" ]. as < std :: string > () == "# text \n " );
YAML_ASSERT ( doc [ "keep" ]. as < std :: string > () == "# text \n " ); // Note: I believe this is a bug in the YAML spec - it should be "# text\n\n"
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.6
2011-09-13 01:56:44 -05:00
TEST EmptyScalarChomping () {
YAML :: Node doc = YAML :: Parse ( ex8_6 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "strip" ]. as < std :: string > () == "" );
YAML_ASSERT ( doc [ "clip" ]. as < std :: string > () == "" );
YAML_ASSERT ( doc [ "keep" ]. as < std :: string > () == " \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.7
2011-09-13 01:56:44 -05:00
TEST LiteralScalar () {
YAML :: Node doc = YAML :: Parse ( ex8_7 );
YAML_ASSERT ( doc . as < std :: string > () == "literal \n\t text \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.8
2011-09-13 01:56:44 -05:00
TEST LiteralContent () {
YAML :: Node doc = YAML :: Parse ( ex8_8 );
YAML_ASSERT ( doc . as < std :: string > () == " \n\n literal \n \n\n text \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.9
2011-09-13 01:56:44 -05:00
TEST FoldedScalar () {
YAML :: Node doc = YAML :: Parse ( ex8_9 );
YAML_ASSERT ( doc . as < std :: string > () == "folded text \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.10
2011-09-13 01:56:44 -05:00
TEST FoldedLines () {
YAML :: Node doc = YAML :: Parse ( ex8_10 );
YAML_ASSERT ( doc . as < std :: string > () == " \n folded line \n next line \n * bullet \n\n * list \n * lines \n\n last line \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.11
2011-09-13 01:56:44 -05:00
TEST MoreIndentedLines () {
YAML :: Node doc = YAML :: Parse ( ex8_11 );
YAML_ASSERT ( doc . as < std :: string > () == " \n folded line \n next line \n * bullet \n\n * list \n * lines \n\n last line \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.12
2011-09-13 01:56:44 -05:00
TEST EmptySeparationLines () {
YAML :: Node doc = YAML :: Parse ( ex8_12 );
YAML_ASSERT ( doc . as < std :: string > () == " \n folded line \n next line \n * bullet \n\n * list \n * lines \n\n last line \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.13
2011-09-13 01:56:44 -05:00
TEST FinalEmptyLines () {
YAML :: Node doc = YAML :: Parse ( ex8_13 );
YAML_ASSERT ( doc . as < std :: string > () == " \n folded line \n next line \n * bullet \n\n * list \n * lines \n\n last line \n " );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.14
2011-09-13 01:56:44 -05:00
TEST BlockSequence () {
YAML :: Node doc = YAML :: Parse ( ex8_14 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "block sequence" ]. size () == 2 );
YAML_ASSERT ( doc [ "block sequence" ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ "block sequence" ][ 1 ]. size () == 1 );
YAML_ASSERT ( doc [ "block sequence" ][ 1 ][ "two" ]. as < std :: string > () == "three" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.15
2011-09-13 01:56:44 -05:00
TEST BlockSequenceEntryTypes () {
YAML :: Node doc = YAML :: Parse ( ex8_15 );
YAML_ASSERT ( doc . size () == 4 );
YAML_ASSERT ( doc [ 0 ]. Type () == YAML :: NodeType :: Null );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == "block node \n " );
YAML_ASSERT ( doc [ 2 ]. size () == 2 );
YAML_ASSERT ( doc [ 2 ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ 2 ][ 1 ]. as < std :: string > () == "two" );
YAML_ASSERT ( doc [ 3 ]. size () == 1 );
YAML_ASSERT ( doc [ 3 ][ "one" ]. as < std :: string > () == "two" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.16
2011-09-13 01:56:44 -05:00
TEST BlockMappings () {
YAML :: Node doc = YAML :: Parse ( ex8_16 );
YAML_ASSERT ( doc . size () == 1 );
YAML_ASSERT ( doc [ "block mapping" ]. size () == 1 );
YAML_ASSERT ( doc [ "block mapping" ][ "key" ]. as < std :: string > () == "value" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.17
2011-09-13 01:56:44 -05:00
TEST ExplicitBlockMappingEntries () {
YAML :: Node doc = YAML :: Parse ( ex8_17 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "explicit key" ]. Type () == YAML :: NodeType :: Null );
YAML_ASSERT ( doc [ "block key \n " ]. size () == 2 );
YAML_ASSERT ( doc [ "block key \n " ][ 0 ]. as < std :: string > () == "one" );
YAML_ASSERT ( doc [ "block key \n " ][ 1 ]. as < std :: string > () == "two" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.18
2011-09-13 01:56:44 -05:00
TEST ImplicitBlockMappingEntries () {
YAML :: Node doc = YAML :: Parse ( ex8_18 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ "plain key" ]. as < std :: string > () == "in-line value" );
2011-09-13 02:03:56 -05:00
YAML_ASSERT ( doc [ YAML :: Null ]. Type () == YAML :: NodeType :: Null );
2011-09-13 01:56:44 -05:00
YAML_ASSERT ( doc [ "quoted key" ]. size () == 1 );
YAML_ASSERT ( doc [ "quoted key" ][ 0 ]. as < std :: string > () == "entry" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.19
2011-09-13 01:56:44 -05:00
TEST CompactBlockMappings () {
YAML :: Node doc = YAML :: Parse ( ex8_19 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ 0 ]. size () == 1 );
YAML_ASSERT ( doc [ 0 ][ "sun" ]. as < std :: string > () == "yellow" );
YAML_ASSERT ( doc [ 1 ]. size () == 1 );
std :: map < std :: string , std :: string > key ;
key [ "earth" ] = "blue" ;
YAML_ASSERT ( doc [ 1 ][ key ]. size () == 1 );
YAML_ASSERT ( doc [ 1 ][ key ][ "moon" ]. as < std :: string > () == "white" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.20
2011-09-13 01:56:44 -05:00
TEST BlockNodeTypes () {
YAML :: Node doc = YAML :: Parse ( ex8_20 );
YAML_ASSERT ( doc . size () == 3 );
YAML_ASSERT ( doc [ 0 ]. as < std :: string > () == "flow in block" );
YAML_ASSERT ( doc [ 1 ]. as < std :: string > () == "Block scalar \n " );
YAML_ASSERT ( doc [ 2 ]. size () == 1 );
YAML_ASSERT ( doc [ 2 ][ "foo" ]. as < std :: string > () == "bar" );
return true ;
}
2011-09-12 22:55:37 -05:00
// 8.21
TEST BlockScalarNodes () { return " not written yet" ; }
// 8.22
2011-09-13 01:56:44 -05:00
TEST BlockCollectionNodes () {
YAML :: Node doc = YAML :: Parse ( ex8_22 );
YAML_ASSERT ( doc . size () == 2 );
YAML_ASSERT ( doc [ "sequence" ]. size () == 2 );
YAML_ASSERT ( doc [ "sequence" ][ 0 ]. as < std :: string > () == "entry" );
YAML_ASSERT ( doc [ "sequence" ][ 1 ]. size () == 1 );
YAML_ASSERT ( doc [ "sequence" ][ 1 ][ 0 ]. as < std :: string > () == "nested" );
YAML_ASSERT ( doc [ "mapping" ]. size () == 1 );
YAML_ASSERT ( doc [ "mapping" ][ "foo" ]. as < std :: string > () == "bar" );
return true ;
}
2011-09-10 18:05:35 -05:00
}
}