(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ('git merge\n') ('\n') ('Testing a custom strategy.\n') ('\n') 
                ("*   (HEAD, master) Merge commit 'c3'\n") ('|') ('| * (tag: c3) c3\n') ('* | (tag: c1) c1\n') ('|/\n') ('| * tag: c2) c2\n') ('|/\n') 
                ('* (tag: c0) c0\n')
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up custom strategy' span_id:30))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tcat >git-merge-theirs <<-EOF &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\t#!$SHELL_PATH\n' span_id:36) 
          (Token
            id: Id.Lit_Chars
            val: '\teval git read-tree --reset -u \\\\\\$\\$#\n'
            span_id: 37
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:38) (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\tchmod +x git-merge-theirs &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tPATH=.:$PATH &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\texport PATH\n' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\ttest_commit c0 c0.c &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\ttest_commit c1 c1.c &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tgit reset --keep c0 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\techo c1c1 >c1.c &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\ttest_commit c2 c2.c &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\tgit reset --keep c0 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\ttest_commit c3 c3.c\n' span_id:61)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c2 with a custom strategy' span_id:68))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse c1 >head.old &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit rev-parse c2 >second-parent.expected &&\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse c2^{tree} >tree.expected &&\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\tgit merge -s theirs c2 &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >head.new &&\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse HEAD^1 >first-parent &&\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^2 >second-parent &&\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^{tree} >tree &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c2 HEAD &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c2 &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\t! test_cmp head.old head.new &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\ttest_cmp head.old first-parent &&\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp second-parent.expected second-parent &&\n'
            span_id: 91
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp tree.expected tree &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgrep c1c1 c1.c &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\ttest -f c2.c\n' span_id:95)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'trivial merge with custom strategy' span_id:102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse c1 >head.old &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit rev-parse c3 >second-parent.expected &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse c3^{tree} >tree.expected &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\tgit merge -s theirs c3 &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >head.new &&\n' span_id:114) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse HEAD^1 >first-parent &&\n'
            span_id: 115
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^2 >second-parent &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^{tree} >tree &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c3 HEAD &&\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code c3 &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\t! test_cmp head.old head.new &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest_cmp head.old first-parent &&\n' span_id:124) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp second-parent.expected second-parent &&\n'
            span_id: 125
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp tree.expected tree &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t! test -e c1.c &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\ttest -f c3.c\n' span_id:129)
        )
      }
    )
    (C {(test_done)})
  ]
)