(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'Test git config-set API in different settings' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: check_config body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_Equals '=')} {(expect_code)}) ] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect_code) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [45] ) ] ) (C {(shift)}) (C {(shift)}) ] ) ] spids: [29 42] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect_code) op: assign_op.Equal rhs: {(0)} spids: [62] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:op) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [71] ) (assign_pair lhs: (sh_lhs_expr.Name name:key) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [74] ) ] ) (C {(shift)}) (C {(shift)}) (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_Pound '$#')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)}) ] action: [ (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_At '$@'))}) ] spids: [88 100] ) ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:118) fd: -1 arg_word: {(expect)} ) ] ) (command.Simple words: [ {(test_expect_code)} {($ Id.VSub_DollarName '$expect_code')} {(test-config)} {(DQ ($ Id.VSub_DollarName '$op'))} {(DQ ($ Id.VSub_DollarName '$key'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:138) fd: -1 arg_word: {(actual)} ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup default config' span_id:156))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:160) (Token id:Id.Lit_Chars val:'\tcat >.git/config <<-\\EOF\n' span_id:161) (Token id:Id.Lit_Chars val:'\t[case]\n' span_id:162) (Token id:Id.Lit_Chars val:'\t\tpenguin = very blue\n' span_id:163) (Token id:Id.Lit_Chars val:'\t\tMovie = BadPhysics\n' span_id:164) (Token id:Id.Lit_Chars val:'\t\tUPPERCASE = true\n' span_id:165) (Token id:Id.Lit_Chars val:'\t\tMixedCase = true\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\tmy =\n' span_id:167) (Token id:Id.Lit_Chars val:'\t\tfoo\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\tbaz = sam\n' span_id:169) (Token id:Id.Lit_Chars val:'\t[Cores]\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tWhatEver = Second\n' span_id:171) (Token id:Id.Lit_Chars val:'\t\tbaz = bar\n' span_id:172) (Token id:Id.Lit_Chars val:'\t[cores]\n' span_id:173) (Token id:Id.Lit_Chars val:'\t\tbaz = bat\n' span_id:174) (Token id:Id.Lit_Chars val:'\t[CORES]\n' span_id:175) (Token id:Id.Lit_Chars val:'\t\tbaz = ball\n' span_id:176) (Token id:Id.Lit_Chars val:'\t[my "Foo bAr"]\n' span_id:177) (Token id:Id.Lit_Chars val:'\t\thi = mixed-case\n' span_id:178) (Token id:Id.Lit_Chars val:'\t[my "FOO BAR"]\n' span_id:179) (Token id:Id.Lit_Chars val:'\t\thi = upper-case\n' span_id:180) (Token id:Id.Lit_Chars val:'\t[my "foo bar"]\n' span_id:181) (Token id:Id.Lit_Chars val:'\t\thi = lower-case\n' span_id:182) (Token id:Id.Lit_Chars val:'\t[case]\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\tbaz = bat\n' span_id:184) (Token id:Id.Lit_Chars val:'\t\tbaz = hask\n' span_id:185) (Token id:Id.Lit_Chars val:'\t[lamb]\n' span_id:186) (Token id:Id.Lit_Chars val:'\t\tchop = 65\n' span_id:187) (Token id:Id.Lit_Chars val:'\t\thead = none\n' span_id:188) (Token id:Id.Lit_Chars val:'\t[goat]\n' span_id:189) (Token id:Id.Lit_Chars val:'\t\tlegs = 4\n' span_id:190) (Token id:Id.Lit_Chars val:'\t\thead = true\n' span_id:191) (Token id:Id.Lit_Chars val:'\t\tskin = false\n' span_id:192) (Token id:Id.Lit_Chars val:'\t\tnose = 1\n' span_id:193) (Token id:Id.Lit_Chars val:'\t\thorns\n' span_id:194) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:195) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'get value for a simple key' span_id:202))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.penguin "very blue"\n' span_id: 207 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'get value for a key with value as an empty string' span_id: 214 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:218) (Token id:Id.Lit_Chars val:'\tcheck_config get_value case.my ""\n' span_id:219) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'get value for a key with value as NULL' span_id:226))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.foo "(NULL)"\n' span_id: 231 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'upper case key' span_id:238))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:242) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.UPPERCASE "true" &&\n' span_id: 243 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value case.uppercase "true"\n' span_id:244) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mixed case key' span_id:251))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:255) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.MixedCase "true" &&\n' span_id: 256 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value case.MIXEDCASE "true" &&\n' span_id:257) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.mixedcase "true"\n' span_id: 258 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'key and value with mixed case' span_id:265))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:269) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.Movie "BadPhysics"\n' span_id: 270 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'key with case sensitive subsection' span_id:277))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:281) (Token id: Id.Lit_Chars val: '\tcheck_config get_value "my.Foo bAr.hi" "mixed-case" &&\n' span_id: 282 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value "my.FOO BAR.hi" "upper-case" &&\n' span_id:283) (Token id: Id.Lit_Chars val: '\tcheck_config get_value "my.foo bar.hi" "lower-case"\n' span_id: 284 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'key with case insensitive section header' span_id:291))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id: Id.Lit_Chars val: '\tcheck_config get_value cores.baz "ball" &&\n' span_id: 296 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value Cores.baz "ball" &&\n' span_id:297) (Token id: Id.Lit_Chars val: '\tcheck_config get_value CORES.baz "ball" &&\n' span_id: 298 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value coreS.baz "ball"\n' span_id:299) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'key with case insensitive section header & variable' span_id: 306 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:310) (Token id: Id.Lit_Chars val: '\tcheck_config get_value CORES.BAZ "ball" &&\n' span_id: 311 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value cores.baz "ball" &&\n' span_id:312) (Token id: Id.Lit_Chars val: '\tcheck_config get_value cores.BaZ "ball" &&\n' span_id: 313 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_value cOreS.bAz "ball"\n' span_id:314) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find value with misspelled key' span_id:321))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) (Token id: Id.Lit_Chars val: '\tcheck_config expect_code 1 get_value "my.fOo Bar.hi" "Value not found for \\"my.fOo Bar.hi\\""\n' span_id: 326 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find value with the highest priority' span_id:333))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) (Token id: Id.Lit_Chars val: '\tcheck_config get_value case.baz "hask"\n' span_id: 338 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find integer value for a key' span_id:345))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\tcheck_config get_int lamb.chop 65\n' span_id:350) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find string value for a key' span_id:357))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:361) (Token id: Id.Lit_Chars val: '\tcheck_config get_string case.baz hask &&\n' span_id: 362 ) (Token id: Id.Lit_Chars val: '\tcheck_config expect_code 1 get_string case.ba "Value not found for \\"case.ba\\""\n' span_id: 363 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check line error when NULL string is queried' span_id:370))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:374) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 test-config get_string case.foo 2>result &&\n' span_id: 375 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "fatal: .*case\\.foo.*\\.git/config.*line 7" result\n' span_id: 376 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find integer if value is non parse-able' span_id:383))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:387) (Token id: Id.Lit_Chars val: '\tcheck_config expect_code 128 get_int lamb.head\n' span_id: 388 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find bool value for the entered key' span_id:395))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id: Id.Lit_Chars val: '\tcheck_config get_bool goat.head 1 &&\n' span_id: 400 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_bool goat.skin 0 &&\n' span_id:401) (Token id: Id.Lit_Chars val: '\tcheck_config get_bool goat.nose 1 &&\n' span_id: 402 ) (Token id:Id.Lit_Chars val:'\tcheck_config get_bool goat.horns 1 &&\n' span_id:403) (Token id:Id.Lit_Chars val:'\tcheck_config get_bool goat.legs 1\n' span_id:404) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find multiple values' span_id:411))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:415) (Token id: Id.Lit_Chars val: '\tcheck_config get_value_multi case.baz sam bat hask\n' span_id: 416 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find value from a configset' span_id:423))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:427) (Token id:Id.Lit_Chars val:'\tcat >config2 <<-\\EOF &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\t[case]\n' span_id:429) (Token id:Id.Lit_Chars val:'\t\tbaz = lama\n' span_id:430) (Token id:Id.Lit_Chars val:'\t[my]\n' span_id:431) (Token id:Id.Lit_Chars val:'\t\tnew = silk\n' span_id:432) (Token id:Id.Lit_Chars val:'\t[case]\n' span_id:433) (Token id:Id.Lit_Chars val:'\t\tbaz = ball\n' span_id:434) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:435) (Token id:Id.Lit_Chars val:'\techo silk >expect &&\n' span_id:436) (Token id: Id.Lit_Chars val: '\ttest-config configset_get_value my.new config2 .git/config >actual &&\n' span_id: 437 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:438) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'find value with highest priority from a configset' span_id: 445 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:449) (Token id:Id.Lit_Chars val:'\techo hask >expect &&\n' span_id:450) (Token id: Id.Lit_Chars val: '\ttest-config configset_get_value case.baz config2 .git/config >actual &&\n' span_id: 451 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:452) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'find value_list for a key from a configset' span_id:459))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:463) (Token id:Id.Lit_Chars val:'\tcat >except <<-\\EOF &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\tsam\n' span_id:465) (Token id:Id.Lit_Chars val:'\tbat\n' span_id:466) (Token id:Id.Lit_Chars val:'\thask\n' span_id:467) (Token id:Id.Lit_Chars val:'\tlama\n' span_id:468) (Token id:Id.Lit_Chars val:'\tball\n' span_id:469) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:470) (Token id: Id.Lit_Chars val: '\ttest-config configset_get_value case.baz config2 .git/config >actual &&\n' span_id: 471 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:472) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'proper error on non-existent files' span_id:479))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:483) (Token id: Id.Lit_Chars val: '\techo "Error (-1) reading configuration file non-existent-file." >expect &&\n' span_id: 484 ) (Token id: Id.Lit_Chars val: '\ttest_expect_code 2 test-config configset_get_value foo.bar non-existent-file 2>actual &&\n' span_id: 485 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:486) ) } ) (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} {(SQ (Token id:Id.Lit_Chars val:'proper error on non-accessible files' span_id:497))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:501) (Token id:Id.Lit_Chars val:'\tchmod -r .git/config &&\n' span_id:502) (Token id:Id.Lit_Chars val:'\ttest_when_finished "chmod +r .git/config" &&\n' span_id:503) (Token id: Id.Lit_Chars val: '\techo "Error (-1) reading configuration file .git/config." >expect &&\n' span_id: 504 ) (Token id: Id.Lit_Chars val: '\ttest_expect_code 2 test-config configset_get_value foo.bar .git/config 2>actual &&\n' span_id: 505 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:506) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'proper error on error in default config files' span_id:513))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tcp .git/config .git/config.old &&\n' span_id:518) (Token id:Id.Lit_Chars val:'\ttest_when_finished "mv .git/config.old .git/config" &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\techo "[" >>.git/config &&\n' span_id:520) (Token id: Id.Lit_Chars val: '\techo "fatal: bad config line 34 in file .git/config" >expect &&\n' span_id: 521 ) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 test-config get_value foo.bar 2>actual &&\n' span_id: 522 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:523) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'proper error on error in custom config files' span_id:530))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:534) (Token id:Id.Lit_Chars val:'\techo "[" >>syntax-error &&\n' span_id:535) (Token id: Id.Lit_Chars val: '\techo "fatal: bad config line 1 in file syntax-error" >expect &&\n' span_id: 536 ) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 test-config configset_get_value foo.bar syntax-error 2>actual &&\n' span_id: 537 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:538) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check line errors for malformed values' span_id:545))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:549) (Token id:Id.Lit_Chars val:'\tmv .git/config .git/config.old &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\ttest_when_finished "mv .git/config.old .git/config" &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\tcat >.git/config <<-\\EOF &&\n' span_id:552) (Token id:Id.Lit_Chars val:'\t[alias]\n' span_id:553) (Token id:Id.Lit_Chars val:'\t\tbr\n' span_id:554) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:555) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 git br 2>result &&\n' span_id: 556 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "fatal: .*alias\\.br.*\\.git/config.*line 2" result\n' span_id: 557 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'error on modifying repo config without repo' span_id:564))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:568) (Token id:Id.Lit_Chars val:'\tmkdir no-repo &&\n' span_id:569) (Token id:Id.Lit_Chars val:'\t(\n' span_id:570) (Token id:Id.Lit_Chars val:'\t\tGIT_CEILING_DIRECTORIES=$(pwd) &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\t\tcd no-repo &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git config a.b c 2>err &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\t\tgrep "not in a git directory" err\n' span_id:575) (Token id:Id.Lit_Chars val:'\t)\n' span_id:576) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmdline_config) op: assign_op.Equal rhs: {(DQ ("'foo.bar=from-cmdline'"))} spids: [580] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'iteration shows correct origins' span_id:588))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:592) (Token id: Id.Lit_Chars val: '\techo "[foo]bar = from-repo" >.git/config &&\n' span_id: 593 ) (Token id:Id.Lit_Chars val:'\techo "[foo]bar = from-home" >.gitconfig &&\n' span_id:594) (Token id:Id.Lit_Chars val:'\tif test_have_prereq MINGW\n' span_id:595) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:596) (Token id: Id.Lit_Chars val: '\t\t# Use Windows path (i.e. *not* $HOME)\n' span_id: 597 ) (Token id:Id.Lit_Chars val:'\t\tHOME_GITCONFIG=$(pwd)/.gitconfig\n' span_id:598) (Token id:Id.Lit_Chars val:'\telse\n' span_id:599) (Token id: Id.Lit_Chars val: '\t\t# Do not get fooled by symbolic links, i.e. $HOME != $(pwd)\n' span_id: 600 ) (Token id:Id.Lit_Chars val:'\t\tHOME_GITCONFIG=$HOME/.gitconfig\n' span_id:601) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:602) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:603) (Token id:Id.Lit_Chars val:'\tkey=foo.bar\n' span_id:604) (Token id:Id.Lit_Chars val:'\tvalue=from-home\n' span_id:605) (Token id:Id.Lit_Chars val:'\torigin=file\n' span_id:606) (Token id:Id.Lit_Chars val:'\tname=$HOME_GITCONFIG\n' span_id:607) (Token id:Id.Lit_Chars val:'\tscope=global\n' span_id:608) (Token id:Id.Lit_Chars val:'\n' span_id:609) (Token id:Id.Lit_Chars val:'\tkey=foo.bar\n' span_id:610) (Token id:Id.Lit_Chars val:'\tvalue=from-repo\n' span_id:611) (Token id:Id.Lit_Chars val:'\torigin=file\n' span_id:612) (Token id:Id.Lit_Chars val:'\tname=.git/config\n' span_id:613) (Token id:Id.Lit_Chars val:'\tscope=repo\n' span_id:614) (Token id:Id.Lit_Chars val:'\n' span_id:615) (Token id:Id.Lit_Chars val:'\tkey=foo.bar\n' span_id:616) (Token id:Id.Lit_Chars val:'\tvalue=from-cmdline\n' span_id:617) (Token id:Id.Lit_Chars val:'\torigin=command line\n' span_id:618) (Token id:Id.Lit_Chars val:'\tname=\n' span_id:619) (Token id:Id.Lit_Chars val:'\tscope=cmdline\n' span_id:620) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:621) (Token id: Id.Lit_Chars val: '\tGIT_CONFIG_PARAMETERS=$cmdline_config test-config iterate >actual &&\n' span_id: 622 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:623) ) } ) (C {(test_done)}) ] )