(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 p4 locked file behavior' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./lib-git-p4.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'start p4d' span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\tstart_p4d\n' span_id:23)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init depot' span_id:42))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) (Token id:Id.Lit_Chars val:'\t(\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\t\techo "TypeMap: +l //depot/..." | p4 typemap -i &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\t\techo file1 >file1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\t\tp4 add file1 &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "add file1"\n' span_id:52) (Token id:Id.Lit_Chars val:'\t)\n' span_id:53)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'edit with lock not taken' span_id:60))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:67) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\t\techo line2 >>file1 &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line2 in file1" &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:73) (Token id:Id.Lit_Chars val:'\t)\n' span_id:74)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add with lock not taken' span_id:81))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:88) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\t\techo line1 >>add-lock-not-taken &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\t\tgit add add-lock-not-taken &&\n' span_id:91) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "add add-lock-not-taken" &&\n'
            span_id: 92
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:94) (Token id:Id.Lit_Chars val:'\t)\n' span_id:95)
        )
      }
    )
    (command.ShFunction
      name: lock_in_another_client
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cli2)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/cli2))}
                      spids: [110]
                    )
                  ]
                )
                (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$cli2'))})
                (C {(test_when_finished)} 
                  {
                    (DQ ('p4 client -f -d client2 && rm -rf ') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:134)
                      ) ($ Id.VSub_DollarName '$cli2') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:136)
                      )
                    )
                  }
                )
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ ($ Id.VSub_DollarName '$cli2'))})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:P4CLIENT)
                                  op: assign_op.Equal
                                  rhs: {(client2)}
                                  spids: [154]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:cli)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$cli2'))}
                                  spids: [160]
                                )
                              ]
                            )
                            (C {(client_view)} {(DQ ('//depot/... //client2/...'))})
                            (C {(p4)} {(sync)})
                            (C {(p4)} {(open)} {(file1)})
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'edit with lock taken' span_id:199))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:205) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n'
            span_id: 206
          ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:208) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\t\techo line3 >>file1 &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line3 in file1" &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:214) (Token id:Id.Lit_Chars val:'\t)\n' span_id:215)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'delete with lock taken' span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:228) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n'
            span_id: 229
          ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:231) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\t\tgit rm file1 &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "delete file1" &&\n' span_id:234) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.skipSubmitEdit true &&\n'
            span_id: 235
          ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:236) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:237)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'chmod with lock taken' span_id:244))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:250) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n'
            span_id: 251
          ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:252) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:253) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:254) 
          (Token id:Id.Lit_Chars val:'\t\tchmod +x file1 &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:256) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "chmod +x file1" &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:259) (Token id:Id.Lit_Chars val:'\t)\n' span_id:260)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'copy with lock taken' span_id:267))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:273) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "cd \\"$cli\\" && p4 revert file2 && rm -f file2" &&\n'
            span_id: 274
          ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:276) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\t\tcp file1 file2 &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tgit add file2 &&\n' span_id:279) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "cp file1 to file2" &&\n'
            span_id: 280
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:281) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.detectCopies true &&\n'
            span_id: 282
          ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:284)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'move with lock taken' span_id:291))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) 
          (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:297) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync file1 && rm -f file2" &&\n'
            span_id: 298
          ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:299) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:300) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:301) 
          (Token id:Id.Lit_Chars val:'\t\tgit mv file1 file3 &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "mv file1 to file3" &&\n' span_id:303) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.skipSubmitEdit true &&\n'
            span_id: 304
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectRenames true &&\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:306) (Token id:Id.Lit_Chars val:'\t)\n' span_id:307)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:314))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:318) 
          (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:319)
        )
      }
    )
    (C {(test_done)})
  ]
)