2011-09-11 03:05:35 +04:00
# include "spectests.h"
2011-09-13 10:23:30 +04:00
# include "specexamples.h"
# include "yaml-cpp/yaml.h"
2011-11-14 02:12:39 +04:00
# include <iostream>
2011-09-13 10:23:30 +04:00
# define YAML_ASSERT(cond) do { if(!(cond)) return " Assert failed: " #cond; } while(false)
2011-09-11 03:05:35 +04:00
2011-09-13 07:55:37 +04:00
namespace Test
{
namespace Spec
2011-09-11 03:05:35 +04:00
{
2011-09-13 07:55:37 +04:00
// 2.1
2011-09-13 10:23:30 +04:00
TEST SeqScalars ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_1 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc . IsSequence ( ) ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.2
2011-09-13 10:23:30 +04:00
TEST MappingScalarsToScalars ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_2 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc . IsMap ( ) ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.3
2011-09-13 10:23:30 +04:00
TEST MappingScalarsToSequences ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_3 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc . IsMap ( ) ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.4
2011-09-13 10:23:30 +04:00
TEST SequenceOfMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_4 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.5
2011-09-13 10:23:30 +04:00
TEST SequenceOfSequences ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_5 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.6
2011-09-13 10:23:30 +04:00
TEST MappingOfMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_6 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.7
2011-09-13 10:23:30 +04:00
TEST TwoDocumentsInAStream ( ) {
2011-09-13 23:31:00 +04:00
std : : vector < YAML : : Node > docs = YAML : : LoadAll ( ex2_7 ) ;
YAML_ASSERT ( docs . size ( ) = = 2 ) ;
{
YAML : : Node doc = docs [ 0 ] ;
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 " ) ;
}
{
YAML : : Node doc = docs [ 1 ] ;
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 0 ] . as < std : : string > ( ) = = " Chicago Cubs " ) ;
YAML_ASSERT ( doc [ 1 ] . as < std : : string > ( ) = = " St Louis Cardinals " ) ;
}
return true ;
2011-09-13 10:23:30 +04:00
}
2011-09-13 07:55:37 +04:00
// 2.8
2011-09-13 10:23:30 +04:00
TEST PlayByPlayFeed ( ) {
2011-09-13 23:31:00 +04:00
std : : vector < YAML : : Node > docs = YAML : : LoadAll ( ex2_8 ) ;
YAML_ASSERT ( docs . size ( ) = = 2 ) ;
{
YAML : : Node doc = docs [ 0 ] ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " time " ] . as < std : : string > ( ) = = " 20:03:20 " ) ;
YAML_ASSERT ( doc [ " player " ] . as < std : : string > ( ) = = " Sammy Sosa " ) ;
YAML_ASSERT ( doc [ " action " ] . as < std : : string > ( ) = = " strike (miss) " ) ;
}
{
YAML : : Node doc = docs [ 1 ] ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " time " ] . as < std : : string > ( ) = = " 20:03:47 " ) ;
YAML_ASSERT ( doc [ " player " ] . as < std : : string > ( ) = = " Sammy Sosa " ) ;
YAML_ASSERT ( doc [ " action " ] . as < std : : string > ( ) = = " grand slam " ) ;
}
return true ;
2011-09-13 10:23:30 +04:00
}
2011-09-13 07:55:37 +04:00
// 2.9
2011-09-13 10:23:30 +04:00
TEST SingleDocumentWithTwoComments ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_9 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.10
2011-09-13 10:23:30 +04:00
TEST SimpleAnchor ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_10 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.11
2011-09-13 10:23:30 +04:00
TEST MappingBetweenSequences ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_11 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.12
2011-09-13 10:23:30 +04:00
TEST CompactNestedMapping ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_12 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.13
2011-09-13 10:23:30 +04:00
TEST InLiteralsNewlinesArePreserved ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_13 ) ;
2011-09-13 10:23:30 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = =
" \\ //|| \\ /|| \n "
" // || ||__ " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.14
2011-09-13 10:23:30 +04:00
TEST InFoldedScalarsNewlinesBecomeSpaces ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_14 ) ;
2011-09-13 10:23:30 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " Mark McGwire's year was crippled by a knee injury. " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.15
2011-09-13 10:23:30 +04:00
TEST FoldedNewlinesArePreservedForMoreIndentedAndBlankLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_15 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.16
2011-09-13 10:23:30 +04:00
TEST IndentationDeterminesScope ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_16 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.17
2011-09-13 10:23:30 +04:00
TEST QuotedScalars ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_17 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// 2.18
2011-09-13 10:23:30 +04:00
TEST MultiLineFlowScalars ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_18 ) ;
2011-09-13 10:23:30 +04:00
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-13 07:55:37 +04:00
// TODO: 2.19 - 2.22 schema tags
// 2.23
2011-09-13 23:07:22 +04:00
TEST VariousExplicitTags ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_23 ) ;
2011-09-13 23:07:22 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " not-date " ] . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( doc [ " not-date " ] . as < std : : string > ( ) = = " 2002-04-28 " ) ;
YAML_ASSERT ( doc [ " picture " ] . Tag ( ) = = " tag:yaml.org,2002:binary " ) ;
YAML_ASSERT ( doc [ " picture " ] . as < std : : string > ( ) = =
" R0lGODlhDAAMAIQAAP//9/X \n "
" 17unp5WZmZgAAAOfn515eXv \n "
" Pz7Y6OjuDg4J+fn5OTk6enp \n "
" 56enmleECcgggoBADs= \n "
) ;
YAML_ASSERT ( doc [ " application specific tag " ] . Tag ( ) = = " !something " ) ;
YAML_ASSERT ( doc [ " application specific tag " ] . as < std : : string > ( ) = =
" The semantics of the tag \n "
" above may be different for \n "
" different documents. "
) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.24
2011-09-13 23:07:22 +04:00
TEST GlobalTags ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_24 ) ;
2011-09-13 23:07:22 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:clarkevans.com,2002:shape " ) ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ 0 ] . Tag ( ) = = " tag:clarkevans.com,2002:circle " ) ;
YAML_ASSERT ( doc [ 0 ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 0 ] [ " center " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 0 ] [ " center " ] [ " x " ] . as < int > ( ) = = 73 ) ;
YAML_ASSERT ( doc [ 0 ] [ " center " ] [ " y " ] . as < int > ( ) = = 129 ) ;
YAML_ASSERT ( doc [ 0 ] [ " radius " ] . as < int > ( ) = = 7 ) ;
YAML_ASSERT ( doc [ 1 ] . Tag ( ) = = " tag:clarkevans.com,2002:line " ) ;
YAML_ASSERT ( doc [ 1 ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 1 ] [ " start " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 1 ] [ " start " ] [ " x " ] . as < int > ( ) = = 73 ) ;
YAML_ASSERT ( doc [ 1 ] [ " start " ] [ " y " ] . as < int > ( ) = = 129 ) ;
YAML_ASSERT ( doc [ 1 ] [ " finish " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 1 ] [ " finish " ] [ " x " ] . as < int > ( ) = = 89 ) ;
YAML_ASSERT ( doc [ 1 ] [ " finish " ] [ " y " ] . as < int > ( ) = = 102 ) ;
YAML_ASSERT ( doc [ 2 ] . Tag ( ) = = " tag:clarkevans.com,2002:label " ) ;
YAML_ASSERT ( doc [ 2 ] . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ 2 ] [ " start " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ 2 ] [ " start " ] [ " x " ] . as < int > ( ) = = 73 ) ;
YAML_ASSERT ( doc [ 2 ] [ " start " ] [ " y " ] . as < int > ( ) = = 129 ) ;
YAML_ASSERT ( doc [ 2 ] [ " color " ] . as < std : : string > ( ) = = " 0xFFEEBB " ) ;
YAML_ASSERT ( doc [ 2 ] [ " text " ] . as < std : : string > ( ) = = " Pretty vector drawing. " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.25
2011-09-13 23:07:22 +04:00
TEST UnorderedSets ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_25 ) ;
2011-09-13 23:07:22 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:yaml.org,2002:set " ) ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ " Mark McGwire " ] . IsNull ( ) ) ;
YAML_ASSERT ( doc [ " Sammy Sosa " ] . IsNull ( ) ) ;
YAML_ASSERT ( doc [ " Ken Griffey " ] . IsNull ( ) ) ;
2011-09-13 23:07:22 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.26
2011-09-13 23:07:22 +04:00
TEST OrderedMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_26 ) ;
2011-09-13 23:07:22 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:yaml.org,2002:omap " ) ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ 0 ] . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 0 ] [ " Mark McGwire " ] . as < int > ( ) = = 65 ) ;
YAML_ASSERT ( doc [ 1 ] . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 1 ] [ " Sammy Sosa " ] . as < int > ( ) = = 63 ) ;
YAML_ASSERT ( doc [ 2 ] . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 2 ] [ " Ken Griffey " ] . as < int > ( ) = = 58 ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.27
2011-09-13 23:07:22 +04:00
TEST Invoice ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex2_27 ) ;
2011-09-13 23:07:22 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:clarkevans.com,2002:invoice " ) ;
YAML_ASSERT ( doc . size ( ) = = 8 ) ;
YAML_ASSERT ( doc [ " invoice " ] . as < int > ( ) = = 34843 ) ;
YAML_ASSERT ( doc [ " date " ] . as < std : : string > ( ) = = " 2001-01-23 " ) ;
YAML_ASSERT ( doc [ " bill-to " ] . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " given " ] . as < std : : string > ( ) = = " Chris " ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " family " ] . as < std : : string > ( ) = = " Dumars " ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " address " ] . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " address " ] [ " lines " ] . as < std : : string > ( ) = = " 458 Walkman Dr. \n Suite #292 \n " ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " address " ] [ " city " ] . as < std : : string > ( ) = = " Royal Oak " ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " address " ] [ " state " ] . as < std : : string > ( ) = = " MI " ) ;
YAML_ASSERT ( doc [ " bill-to " ] [ " address " ] [ " postal " ] . as < std : : string > ( ) = = " 48046 " ) ;
YAML_ASSERT ( doc [ " ship-to " ] . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " given " ] . as < std : : string > ( ) = = " Chris " ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " family " ] . as < std : : string > ( ) = = " Dumars " ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " address " ] . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " address " ] [ " lines " ] . as < std : : string > ( ) = = " 458 Walkman Dr. \n Suite #292 \n " ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " address " ] [ " city " ] . as < std : : string > ( ) = = " Royal Oak " ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " address " ] [ " state " ] . as < std : : string > ( ) = = " MI " ) ;
YAML_ASSERT ( doc [ " ship-to " ] [ " address " ] [ " postal " ] . as < std : : string > ( ) = = " 48046 " ) ;
YAML_ASSERT ( doc [ " product " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ " product " ] [ 0 ] . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " product " ] [ 0 ] [ " sku " ] . as < std : : string > ( ) = = " BL394D " ) ;
YAML_ASSERT ( doc [ " product " ] [ 0 ] [ " quantity " ] . as < int > ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " product " ] [ 0 ] [ " description " ] . as < std : : string > ( ) = = " Basketball " ) ;
YAML_ASSERT ( doc [ " product " ] [ 0 ] [ " price " ] . as < std : : string > ( ) = = " 450.00 " ) ;
YAML_ASSERT ( doc [ " product " ] [ 1 ] . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " product " ] [ 1 ] [ " sku " ] . as < std : : string > ( ) = = " BL4438H " ) ;
YAML_ASSERT ( doc [ " product " ] [ 1 ] [ " quantity " ] . as < int > ( ) = = 1 ) ;
YAML_ASSERT ( doc [ " product " ] [ 1 ] [ " description " ] . as < std : : string > ( ) = = " Super Hoop " ) ;
YAML_ASSERT ( doc [ " product " ] [ 1 ] [ " price " ] . as < std : : string > ( ) = = " 2392.00 " ) ;
YAML_ASSERT ( doc [ " tax " ] . as < std : : string > ( ) = = " 251.42 " ) ;
YAML_ASSERT ( doc [ " total " ] . as < std : : string > ( ) = = " 4443.52 " ) ;
YAML_ASSERT ( doc [ " comments " ] . as < std : : string > ( ) = = " Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338. " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 2.28
2011-09-13 23:31:00 +04:00
TEST LogFile ( ) {
std : : vector < YAML : : Node > docs = YAML : : LoadAll ( ex2_28 ) ;
YAML_ASSERT ( docs . size ( ) = = 3 ) ;
{
YAML : : Node doc = docs [ 0 ] ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " Time " ] . as < std : : string > ( ) = = " 2001-11-23 15:01:42 -5 " ) ;
YAML_ASSERT ( doc [ " User " ] . as < std : : string > ( ) = = " ed " ) ;
YAML_ASSERT ( doc [ " Warning " ] . as < std : : string > ( ) = = " This is an error message for the log file " ) ;
}
{
YAML : : Node doc = docs [ 1 ] ;
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " Time " ] . as < std : : string > ( ) = = " 2001-11-23 15:02:31 -5 " ) ;
YAML_ASSERT ( doc [ " User " ] . as < std : : string > ( ) = = " ed " ) ;
YAML_ASSERT ( doc [ " Warning " ] . as < std : : string > ( ) = = " A slightly different error message. " ) ;
}
{
YAML : : Node doc = docs [ 2 ] ;
YAML_ASSERT ( doc . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " Date " ] . as < std : : string > ( ) = = " 2001-11-23 15:03:17 -5 " ) ;
YAML_ASSERT ( doc [ " User " ] . as < std : : string > ( ) = = " ed " ) ;
YAML_ASSERT ( doc [ " Fatal " ] . as < std : : string > ( ) = = " Unknown variable \" bar \" " ) ;
YAML_ASSERT ( doc [ " Stack " ] . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 0 ] . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 0 ] [ " file " ] . as < std : : string > ( ) = = " TopClass.py " ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 0 ] [ " line " ] . as < std : : string > ( ) = = " 23 " ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 0 ] [ " code " ] . as < std : : string > ( ) = = " x = MoreObject( \" 345 \\ n \" ) \n " ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 1 ] . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 1 ] [ " file " ] . as < std : : string > ( ) = = " MoreClass.py " ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 1 ] [ " line " ] . as < std : : string > ( ) = = " 58 " ) ;
YAML_ASSERT ( doc [ " Stack " ] [ 1 ] [ " code " ] . as < std : : string > ( ) = = " foo = bar " ) ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// TODO: 5.1 - 5.2 BOM
// 5.3
2011-09-13 10:28:32 +04:00
TEST BlockStructureIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_3 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.4
2011-09-13 10:28:32 +04:00
TEST FlowStructureIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_4 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.5
2011-09-13 10:28:32 +04:00
TEST CommentIndicator ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_5 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc . IsNull ( ) ) ;
2011-09-13 10:28:32 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 5.6
2011-09-13 10:28:32 +04:00
TEST NodePropertyIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_6 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.7
2011-09-13 10:28:32 +04:00
TEST BlockScalarIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_7 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.8
2011-09-13 10:28:32 +04:00
TEST QuotedScalarIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_8 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// TODO: 5.9 directive
// TODO: 5.10 reserved indicator
// 5.11
2011-09-13 10:28:32 +04:00
TEST LineBreakCharacters ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_11 ) ;
2011-09-13 10:28:32 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " Line break (no glyph) \n Line break (glyphed) \n " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 5.12
2011-09-13 10:28:32 +04:00
TEST TabsAndSpaces ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_12 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.13
2011-09-13 10:28:32 +04:00
TEST EscapedCharacters ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex5_13 ) ;
2011-09-13 10:28:32 +04:00
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-13 07:55:37 +04:00
// 5.14
2011-09-13 10:28:32 +04:00
TEST InvalidEscapedCharacters ( ) {
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex5_14 ) ;
2011-09-13 10:28:32 +04:00
} catch ( const YAML : : ParserException & e ) {
YAML_ASSERT ( e . msg = = std : : string ( YAML : : ErrorMsg : : INVALID_ESCAPE ) + " c " ) ;
return true ;
}
return false ;
}
2011-09-13 07:55:37 +04:00
// 6.1
2011-09-13 10:36:27 +04:00
TEST IndentationSpaces ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_1 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.2
2011-09-13 10:36:27 +04:00
TEST IndentationIndicators ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_2 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.3
2011-09-13 10:36:27 +04:00
TEST SeparationSpaces ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_3 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.4
2011-09-13 10:36:27 +04:00
TEST LinePrefixes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_4 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.5
2011-09-13 10:36:27 +04:00
TEST EmptyLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_5 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.6
2011-09-13 10:36:27 +04:00
TEST LineFolding ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_6 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " trimmed \n \n \n as space " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.7
2011-09-13 10:36:27 +04:00
TEST BlockFolding ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_7 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " foo \n \n \t bar \n \n baz \n " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.8
2011-09-13 10:36:27 +04:00
TEST FlowFolding ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_8 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " foo \n bar \n baz " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.9
2011-09-13 10:36:27 +04:00
TEST SeparatedComment ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_9 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ " key " ] . as < std : : string > ( ) = = " value " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.10
2011-09-13 10:36:27 +04:00
TEST CommentLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_10 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc . IsNull ( ) ) ;
2011-09-13 10:36:27 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.11
2011-09-13 10:36:27 +04:00
TEST MultiLineComments ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_11 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ " key " ] . as < std : : string > ( ) = = " value " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.12
2011-09-13 10:36:27 +04:00
TEST SeparationSpacesII ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_12 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 6.13
2011-09-13 10:36:27 +04:00
TEST ReservedDirectives ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_13 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " foo " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.14
2011-09-13 10:36:27 +04:00
TEST YAMLDirective ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_14 ) ;
2011-09-13 10:36:27 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " foo " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.15
2011-09-13 10:36:27 +04:00
TEST InvalidRepeatedYAMLDirective ( ) {
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex6_15 ) ;
2011-09-13 10:36:27 +04:00
} catch ( const YAML : : ParserException & e ) {
YAML_ASSERT ( e . msg = = YAML : : ErrorMsg : : REPEATED_YAML_DIRECTIVE ) ;
return true ;
}
return " No exception was thrown " ;
}
2011-09-13 07:55:37 +04:00
// 6.16
2011-09-13 23:18:00 +04:00
TEST TagDirective ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_16 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " foo " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.17
2011-09-13 23:18:00 +04:00
TEST InvalidRepeatedTagDirective ( ) {
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex6_17 ) ;
2011-09-13 23:18:00 +04:00
} catch ( const YAML : : ParserException & e ) {
if ( e . msg = = YAML : : ErrorMsg : : REPEATED_TAG_DIRECTIVE )
return true ;
throw ;
}
return " No exception was thrown " ;
}
2011-09-13 07:55:37 +04:00
// 6.18
2011-09-13 23:31:00 +04:00
TEST PrimaryTagHandle ( ) {
std : : vector < YAML : : Node > docs = YAML : : LoadAll ( ex6_18 ) ;
YAML_ASSERT ( docs . size ( ) = = 2 ) ;
{
YAML : : Node doc = docs [ 0 ] ;
YAML_ASSERT ( doc . Tag ( ) = = " !foo " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " bar " ) ;
}
{
YAML : : Node doc = docs [ 1 ] ;
YAML_ASSERT ( doc . Tag ( ) = = " tag:example.com,2000:app/foo " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " bar " ) ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.19
2011-09-13 23:18:00 +04:00
TEST SecondaryTagHandle ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_19 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:example.com,2000:app/int " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " 1 - 3 " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.20
2011-09-13 23:18:00 +04:00
TEST TagHandles ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_20 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . Tag ( ) = = " tag:example.com,2000:app/foo " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " bar " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.21
2011-09-13 23:31:00 +04:00
TEST LocalTagPrefix ( ) {
std : : vector < YAML : : Node > docs = YAML : : LoadAll ( ex6_21 ) ;
YAML_ASSERT ( docs . size ( ) = = 2 ) ;
{
YAML : : Node doc = docs [ 0 ] ;
YAML_ASSERT ( doc . Tag ( ) = = " !my-light " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " fluorescent " ) ;
}
{
YAML : : Node doc = docs [ 1 ] ;
YAML_ASSERT ( doc . Tag ( ) = = " !my-light " ) ;
YAML_ASSERT ( doc . as < std : : string > ( ) = = " green " ) ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.22
2011-09-13 23:18:00 +04:00
TEST GlobalTagPrefix ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_22 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 0 ] . Tag ( ) = = " tag:example.com,2000:app/foo " ) ;
YAML_ASSERT ( doc [ 0 ] . as < std : : string > ( ) = = " bar " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.23
2011-09-13 23:18:00 +04:00
TEST NodeProperties ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_23 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
for ( YAML : : const_iterator it = doc . begin ( ) ; it ! = doc . end ( ) ; + + it ) {
if ( it - > first . as < std : : string > ( ) = = " foo " ) {
YAML_ASSERT ( it - > first . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( it - > second . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( it - > second . as < std : : string > ( ) = = " bar " ) ;
} else if ( it - > first . as < std : : string > ( ) = = " baz " ) {
YAML_ASSERT ( it - > second . as < std : : string > ( ) = = " foo " ) ;
} else
return " unknown key " ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.24
2011-09-13 23:18:00 +04:00
TEST VerbatimTags ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_24 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . size ( ) = = 1 ) ;
for ( YAML : : const_iterator it = doc . begin ( ) ; it ! = doc . end ( ) ; + + it ) {
YAML_ASSERT ( it - > first . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( it - > first . as < std : : string > ( ) = = " foo " ) ;
YAML_ASSERT ( it - > second . Tag ( ) = = " !bar " ) ;
YAML_ASSERT ( it - > second . as < std : : string > ( ) = = " baz " ) ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.25
2011-09-13 23:18:00 +04:00
TEST InvalidVerbatimTags ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_25 ) ;
2011-09-13 23:18:00 +04:00
return " not implemented yet " ; // TODO: check tags (but we probably will say these are valid, I think)
}
2011-09-13 07:55:37 +04:00
// 6.26
2011-09-13 23:18:00 +04:00
TEST TagShorthands ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_26 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ 0 ] . Tag ( ) = = " !local " ) ;
YAML_ASSERT ( doc [ 0 ] . as < std : : string > ( ) = = " foo " ) ;
YAML_ASSERT ( doc [ 1 ] . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( doc [ 1 ] . as < std : : string > ( ) = = " bar " ) ;
YAML_ASSERT ( doc [ 2 ] . Tag ( ) = = " tag:example.com,2000:app/tag%21 " ) ;
YAML_ASSERT ( doc [ 2 ] . as < std : : string > ( ) = = " baz " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.27
2011-09-13 23:18:00 +04:00
TEST InvalidTagShorthands ( ) {
bool threw = false ;
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex6_27a ) ;
2011-09-13 23:18:00 +04:00
} catch ( const YAML : : ParserException & e ) {
threw = true ;
if ( e . msg ! = YAML : : ErrorMsg : : TAG_WITH_NO_SUFFIX )
throw ;
}
if ( ! threw )
return " No exception was thrown for a tag with no suffix " ;
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex6_27b ) ; // TODO: should we reject this one (since !h! is not declared)?
2011-09-13 23:18:00 +04:00
return " not implemented yet " ;
}
2011-09-13 07:55:37 +04:00
// 6.28
2011-09-13 23:18:00 +04:00
TEST NonSpecificTags ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_28 ) ;
2011-09-13 23:18:00 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ 0 ] . as < std : : string > ( ) = = " 12 " ) ; // TODO: check tags. How?
YAML_ASSERT ( doc [ 1 ] . as < int > ( ) = = 12 ) ;
YAML_ASSERT ( doc [ 2 ] . as < std : : string > ( ) = = " 12 " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 6.29
2011-09-13 10:36:27 +04:00
TEST NodeAnchors ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex6_29 ) ;
2011-09-13 10:36:27 +04:00
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-13 07:55:37 +04:00
// 7.1
2011-09-13 10:46:42 +04:00
TEST AliasNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_1 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.2
2011-09-13 23:20:32 +04:00
TEST EmptyNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_2 ) ;
2011-09-13 23:20:32 +04:00
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
for ( YAML : : const_iterator it = doc . begin ( ) ; it ! = doc . end ( ) ; + + it ) {
if ( it - > first . as < std : : string > ( ) = = " foo " ) {
YAML_ASSERT ( it - > second . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( it - > second . as < std : : string > ( ) = = " " ) ;
} else if ( it - > first . as < std : : string > ( ) = = " " ) {
YAML_ASSERT ( it - > first . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( it - > second . as < std : : string > ( ) = = " bar " ) ;
} else
return " unexpected key " ;
}
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.3
2011-09-13 10:46:42 +04:00
TEST CompletelyEmptyNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_3 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ " foo " ] . IsNull ( ) ) ;
2011-09-13 11:03:56 +04:00
YAML_ASSERT ( doc [ YAML : : Null ] . as < std : : string > ( ) = = " bar " ) ;
2011-09-13 10:46:42 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.4
2011-09-13 10:46:42 +04:00
TEST DoubleQuotedImplicitKeys ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_4 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.5
2011-09-13 10:46:42 +04:00
TEST DoubleQuotedLineBreaks ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_5 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " folded to a space, \n to a line feed, or \t \t non-content " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.6
2011-09-13 10:46:42 +04:00
TEST DoubleQuotedLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_6 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " 1st non-empty \n 2nd non-empty 3rd non-empty " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.7
2011-09-13 10:46:42 +04:00
TEST SingleQuotedCharacters ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_7 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " here's to \" quotes \" " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.8
2011-09-13 10:46:42 +04:00
TEST SingleQuotedImplicitKeys ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_8 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.9
2011-09-13 10:46:42 +04:00
TEST SingleQuotedLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_9 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " 1st non-empty \n 2nd non-empty 3rd non-empty " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.10
2011-09-13 10:46:42 +04:00
TEST PlainCharacters ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_10 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.11
2011-09-13 10:46:42 +04:00
TEST PlainImplicitKeys ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_11 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.12
2011-09-13 10:46:42 +04:00
TEST PlainLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_12 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " 1st non-empty \n 2nd non-empty 3rd non-empty " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.13
2011-09-13 10:46:42 +04:00
TEST FlowSequence ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_13 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.14
2011-09-13 10:46:42 +04:00
TEST FlowSequenceEntries ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_14 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.15
2011-09-13 10:46:42 +04:00
TEST FlowMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_15 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.16
2011-09-13 10:46:42 +04:00
TEST FlowMappingEntries ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_16 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " explicit " ] . as < std : : string > ( ) = = " entry " ) ;
YAML_ASSERT ( doc [ " implicit " ] . as < std : : string > ( ) = = " entry " ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ YAML : : Null ] . IsNull ( ) ) ;
2011-09-13 10:46:42 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.17
2011-09-13 10:46:42 +04:00
TEST FlowMappingSeparateValues ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_17 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . size ( ) = = 4 ) ;
YAML_ASSERT ( doc [ " unquoted " ] . as < std : : string > ( ) = = " separate " ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ " http://foo.com " ] . IsNull ( ) ) ;
YAML_ASSERT ( doc [ " omitted value " ] . IsNull ( ) ) ;
2011-09-13 11:03:56 +04:00
YAML_ASSERT ( doc [ YAML : : Null ] . as < std : : string > ( ) = = " omitted key " ) ;
2011-09-13 10:46:42 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.18
2011-09-13 10:46:42 +04:00
TEST FlowMappingAdjacentValues ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_18 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " adjacent " ] . as < std : : string > ( ) = = " value " ) ;
YAML_ASSERT ( doc [ " readable " ] . as < std : : string > ( ) = = " value " ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ " empty " ] . IsNull ( ) ) ;
2011-09-13 10:46:42 +04:00
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.19
2011-09-13 10:46:42 +04:00
TEST SinglePairFlowMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_19 ) ;
2011-09-13 10:46:42 +04:00
YAML_ASSERT ( doc . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 0 ] . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ 0 ] [ " foo " ] . as < std : : string > ( ) = = " bar " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 7.20
2011-09-13 10:46:42 +04:00
TEST SinglePairExplicitEntry ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_20 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.21
2011-09-13 10:46:42 +04:00
TEST SinglePairImplicitEntries ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_21 ) ;
2011-09-13 10:46:42 +04:00
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 11:03:56 +04:00
YAML_ASSERT ( doc [ 1 ] [ 0 ] [ YAML : : Null ] . as < std : : string > ( ) = = " empty key entry " ) ;
2011-09-13 10:46:42 +04: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-13 07:55:37 +04:00
// 7.22
2011-09-13 10:46:42 +04:00
TEST InvalidImplicitKeys ( ) {
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex7_22 ) ;
2011-09-13 10:46:42 +04:00
} catch ( const YAML : : Exception & e ) {
if ( e . msg = = YAML : : ErrorMsg : : END_OF_SEQ_FLOW )
return true ;
throw ;
}
return " no exception thrown " ;
}
2011-09-13 07:55:37 +04:00
// 7.23
2011-09-13 10:46:42 +04:00
TEST FlowContent ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_23 ) ;
2011-09-13 10:46:42 +04:00
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-13 07:55:37 +04:00
// 7.24
2011-09-13 23:20:32 +04:00
TEST FlowNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex7_24 ) ;
2011-09-13 23:20:32 +04:00
YAML_ASSERT ( doc . size ( ) = = 5 ) ;
YAML_ASSERT ( doc [ 0 ] . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( doc [ 0 ] . as < std : : string > ( ) = = " a " ) ;
YAML_ASSERT ( doc [ 1 ] . as < char > ( ) = = ' b ' ) ;
YAML_ASSERT ( doc [ 2 ] . as < std : : string > ( ) = = " c " ) ;
YAML_ASSERT ( doc [ 3 ] . as < std : : string > ( ) = = " c " ) ;
YAML_ASSERT ( doc [ 4 ] . Tag ( ) = = " tag:yaml.org,2002:str " ) ;
YAML_ASSERT ( doc [ 4 ] . as < std : : string > ( ) = = " " ) ;
return true ;
}
2011-09-13 10:56:44 +04:00
2011-09-13 07:55:37 +04:00
// 8.1
2011-09-13 10:56:44 +04:00
TEST BlockScalarHeader ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_1 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.2
2011-09-13 10:56:44 +04:00
TEST BlockIndentationHeader ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_2 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.3
2011-09-13 10:56:44 +04:00
TEST InvalidBlockScalarIndentationIndicators ( ) {
{
bool threw = false ;
try {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex8_3a ) ;
2011-09-13 10:56:44 +04:00
} 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 {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex8_3b ) ;
2011-09-13 10:56:44 +04:00
} 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 {
2011-09-13 23:24:47 +04:00
YAML : : Load ( ex8_3c ) ;
2011-09-13 10:56:44 +04:00
} 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-13 07:55:37 +04:00
// 8.4
2011-09-13 10:56:44 +04:00
TEST ChompingFinalLineBreak ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_4 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.5
2011-09-13 10:56:44 +04:00
TEST ChompingTrailingLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_5 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.6
2011-09-13 10:56:44 +04:00
TEST EmptyScalarChomping ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_6 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.7
2011-09-13 10:56:44 +04:00
TEST LiteralScalar ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_7 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " literal \n \t text \n " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 8.8
2011-09-13 10:56:44 +04:00
TEST LiteralContent ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_8 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " \n \n literal \n \n \n text \n " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 8.9
2011-09-13 10:56:44 +04:00
TEST FoldedScalar ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_9 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . as < std : : string > ( ) = = " folded text \n " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 8.10
2011-09-13 10:56:44 +04:00
TEST FoldedLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_10 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.11
2011-09-13 10:56:44 +04:00
TEST MoreIndentedLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_11 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.12
2011-09-13 10:56:44 +04:00
TEST EmptySeparationLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_12 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.13
2011-09-13 10:56:44 +04:00
TEST FinalEmptyLines ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_13 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.14
2011-09-13 10:56:44 +04:00
TEST BlockSequence ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_14 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.15
2011-09-13 10:56:44 +04:00
TEST BlockSequenceEntryTypes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_15 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . size ( ) = = 4 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ 0 ] . IsNull ( ) ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.16
2011-09-13 10:56:44 +04:00
TEST BlockMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_16 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.17
2011-09-13 10:56:44 +04:00
TEST ExplicitBlockMappingEntries ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_17 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ " explicit key " ] . IsNull ( ) ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.18
2011-09-13 10:56:44 +04:00
TEST ImplicitBlockMappingEntries ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_18 ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc . size ( ) = = 3 ) ;
YAML_ASSERT ( doc [ " plain key " ] . as < std : : string > ( ) = = " in-line value " ) ;
2011-09-13 23:10:27 +04:00
YAML_ASSERT ( doc [ YAML : : Null ] . IsNull ( ) ) ;
2011-09-13 10:56:44 +04:00
YAML_ASSERT ( doc [ " quoted key " ] . size ( ) = = 1 ) ;
YAML_ASSERT ( doc [ " quoted key " ] [ 0 ] . as < std : : string > ( ) = = " entry " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 8.19
2011-09-13 10:56:44 +04:00
TEST CompactBlockMappings ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_19 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.20
2011-09-13 10:56:44 +04:00
TEST BlockNodeTypes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_20 ) ;
2011-09-13 10:56:44 +04:00
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-13 07:55:37 +04:00
// 8.21
2011-09-13 23:20:32 +04:00
TEST BlockScalarNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_21 ) ;
2011-09-13 23:20:32 +04:00
YAML_ASSERT ( doc . size ( ) = = 2 ) ;
YAML_ASSERT ( doc [ " literal " ] . as < std : : string > ( ) = = " value " ) ; // Note: I believe this is a bug in the YAML spec - it should be "value\n"
YAML_ASSERT ( doc [ " folded " ] . as < std : : string > ( ) = = " value " ) ;
YAML_ASSERT ( doc [ " folded " ] . Tag ( ) = = " !foo " ) ;
return true ;
}
2011-09-13 07:55:37 +04:00
// 8.22
2011-09-13 10:56:44 +04:00
TEST BlockCollectionNodes ( ) {
2011-09-13 23:24:47 +04:00
YAML : : Node doc = YAML : : Load ( ex8_22 ) ;
2011-09-13 10:56:44 +04:00
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-11 03:05:35 +04:00
}
}