@@ -349,20 +349,6 @@ one_section_title_and_one_prop_test_() ->
349349 " [title] \n "
350350 " key1= value1 \n "
351351 )),
352- % % nested properties: https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html
353- ? _assertEqual ({ok , [
354- {title , [{key1 ,[{key11 ,<<" value11" >>},{key12 ,<<" value12" >>},{key13 ,<<" value13" >>},{key14 ,<<" value14" >>}]},{key2 ,<<" value2" >>}]}
355- ]},
356- parse (
357- " [title]\n "
358- " key1 =\n "
359- " key11=value11\n "
360- " key12 =value12\n "
361- " key13= value13\n "
362- " key14 = value14\n "
363- " key2=value2\n "
364- )),
365-
366352 % % value has characters which can not used in titles or keys
367353 ? _assertEqual ({ok , [
368354 {title , [{key1 , <<" value1$% '" " #!+*=@/:+" >>}]}
@@ -461,6 +447,84 @@ binary_two_section_test_() ->
461447 ))
462448 ]}.
463449
450+ nested_properties_test_ () ->
451+ % % https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html
452+ {setup ,
453+ fun setup /0 ,
454+ fun teardown / 1 ,
455+ [
456+ ? _assertEqual ({ok , [
457+ {title ,
458+ [{key1 , [{key11 , <<" value11" >>},
459+ {key12 , <<" value12" >>}]}]}
460+ ]},
461+ parse (
462+ " [title]\n "
463+ " key1=\n "
464+ " key11=value11\n "
465+ " key12 =value12\n "
466+ )),
467+ ? _assertEqual ({ok , [
468+ {title ,
469+ [{key1 , [{key11 , <<" value11" >>},
470+ {key12 , <<" value12" >>},
471+ {key13 , <<" value13" >>},
472+ {key14 , <<" value14" >>}]},
473+ {key2 , <<" value2" >>}]}
474+ ]},
475+ parse (
476+ " [title]\n "
477+ " key1 =\n "
478+ " key11=value11\n "
479+ " key12 =value12\n "
480+ " key13= value13\n "
481+ " key14 = value14\n "
482+ " key2=value2\n "
483+ )),
484+ ? _assertEqual ({ok , [
485+ {title ,
486+ [{key1 , [{key11 , <<" value11" >>}]},
487+ {key2 , <<" value2" >>}]}
488+ ]},
489+ parse (
490+ " [title]\n "
491+ " key1= \n "
492+ " key11=value11\n "
493+ " key2=value2\n "
494+ )),
495+ % % with comments in/between nested properties
496+ ? _assertEqual ({ok , [
497+ {title ,
498+ [{key1 , [{key11 , <<" value11" >>},
499+ {key12 , <<" value12" >>}]},
500+ {key2 , <<" value2" >>}]}
501+ ]},
502+ parse (
503+ " [title]\n "
504+ " key1= \n "
505+ " ; comment in nested properties\n "
506+ " key11 = value11\n "
507+ " ; comment between nested properties\n "
508+ " key12 = value12\n "
509+ " key2=value2\n "
510+ ))% ,
511+ % % with comments at end of nested properties (TODO Fix this case)
512+ % ?_assertEqual({ok, [
513+ % {title,
514+ % [{key1, [{key11, <<"value11">>},
515+ % {key12, <<"value12">>}]},
516+ % {key2, <<"value2">>}]}
517+ % ]},
518+ % parse(
519+ % "[title]\n"
520+ % "key1= \n"
521+ % " key11 = value11\n"
522+ % " key12 = value12\n"
523+ % "; comment after nested properties\n"
524+ % "key2=value2\n"
525+ % ))
526+ ]}.
527+
464528lex_error_title_test_ () ->
465529 {setup ,
466530 fun setup /0 ,
@@ -534,6 +598,26 @@ syntax_error_property_test_() ->
534598 " key;comment=value\n " ))
535599 ]}.
536600
601+ syntax_error_nested_property_test_ () ->
602+ {setup ,
603+ fun setup /0 ,
604+ fun teardown /1 ,
605+ [
606+ % % no nested properties after open
607+ ? _assertMatch ({error , {syntax_error , 2 , [" syntax error before: " , _ ]}},
608+ parse (
609+ " [title]\n "
610+ " key1 =\n "
611+ )),
612+ % % no nested properties after open (with following key)
613+ ? _assertMatch ({error , {syntax_error , 3 , [" syntax error before: " , _ ]}},
614+ parse (
615+ " [title]\n "
616+ " key1=\n "
617+ " key2=value2\n "
618+ ))
619+ ]}.
620+
537621dup_title_test_ () ->
538622 {setup ,
539623 fun setup /0 ,
0 commit comments