(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: 'Tests to check that "reset" options follow a known table'
                  span_id: 15
                )
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'creating initial commits' span_id:28))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'    test_commit E file1 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'    test_commit D file1 &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'    test_commit C file1\n' span_id:35)
        )
      }
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:39)
      cond: [(C {(read)} {(W1)} {(I1)} {(H1)} {(T)} {(opt)} {(W2)} {(I2)} {(H2)})]
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {
                (DQ ('check: ') ($ Id.VSub_DollarName '$W1') (' ') ($ Id.VSub_DollarName '$I1') (' ') 
                  ($ Id.VSub_DollarName '$H1') (' ') ($ Id.VSub_DollarName '$T') (' --') ($ Id.VSub_DollarName '$opt') (' ') ($ Id.VSub_DollarName '$W2') 
                  (' ') ($ Id.VSub_DollarName '$I2') (' ') ($ Id.VSub_DollarName '$H2')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:84) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit reset --hard C &&\n'
                    span_id: 85
                  ) (Token id:Id.Lit_Chars val:'\tif test "$I1" != "$H1"\n' span_id:86) 
                  (Token id:Id.Lit_Chars val:'\tthen\n' span_id:87) (Token id:Id.Lit_Chars val:'\t    echo "$I1" >file1 &&\n' span_id:88) 
                  (Token id:Id.Lit_Chars val:'\t    git add file1\n' span_id:89) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:90) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tif test "$W1" != "$I1"\n'
                    span_id: 91
                  ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:92) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    echo "$W1" >file1\n'
                    span_id: 93
                  ) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:94) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tif test "$W2" != "XXXXX"\n'
                    span_id: 95
                  ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:96) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    git reset --$opt $T &&\n'
                    span_id: 97
                  ) (Token id:Id.Lit_Chars val:'\t    test "$(cat file1)" = "$W2" &&\n' span_id:98) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    git checkout-index -f -- file1 &&\n'
                    span_id: 99
                  ) (Token id:Id.Lit_Chars val:'\t    test "$(cat file1)" = "$I2" &&\n' span_id:100) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    git checkout -f HEAD -- file1 &&\n'
                    span_id: 101
                  ) (Token id:Id.Lit_Chars val:'\t    test "$(cat file1)" = "$H2"\n' span_id:102) 
                  (Token id:Id.Lit_Chars val:'\telse\n' span_id:103) (Token id:Id.Lit_Chars val:'\t    test_must_fail git reset --$opt $T\n' span_id:104) 
                  (Token id:Id.Lit_Chars val:'\tfi\n' span_id:105) (Token id:Id.Lit_Chars val:'    ' span_id:106)
                )
              }
            )
          ]
        )
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:111)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:112)) 
              (OF)
            }
          here_end_span_id: 145
          stdin_parts: [
            ('A B C D soft   A B D\n')
            ('A B C D mixed  A D D\n')
            ('A B C D hard   D D D\n')
            ('A B C D merge  XXXXX\n')
            ('A B C D keep   XXXXX\n')
            ('A B C C soft   A B C\n')
            ('A B C C mixed  A C C\n')
            ('A B C C hard   C C C\n')
            ('A B C C merge  XXXXX\n')
            ('A B C C keep   A C C\n')
            ('B B C D soft   B B D\n')
            ('B B C D mixed  B D D\n')
            ('B B C D hard   D D D\n')
            ('B B C D merge  D D D\n')
            ('B B C D keep   XXXXX\n')
            ('B B C C soft   B B C\n')
            ('B B C C mixed  B C C\n')
            ('B B C C hard   C C C\n')
            ('B B C C merge  C C C\n')
            ('B B C C keep   B C C\n')
            ('B C C D soft   B C D\n')
            ('B C C D mixed  B D D\n')
            ('B C C D hard   D D D\n')
            ('B C C D merge  XXXXX\n')
            ('B C C D keep   XXXXX\n')
            ('B C C C soft   B C C\n')
            ('B C C C mixed  B C C\n')
            ('B C C C hard   C C C\n')
            ('B C C C merge  B C C\n')
            ('B C C C keep   B C C\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'setting up branches to test with unmerged entries'
            span_id: 150
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'    git reset --hard C &&\n' span_id:155) (Token id:Id.Lit_Chars val:'    git branch branch1 &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'    git branch branch2 &&\n' span_id:157) (Token id:Id.Lit_Chars val:'    git checkout branch1 &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'    test_commit B1 file1 &&\n' span_id:159) (Token id:Id.Lit_Chars val:'    git checkout branch2 &&\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'    test_commit B file1\n' span_id:161)
        )
      }
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:165)
      cond: [(C {(read)} {(W1)} {(I1)} {(H1)} {(T)} {(opt)} {(W2)} {(I2)} {(H2)})]
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {
                (DQ ('check: ') ($ Id.VSub_DollarName '$W1') (' ') ($ Id.VSub_DollarName '$I1') (' ') 
                  ($ Id.VSub_DollarName '$H1') (' ') ($ Id.VSub_DollarName '$T') (' --') ($ Id.VSub_DollarName '$opt') (' ') ($ Id.VSub_DollarName '$W2') 
                  (' ') ($ Id.VSub_DollarName '$I2') (' ') ($ Id.VSub_DollarName '$H2')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:210) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit reset --hard B &&\n'
                    span_id: 211
                  ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge branch1 &&\n' span_id:212) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tcat file1 >X_file1 &&\n'
                    span_id: 213
                  ) (Token id:Id.Lit_Chars val:'\tif test "$W2" != "XXXXX"\n' span_id:214) 
                  (Token id:Id.Lit_Chars val:'\tthen\n' span_id:215) (Token id:Id.Lit_Chars val:'\t    git reset --$opt $T &&\n' span_id:216) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    if test "$W2" = "X"\n'
                    span_id: 217
                  ) (Token id:Id.Lit_Chars val:'\t    then\n' span_id:218) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp file1 X_file1\n'
                    span_id: 219
                  ) (Token id:Id.Lit_Chars val:'\t    else\n' span_id:220) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest "$(cat file1)" = "$W2"\n'
                    span_id: 221
                  ) (Token id:Id.Lit_Chars val:'\t    fi &&\n' span_id:222) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    git checkout-index -f -- file1 &&\n'
                    span_id: 223
                  ) (Token id:Id.Lit_Chars val:'\t    test "$(cat file1)" = "$I2" &&\n' span_id:224) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t    git checkout -f HEAD -- file1 &&\n'
                    span_id: 225
                  ) (Token id:Id.Lit_Chars val:'\t    test "$(cat file1)" = "$H2"\n' span_id:226) 
                  (Token id:Id.Lit_Chars val:'\telse\n' span_id:227) (Token id:Id.Lit_Chars val:'\t    test_must_fail git reset --$opt $T\n' span_id:228) 
                  (Token id:Id.Lit_Chars val:'\tfi\n' span_id:229) (Token id:Id.Lit_Chars val:'    ' span_id:230)
                )
              }
            )
          ]
        )
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:235)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:236)) 
              (OF)
            }
          here_end_span_id: 249
          stdin_parts: [
            ('X U B C soft   XXXXX\n')
            ('X U B C mixed  X C C\n')
            ('X U B C hard   C C C\n')
            ('X U B C merge  C C C\n')
            ('X U B C keep   XXXXX\n')
            ('X U B B soft   XXXXX\n')
            ('X U B B mixed  X B B\n')
            ('X U B B hard   B B B\n')
            ('X U B B merge  B B B\n')
            ('X U B B keep   XXXXX\n')
          ]
        )
      ]
    )
    (C {(test_done)})
  ]
)