(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: 'checkout must not overwrite an untracked objects'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/c &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\t>a/b/c/d &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit tag start\n' span_id:27)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create a commit where dir a/b changed to file' span_id:34))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:38) (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b file &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\trm -rf a/b &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t>a/b &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "dir to file"\n' span_id:44)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout commit with dir must not remove untracked a/b'
            span_id: 51
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) (Token id:Id.Lit_Chars val:'\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\tgit commit -m "un-track the file" &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout start &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\ttest -f a/b\n' span_id:60)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create a commit where dir a/b changed to symlink' span_id:67))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -rf a/b &&\t# cleanup if previous test failed\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -f -b symlink start &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\trm -rf a/b &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add foo a/b &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit commit -m "dir to symlink"\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout commit with dir must not remove untracked a/b'
            span_id: 85
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit commit -m "un-track the symlink" &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout start\n' span_id:93)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'the symlink remained' span_id:102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:108)
        )
      }
    )
    (C {(test_done)})
  ]
)