(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)})
  ]
)