(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'git blame'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROG)
          op: assign_op.Equal
          rhs: {(SQ <'git blame -c'>)}
          spids: [14]
        )
      ]
    )
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/annotate-tests.sh'>})
    (C {<test_expect_success>} {(SQ <'blame untracked file in empty repo'>)} 
      {(SQ <'\n'> <'\t>untracked &&\n'> <'\ttest_must_fail git blame untracked\n'>)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROG)
          op: assign_op.Equal
          rhs: {(SQ <'git blame -c -e'>)}
          spids: [40]
        )
      ]
    )
    (C {<test_expect_success>} {(SQ <'blame --show-email'>)} 
      {
        (SQ <'\n'> <'\tcheck_count \\\n'> <'\t\t"<A@test.git>" 1 \\\n'> <'\t\t"<B@test.git>" 1 \\\n'> 
          <'\t\t"<B1@test.git>" 1 \\\n'> <'\t\t"<B2@test.git>" 1 \\\n'> <'\t\t"<author@example.com>" 1 \\\n'> <'\t\t"<C@test.git>" 1 \\\n'> 
          <'\t\t"<D@test.git>" 1 \\\n'> <'\t\t"<E at test dot git>" 1\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'setup showEmail tests'>)} 
      {
        (SQ <'\n'> <'\techo "bin: test number 1" >one &&\n'> <'\tgit add one &&\n'> 
          <'\tGIT_AUTHOR_NAME=name1 \\\n'> <'\tGIT_AUTHOR_EMAIL=email1@test.git \\\n'> 
          <'\tgit commit -m First --date="2010-01-01 01:00:00" &&\n'> <'\tcat >expected_n <<-\\EOF &&\n'> <'\t(name1 2010-01-01 01:00:00 +0000 1) bin: test number 1\n'> 
          <'\tEOF\n'> <'\tcat >expected_e <<-\\EOF\n'> 
          <'\t(<email1@test.git> 2010-01-01 01:00:00 +0000 1) bin: test number 1\n'> <'\tEOF\n'>
        )
      }
    )
    (command.ShFunction
      name: find_blame
      body: (BraceGroup children:[(C {<sed>} {<-e>} {(SQ <'s/^[^(]*//'>)})])
    )
    (C {<test_expect_success>} {(SQ <'blame with no options and no config'>)} 
      {
        (SQ <'\n'> <'\tgit blame one >blame &&\n'> <'\tfind_blame <blame >result &&\n'> 
          <'\ttest_cmp expected_n result\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'blame with showemail options'>)} 
      {
        (SQ <'\n'> <'\tgit blame --show-email one >blame1 &&\n'> <'\tfind_blame <blame1 >result &&\n'> 
          <'\ttest_cmp expected_e result &&\n'> <'\tgit blame -e one >blame2 &&\n'> <'\tfind_blame <blame2 >result &&\n'> 
          <'\ttest_cmp expected_e result &&\n'> <'\tgit blame --no-show-email one >blame3 &&\n'> <'\tfind_blame <blame3 >result &&\n'> 
          <'\ttest_cmp expected_n result\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'blame with showEmail config false'>)} 
      {
        (SQ <'\n'> <'\tgit config blame.showEmail false &&\n'> <'\tgit blame one >blame1 &&\n'> 
          <'\tfind_blame <blame1 >result &&\n'> <'\ttest_cmp expected_n result &&\n'> <'\tgit blame --show-email one >blame2 &&\n'> 
          <'\tfind_blame <blame2 >result &&\n'> <'\ttest_cmp expected_e result &&\n'> <'\tgit blame -e one >blame3 &&\n'> 
          <'\tfind_blame <blame3 >result &&\n'> <'\ttest_cmp expected_e result &&\n'> <'\tgit blame --no-show-email one >blame4 &&\n'> 
          <'\tfind_blame <blame4 >result &&\n'> <'\ttest_cmp expected_n result\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'blame with showEmail config true'>)} 
      {
        (SQ <'\n'> <'\tgit config blame.showEmail true &&\n'> <'\tgit blame one >blame1 &&\n'> 
          <'\tfind_blame <blame1 >result &&\n'> <'\ttest_cmp expected_e result &&\n'> <'\tgit blame --no-show-email one >blame2 &&\n'> 
          <'\tfind_blame <blame2 >result &&\n'> <'\ttest_cmp expected_n result\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)