(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)})
  ]
)