(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: 'diff -r -t shows directory additions and deletions'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\tmkdir dc dr dt &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\t>dc/1 &&\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\t>dr/2 &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\t>dt/3 &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\t>fc &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\t>fr &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t>ft &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\n' span_id:31) (Token id:Id.Lit_Chars val:'\trm -fr dt dr ft fr &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tmkdir da ft &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tfor p in dc/1 da/4 dt ft/5 fc\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\techo hello >$p || exit\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m second\n' span_id:41)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:47) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:50)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:51)) (OF)}
          here_end_span_id: 68
          stdin_parts: [
            ('A\tda\n')
            ('A\tda/4\n')
            ('M\tdc\n')
            ('M\tdc/1\n')
            ('D\tdr\n')
            ('D\tdr/2\n')
            ('A\tdt\n')
            ('D\tdt\n')
            ('D\tdt/3\n')
            ('M\tfc\n')
            ('D\tfr\n')
            ('D\tft\n')
            ('A\tft\n')
            ('A\tft/5\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(verify)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -r -t --name-status HEAD^ HEAD >actual &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:77)
        )
      }
    )
    (C {(test_done)})
  ]
)