(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:'support for reading config from a blob' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create config blob' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\tcat >config <<-\\EOF &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\t[some]\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\t\tvalue = 1\n' span_id:24) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit add config &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit commit -m foo\n' span_id:27)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'list config blob contents' span_id:34))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\techo some.value=1 >expect &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tgit config --blob=HEAD:config --list >actual &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:41)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch value from blob' span_id:48))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\techo true >expect &&\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --blob=HEAD:config --bool some.value >actual &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:55)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reading non-existing value from blob is an error' span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config non.existing\n'
            span_id: 67
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reading from blob and file is an error' span_id:74))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config --system --list\n'
            span_id: 79
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reading from missing ref is an error' span_id:86))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:doesnotexist --list\n'
            span_id: 91
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reading from non-blob is an error' span_id:98))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD --list\n'
            span_id: 103
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setting a value in a blob is an error' span_id:110))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:114) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config some.value foo\n'
            span_id: 115
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'deleting a value in a blob is an error' span_id:122))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config --unset some.value\n'
            span_id: 127
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'editing a blob is an error' span_id:134))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:138) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config --edit\n'
            span_id: 139
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'parse errors in blobs are properly attributed' span_id:146))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\tcat >config <<-\\EOF &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\t[some]\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\t\tvalue = "\n' span_id:153) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tgit add config &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit commit -m broken &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\n' span_id:157) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --blob=HEAD:config some.value 2>err &&\n'
            span_id: 158
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "HEAD:config" err\n' span_id:159)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'can parse blob ending with CR' span_id:166))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "[some]key = value\\\\r" >config &&\n'
            span_id: 171
          ) (Token id:Id.Lit_Chars val:'\tgit add config &&\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m CR &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\techo value >expect &&\n' span_id:174) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --blob=HEAD:config some.key >actual &&\n'
            span_id: 175
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:176)
        )
      }
    )
    (C {(test_done)})
  ]
)