(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:'Merge-recursive ours and theirs variants' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) 
          (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5 6 7 8 9\n' span_id:20) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\t\techo "$i"\n' span_id:22) (Token id:Id.Lit_Chars val:'\tdone >file &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tcp file elif &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\n' span_id:27) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/1/one/" -e "s/9/nine/" >file <elif &&\n'
            span_id: 28
          ) (Token id:Id.Lit_Chars val:'\tgit commit -a -m ours &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^ &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\n' span_id:32) (Token id:Id.Lit_Chars val:'\tsed -e "s/9/nueve/" >file <elif &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m theirs &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master^0\n' span_id:36)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'plain recursive - should conflict' span_id:43))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive side &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tgrep nine file &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgrep nueve file &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t! grep 9 file &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tgrep one file &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\t! grep 1 file\n' span_id:54)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'recursive favouring theirs' span_id:61))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive -Xtheirs side &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\t! grep nine file &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgrep nueve file &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t! grep 9 file &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgrep one file &&\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\t! grep 1 file\n' span_id:72)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'recursive favouring ours' span_id:79))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive -X ours side &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tgrep nine file &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\t! grep nueve file &&\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t! grep 9 file &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\tgrep one file &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\t! grep 1 file\n' span_id:90)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'binary file with -Xours/-Xtheirs' span_id:97))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\techo file binary >.gitattributes &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive -X theirs side &&\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code side HEAD -- file &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive -X ours side &&\n' span_id:109) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code master HEAD -- file\n'
            span_id: 110
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull passes -X to underlying merge' span_id:117))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard master && git pull -s recursive -Xours . side &&\n'
            span_id: 122
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard master && git pull -s recursive -X ours . side &&\n'
            span_id: 123
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard master && git pull -s recursive -Xtheirs . side &&\n'
            span_id: 124
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard master && git pull -s recursive -X theirs . side &&\n'
            span_id: 125
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit reset --hard master && test_must_fail git pull -s recursive -X bork . side\n'
            span_id: 126
          )
        )
      }
    )
    (C {(test_done)})
  ]
)