(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'typechange rename detection'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f foo bar &&\n'> <'\tcat "$TEST_DIRECTORY"/../COPYING >foo &&\n'> 
          <'\ttest_ln_s_add linklink bar &&\n'> <'\tgit add foo &&\n'> <'\tgit commit -a -m Initial &&\n'> <'\tgit tag one &&\n'> <'\n'> 
          <'\tgit rm -f foo bar &&\n'> <'\tcat "$TEST_DIRECTORY"/../COPYING >bar &&\n'> <'\ttest_ln_s_add linklink foo &&\n'> 
          <'\tgit add bar &&\n'> <'\tgit commit -a -m Second &&\n'> <'\tgit tag two &&\n'> <'\n'> <'\tgit rm -f foo bar &&\n'> 
          <'\tcat "$TEST_DIRECTORY"/../COPYING >foo &&\n'> <'\tgit add foo &&\n'> <'\tgit commit -a -m Third &&\n'> <'\tgit tag three &&\n'> <'\n'> 
          <'\tmv foo bar &&\n'> <'\ttest_ln_s_add linklink foo &&\n'> <'\tgit add bar &&\n'> <'\tgit commit -a -m Fourth &&\n'> 
          <'\tgit tag four &&\n'> <'\n'> <'\t# This is purely for sanity check\n'> <'\n'> <'\tgit rm -f foo bar &&\n'> 
          <'\tcat "$TEST_DIRECTORY"/../COPYING >foo &&\n'> <'\tcat "$TEST_DIRECTORY"/../Makefile >bar &&\n'> <'\tgit add foo bar &&\n'> 
          <'\tgit commit -a -m Fifth &&\n'> <'\tgit tag five &&\n'> <'\n'> <'\tgit rm -f foo bar &&\n'> 
          <'\tcat "$TEST_DIRECTORY"/../Makefile >foo &&\n'> <'\tcat "$TEST_DIRECTORY"/../COPYING >bar &&\n'> <'\tgit add foo bar &&\n'> 
          <'\tgit commit -a -m Sixth &&\n'> <'\tgit tag six\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cross renames to be detected for regular files'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit diff-tree five six -r --name-status -B -M | sort >actual &&\n'> 
          <'\t{\n'> <'\t\techo "R100\tfoo\tbar"\n'> <'\t\techo "R100\tbar\tfoo"\n'> <'\t} | sort >expect &&\n'> 
          <'\ttest_cmp expect actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cross renames to be detected for typechange'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit diff-tree one two -r --name-status -B -M | sort >actual &&\n'> 
          <'\t{\n'> <'\t\techo "R100\tfoo\tbar"\n'> <'\t\techo "R100\tbar\tfoo"\n'> <'\t} | sort >expect &&\n'> 
          <'\ttest_cmp expect actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'moves and renames'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit diff-tree three four -r --name-status -B -M | sort >actual &&\n'> 
          <'\t{\n'> <'\t\t# see -B -M (#6) in t4008\n'> <'\t\techo "C100\tfoo\tbar"\n'> <'\t\techo "T100\tfoo"\n'> 
          <'\t} | sort >expect &&\n'> <'\ttest_cmp expect actual\n'> <'\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)