(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'combined and merge diff handle binary files and textconv'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'setup binary merge conflict'>)} 
      {
        (SQ <'\n'> <'\techo oneQ1 | q_to_nul >binary &&\n'> <'\tgit add binary &&\n'> 
          <'\tgit commit -m one &&\n'> <'\techo twoQ2 | q_to_nul >binary &&\n'> <'\tgit commit -a -m two &&\n'> 
          <'\tgit checkout -b branch-binary HEAD^ &&\n'> <'\techo threeQ3 | q_to_nul >binary &&\n'> <'\tgit commit -a -m three &&\n'> 
          <'\ttest_must_fail git merge master &&\n'> <'\techo resolvedQhooray | q_to_nul >binary &&\n'> <'\tgit commit -a -m resolved\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 56
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --git a/binary b/binary\n'>
                <'index 7ea6ded..9563691 100644\n'>
                <'Binary files a/binary and b/binary differ\n'>
                <'resolved\n'>
                <'\n'>
                <'diff --git a/binary b/binary\n'>
                <'index 6197570..9563691 100644\n'>
                <'Binary files a/binary and b/binary differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -m indicates binary-ness'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -m >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 85
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --combined binary\n'>
                <'index 7ea6ded,6197570..9563691\n'>
                <'Binary files differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -c indicates binary-ness'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -c >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 114
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --cc binary\n'>
                <'index 7ea6ded,6197570..9563691\n'>
                <'Binary files differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff --cc indicates binary-ness'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s --cc >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'setup non-binary with binary attribute'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\ttest_commit one text &&\n'> 
          <'\ttest_commit two text &&\n'> <'\tgit checkout -b branch-text HEAD^ &&\n'> <'\ttest_commit three text &&\n'> 
          <'\ttest_must_fail git merge master &&\n'> <'\ttest_commit resolved text &&\n'> <'\techo text -diff >.gitattributes\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 167
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --git a/text b/text\n'>
                <'index 2bdf67a..2ab19ae 100644\n'>
                <'Binary files a/text and b/text differ\n'>
                <'resolved\n'>
                <'\n'>
                <'diff --git a/text b/text\n'>
                <'index f719efd..2ab19ae 100644\n'>
                <'Binary files a/text and b/text differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -m respects binary attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -m >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 196
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --combined text\n'>
                <'index 2bdf67a,f719efd..2ab19ae\n'>
                <'Binary files differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -c respects binary attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -c >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 225
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --cc text\n'>
                <'index 2bdf67a,f719efd..2ab19ae\n'>
                <'Binary files differ\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff --cc respects binary attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s --cc >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'setup textconv attribute'>)} 
      {
        (SQ <'\n'> <'\techo "text diff=upcase" >.gitattributes &&\n'> 
          <'\tgit config diff.upcase.textconv "tr a-z A-Z <"\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 280
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --git a/text b/text\n'>
                <'index 2bdf67a..2ab19ae 100644\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@ -1 +1 @@\n'>
                <'-THREE\n'>
                <'+RESOLVED\n'>
                <'resolved\n'>
                <'\n'>
                <'diff --git a/text b/text\n'>
                <'index f719efd..2ab19ae 100644\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@ -1 +1 @@\n'>
                <'-TWO\n'>
                <'+RESOLVED\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -m respects textconv attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -m >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 314
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --combined text\n'>
                <'index 2bdf67a,f719efd..2ab19ae\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@@ -1,1 -1,1 +1,1 @@@\n'>
                <'- THREE\n'>
                <' -TWO\n'>
                <'++RESOLVED\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff -c respects textconv attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s -c >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 348
              stdin_parts: [
                <'resolved\n'>
                <'\n'>
                <'diff --cc text\n'>
                <'index 2bdf67a,f719efd..2ab19ae\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@@ -1,1 -1,1 +1,1 @@@\n'>
                <'- THREE\n'>
                <' -TWO\n'>
                <'++RESOLVED\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff --cc respects textconv attribute'>)} 
      {(SQ <'\n'> <'\tgit show --format=%s --cc >actual &&\n'> <'\ttest_cmp expect actual\n'>)}
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 380
              stdin_parts: [
                <'diff --combined text\n'>
                <'index 2bdf67a,f719efd..2ab19ae\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@@ -1,1 -1,1 +1,1 @@@\n'>
                <'- three\n'>
                <' -two\n'>
                <'++resolved\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff-tree plumbing does not respect textconv'>)} 
      {
        (SQ <'\n'> <'\tgit diff-tree HEAD -c -p >full &&\n'> <'\ttail -n +2 full >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 415
              stdin_parts: [
                <'diff --cc text\n'>
                <'index 2bdf67a,f719efd..0000000\n'>
                <'--- a/text\n'>
                <'+++ b/text\n'>
                <'@@@ -1,1 -1,1 +1,5 @@@\n'>
                <'++<<<<<<< HEAD\n'>
                <' +THREE\n'>
                <'++=======\n'>
                <'+ TWO\n'>
                <'++>>>>>>> MASTER\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'diff --cc respects textconv on worktree file'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard HEAD^ &&\n'> <'\ttest_must_fail git merge master &&\n'> 
          <'\tgit diff >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)