(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:'git status and symlinks' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\techo .gitignore >.gitignore &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\techo actual >>.gitignore &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\techo expect >>.gitignore &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\techo x >dir/file1 &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\techo y >dir/file2 &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tgit tag initial\n' span_id:31)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'symlink to a directory' span_id:40))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm symlink" &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tln -s dir symlink &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\techo "?? symlink" >expect &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tgit status --porcelain >actual &&\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:49)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'symlink replacing a directory' span_id:58))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:62) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -rf copy && git reset --hard initial" &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\tmkdir copy &&\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\tcp dir/file1 copy/file1 &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\techo "changed in copy" >copy/file2 &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tgit add copy &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit commit -m second &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\trm -rf copy &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tln -s dir copy &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\techo " D copy/file1" >expect &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\techo " D copy/file2" >>expect &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\techo "?? copy" >>expect &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit status --porcelain >actual &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:75)
        )
      }
    )
    (C {(test_done)})
  ]
)