(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 blame on conflicted files' span_id:10))}
          spids: [8]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup first case' span_id:21))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\t# Create the old file\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo "Old line" > file1 &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:28) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --author "Old Line <ol@localhost>" -m file1.a &&\n'
            span_id: 29
          ) (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\t# Branch\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b foo &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\t# Do an ugly move and change\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit rm file1 &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\techo "New line ..."  > file2 &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\techo "... and more" >> file2 &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tgit commit --author "U Gly <ug@localhost>" -m ugly &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\n' span_id:40) (Token id:Id.Lit_Chars val:'\t# Back to master and change something\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\techo "\n' span_id:43) (Token id:Id.Lit_Chars val:'\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'bla" >> file1 &&\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --author "Old Line <ol@localhost>" -a -m file1.b &&\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t# Back to foo and merge master\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit checkout foo &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tif git merge master; then\n' span_id:50) (Token id:Id.Lit_Chars val:'\t\techo needed conflict here\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t\texit 1\n' span_id:52) (Token id:Id.Lit_Chars val:'\telse\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo merge failed - resolving automatically\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\techo "New line ...\n' span_id:56) (Token id:Id.Lit_Chars val:'... and more\n' span_id:57) (Token id:Id.Lit_Chars val:'\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'bla\n' span_id:59) (Token id:Id.Lit_Chars val:'Even more" > file2 &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tgit rm file1 &&\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --author "M Result <mr@localhost>" -a -m merged &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Back to master and change file1 again\n'
            span_id: 64
          ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tsed s/bla/foo/ <file1 >X &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\trm file1 &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tmv X file1 &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --author "No Bla <nb@localhost>" -a -m replace &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\t# Try to merge into foo again\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit checkout foo &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tif git merge master; then\n' span_id:73) (Token id:Id.Lit_Chars val:'\t\techo needed conflict here\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\t\texit 1\n' span_id:75) (Token id:Id.Lit_Chars val:'\telse\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\t\techo merge failed - test is setup\n' span_id:77) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'blame runs on unconflicted file while other file has conflicts'
            span_id: 87
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit blame file2\n' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'blame does not crash with conflicted file in stages 1,3'
            span_id: 99
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tgit blame file1\n' span_id:104)
        )
      }
    )
    (C {(test_done)})
  ]
)