(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 criss-cross merge' span_id:23))}
          spids: [21]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prepare repository' span_id:34))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo "1\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'2\n' span_id:40) (Token id:Id.Lit_Chars val:'3\n' span_id:41) (Token id:Id.Lit_Chars val:'4\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'5\n' span_id:43) (Token id:Id.Lit_Chars val:'6\n' span_id:44) (Token id:Id.Lit_Chars val:'7\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'8\n' span_id:46) (Token id:Id.Lit_Chars val:'9" > file &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'git add file &&\n' span_id:48) (Token id:Id.Lit_Chars val:'git commit -m "Initial commit" file &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'git branch A &&\n' span_id:50) (Token id:Id.Lit_Chars val:'git branch B &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'git checkout A &&\n' span_id:52) (Token id:Id.Lit_Chars val:'echo "1\n' span_id:53) (Token id:Id.Lit_Chars val:'2\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'3\n' span_id:55) (Token id:Id.Lit_Chars val:'4\n' span_id:56) (Token id:Id.Lit_Chars val:'5\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'6\n' span_id:58) (Token id:Id.Lit_Chars val:'7\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'8 changed in B8, branch A\n' span_id:60) (Token id:Id.Lit_Chars val:'9" > file &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'git commit -m "B8" file &&\n' span_id:62) (Token id:Id.Lit_Chars val:'git checkout B &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'echo "1\n' span_id:64) (Token id:Id.Lit_Chars val:'2\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'3 changed in C3, branch B\n' span_id:66) (Token id:Id.Lit_Chars val:'4\n' span_id:67) (Token id:Id.Lit_Chars val:'5\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'6\n' span_id:69) (Token id:Id.Lit_Chars val:'7\n' span_id:70) (Token id:Id.Lit_Chars val:'8\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'9\n' span_id:72) (Token id:Id.Lit_Chars val:'" > file &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'git commit -m "C3" file &&\n' span_id:74) (Token id:Id.Lit_Chars val:'git branch C3 &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'git merge -m "pre E3 merge" A &&\n' span_id:76) (Token id:Id.Lit_Chars val:'echo "1\n' span_id:77) (Token id:Id.Lit_Chars val:'2\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '3 changed in E3, branch B. New file size\n'
            span_id: 79
          ) (Token id:Id.Lit_Chars val:'4\n' span_id:80) (Token id:Id.Lit_Chars val:'5\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'6\n' span_id:82) (Token id:Id.Lit_Chars val:'7\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'8 changed in B8, branch A\n' span_id:84) (Token id:Id.Lit_Chars val:'9\n' span_id:85) (Token id:Id.Lit_Chars val:'" > file &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'git commit -m "E3" file &&\n' span_id:87) (Token id:Id.Lit_Chars val:'git checkout A &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'git merge -m "pre D8 merge" C3 &&\n' span_id:89) (Token id:Id.Lit_Chars val:'echo "1\n' span_id:90) (Token id:Id.Lit_Chars val:'2\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'3 changed in C3, branch B\n' span_id:92) (Token id:Id.Lit_Chars val:'4\n' span_id:93) (Token id:Id.Lit_Chars val:'5\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'6\n' span_id:95) (Token id:Id.Lit_Chars val:'7\n' span_id:96) 
          (Token
            id: Id.Lit_Chars
            val: '8 changed in D8, branch A. New file size 2\n'
            span_id: 97
          ) (Token id:Id.Lit_Chars val:'9" > file &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'git commit -m D8 file' span_id:99)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Criss-cross merge' span_id:106))} 
      {(SQ (Token id:Id.Lit_Chars val:'git merge -m "final merge" B' span_id:110))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:116)
          fd: -1
          arg_word: {(file-expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:120)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 133
          stdin_parts: [
            ('1\n')
            ('2\n')
            ('3 changed in E3, branch B. New file size\n')
            ('4\n')
            ('5\n')
            ('6\n')
            ('7\n')
            ('8 changed in D8, branch A. New file size 2\n')
            ('9\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Criss-cross merge result' span_id:138))} 
      {(SQ (Token id:Id.Lit_Chars val:'cmp file file-expect' span_id:142))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Criss-cross merge fails (-s resolve)' span_id:149))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git reset --hard A^ &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: 'test_must_fail git merge -s resolve -m "final merge" B'
            span_id: 155
          )
        )
      }
    )
    (C {(test_done)})
  ]
)