(CommandList
  children: [
    (FuncDef
      name: test_diff_frobnitz
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(file1)} spids:[16])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {('#include <stdio.h>\n') ('\n') ('// Frobs foo heartily\n') 
                      ('int frobnitz(int foo)\n') ('{\n') ('    int i;\n') ('    for(i = 0; i < 10; i++)\n') ('    {\n') 
                      ('        printf("Your answer is: ");\n') ('        printf("%d\\n", foo);\n') ('    }\n') ('}\n') ('\n') ('int fact(int n)\n') ('{\n') 
                      ('    if(n > 1)\n') ('    {\n') ('        return fact(n-1) * n;\n') ('    }\n') ('    return 1;\n') ('}\n') ('\n') 
                      ('int main(int argc, char **argv)\n') ('{\n') ('    frobnitz(fact(10));\n') ('}\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [19]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(file2)} spids:[27])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {('#include <stdio.h>\n') ('\n') ('int fib(int n)\n') ('{\n') ('    if(n > 2)\n') 
                      ('    {\n') ('        return fib(n-1) + fib(n-2);\n') ('    }\n') ('    return 1;\n') ('}\n') ('\n') 
                      ('// Frobs foo heartily\n') ('int frobnitz(int foo)\n') ('{\n') ('    int i;\n') ('    for(i = 0; i < 10; i++)\n') ('    {\n') 
                      ('        printf("%d\\n", foo);\n') ('    }\n') ('}\n') ('\n') ('int main(int argc, char **argv)\n') ('{\n') ('    frobnitz(fib(10));\n') 
                      ('}\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [30]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[38])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {('diff --git a/file1 b/file2\n') ('index 6faa5a3..e3af329 100644\n') 
                      ('--- a/file1\n') ('+++ b/file2\n') ('@@ -1,26 +1,25 @@\n') (' #include <stdio.h>\n') (' \n') ('+int fib(int n)\n') ('+{\n') 
                      ('+    if(n > 2)\n') ('+    {\n') ('+        return fib(n-1) + fib(n-2);\n') ('+    }\n') ('+    return 1;\n') ('+}\n') ('+\n') 
                      (' // Frobs foo heartily\n') (' int frobnitz(int foo)\n') (' {\n') ('     int i;\n') ('     for(i = 0; i < 10; i++)\n') ('     {\n') 
                      ('-        printf("Your answer is: ");\n') ('         printf("%d\\n", foo);\n') ('     }\n') (' }\n') (' \n') ('-int fact(int n)\n') ('-{\n') 
                      ('-    if(n > 1)\n') ('-    {\n') ('-        return fact(n-1) * n;\n') ('-    }\n') ('-    return 1;\n') ('-}\n') ('-\n') 
                      (' int main(int argc, char **argv)\n') (' {\n') ('-    frobnitz(fact(10));\n') ('+    frobnitz(fib(10));\n') (' }\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [41]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:STRATEGY)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [47]
                )
              ]
              spids: [47]
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$STRATEGY') (' diff'))} 
              {
                (SQ <'\n'> 
                  <
'\t\ttest_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&\n'
                  > <'\t\ttest_cmp expect output\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$STRATEGY') (' diff output is valid'))} 
              {
                (SQ <'\n'> <'\t\tmv file2 expect &&\n'> <'\t\tgit apply < output &&\n'> 
                  <'\t\ttest_cmp expect file2\n'> <'\t'>
                )
              }
            )
          ]
          spids: [11]
        )
      spids: [7 10]
    )
    (FuncDef
      name: test_diff_unique
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(uniq1)} spids:[95])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n')}
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [98]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(uniq2)} spids:[106])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {('a\n') ('b\n') ('c\n') ('d\n') ('e\n') ('f\n')}
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [109]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[117])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {('diff --git a/uniq1 b/uniq2\n') ('index b414108..0fdf397 100644\n') 
                      ('--- a/uniq1\n') ('+++ b/uniq2\n') ('@@ -1,6 +1,6 @@\n') ('-1\n') ('-2\n') ('-3\n') ('-4\n') ('-5\n') ('-6\n') ('+a\n') 
                      ('+b\n') ('+c\n') ('+d\n') ('+e\n') ('+f\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [120]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:STRATEGY)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [126]
                )
              ]
              spids: [126]
            )
            (C {(test_expect_success)} {(SQ <'completely different files'>)} 
              {
                (SQ <'\n'> 
                  <
'\t\ttest_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&\n'
                  > <'\t\ttest_cmp expect output\n'> <'\t'>
                )
              }
            )
          ]
          spids: [90]
        )
      spids: [86 89]
    )
  ]
)