(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'Test --follow should always find copies hard in git log.\n'> <'\n'>)}
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)})
    (command.SimpleCommand
      words: [{(echo)} {(SQ <'Line 1\n'> <'Line 2\n'> <'Line 3\n'>)}]
      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(path0)})]
    )
    (C {(test_expect_success)} {(SQ <'add a file path0 and commit.'>)} 
      {(SQ <'git add path0 &&\n'> <'     git commit -m "Add path0"'>)}
    )
    (command.SimpleCommand
      words: [{(echo)} {(SQ <'New line 1\n'> <'New line 2\n'> <'New line 3\n'>)}]
      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(path0)})]
    )
    (C {(test_expect_success)} {(SQ <'Change path0.'>)} 
      {(SQ <'git add path0 &&\n'> <'     git commit -m "Change path0"'>)}
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Less '<'> fd:16777215 arg_word:{(path0)})
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(path1)})
      ]
    )
    (C {(test_expect_success)} {(SQ <'copy path0 to path1.'>)} 
      {(SQ <'git add path1 &&\n'> <'     git commit -m "Copy path1 from path0"'>)}
    )
    (C {(test_expect_success)} {(SQ <'find the copy path0 -> path1 harder'>)} 
      {(SQ <'git log --follow --name-status --pretty="format:%s"  path1 > current'>)}
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
          here_end_span_id: 142
          stdin_parts: [
            ('Copy path1 from path0\n')
            ('C100\tpath0\tpath1\n')
            ('\n')
            ('Change path0\n')
            ('M\tpath0\n')
            ('\n')
            ('Add path0\n')
            ('A\tpath0\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'validate the output.'>)} 
      {(SQ <'compare_diff_patch current expected'>)}
    )
    (C {(test_done)})
  ]
)