(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: 'test git worktree move, remove, lock and unlock'
                  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:'\ttest_commit init &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit worktree add source &&\n' span_id:24) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit worktree list --porcelain | grep "^worktree" >actual &&\n'
            span_id: 25
          ) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expected &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tworktree $(pwd)\n' span_id:27) (Token id:Id.Lit_Chars val:'\tworktree $(pwd)/source\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:29) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:30)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock main worktree' span_id:37))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git worktree lock .\n' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock linked worktree' span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit worktree lock --reason hahaha source &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected .git/worktrees/source/locked\n'
            span_id: 56
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'lock linked worktree from another worktree' span_id:63))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\trm .git/worktrees/source/locked &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit worktree add elsewhere &&\n' span_id:69) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C elsewhere worktree lock --reason hahaha ../source &&\n'
            span_id: 70
          ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:71) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected .git/worktrees/source/locked\n'
            span_id: 72
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock worktree twice' span_id:79))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git worktree lock source &&\n'
            span_id: 84
          ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:85) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected .git/worktrees/source/locked\n'
            span_id: 86
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'lock worktree twice (from the locked worktree)' span_id:93))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -C source worktree lock . &&\n'
            span_id: 98
          ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:99) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected .git/worktrees/source/locked\n'
            span_id: 100
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock main worktree' span_id:107))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git worktree unlock .\n'
            span_id: 112
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock linked worktree' span_id:119))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\tgit worktree unlock source &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/worktrees/source/locked\n' span_id:125)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock worktree twice' span_id:132))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git worktree unlock source &&\n'
            span_id: 137
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/worktrees/source/locked\n' span_id:138)
        )
      }
    )
    (C {(test_done)})
  ]
)