(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git interpret-trailers'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\t: >empty &&\n'> <'\tcat >basic_message <<-\\EOF &&\n'> <'\t\tsubject\n'> <'\n'> 
          <'\t\tbody\n'> <'\tEOF\n'> <'\tcat >complex_message_body <<-\\EOF &&\n'> <'\t\tmy subject\n'> <'\n'> 
          <'\t\tmy body which is long\n'> <'\t\tand contains some special\n'> <'\t\tchars like : = ? !\n'> <'\n'> <'\tEOF\n'> 
          <'\tsed -e "s/ Z\\$/ /" >complex_message_trailers <<-\\EOF &&\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by: Z\n'> <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tcat >basic_patch <<-\\EOF\n'> <'\t\t---\n'> <'\t\t foo.txt | 2 +-\n'> <'\t\t 1 file changed, 1 insertion(+), 1 deletion(-)\n'> <'\n'> 
          <'\t\tdiff --git a/foo.txt b/foo.txt\n'> <'\t\tindex 0353767..1d91aa1 100644\n'> <'\t\t--- a/foo.txt\n'> <'\t\t+++ b/foo.txt\n'> 
          <'\t\t@@ -1,3 +1,3 @@\n'> <'\n'> <'\t\t-bar\n'> <'\t\t+baz\n'> <'\n'> <'\t\t--\n'> <'\t\t1.9.rc0.11.ga562ddc\n'> <'\n'> <'\tEOF\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'without config'>)} 
      {
        (SQ <'\n'> <'\tsed -e "s/ Z\\$/ /" >expected <<-\\EOF &&\n'> <'\n'> <'\t\tack: Peff\n'> 
          <'\t\tReviewed-by: Z\n'> <'\t\tAcked-by: Johan\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack = Peff" --trailer "Reviewed-by" \\\n'> <'\t\t--trailer "Acked-by: Johan" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'without config in another order'>)} 
      {
        (SQ <'\n'> <'\tsed -e "s/ Z\\$/ /" >expected <<-\\EOF &&\n'> <'\n'> <'\t\tAcked-by: Johan\n'> 
          <'\t\tReviewed-by: Z\n'> <'\t\tack: Peff\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "Acked-by: Johan" --trailer "Reviewed-by" \\\n'> <'\t\t--trailer "ack = Peff" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--trim-empty without config'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\n'> <'\t\tack: Peff\n'> <'\t\tAcked-by: Johan\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trim-empty --trailer ack=Peff \\\n'> 
          <'\t\t--trailer "Reviewed-by" --trailer "Acked-by: Johan" \\\n'> <'\t\t--trailer "sob:" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with config option on the command line'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\n'> <'\t\tAcked-by: Johan\n'> 
          <'\t\tReviewed-by: Peff\n'> <'\tEOF\n'> <'\t{ echo; echo "Acked-by: Johan"; } |\n'> 
          <'\tgit -c "trailer.Acked-by.ifexists=addifdifferent" interpret-trailers \\\n'> <'\t\t--trailer "Reviewed-by: Peff" --trailer "Acked-by: Johan" >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with only a title in the message'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\t\tarea: change\n'> <'\n'> 
          <'\t\tReviewed-by: Peff\n'> <'\t\tAcked-by: Johan\n'> <'\tEOF\n'> <'\techo "area: change" |\n'> 
          <'\tgit interpret-trailers --trailer "Reviewed-by: Peff" \\\n'> <'\t\t--trailer "Acked-by: Johan" >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with multiline title in the message'>)} 
      {
        (SQ <'\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\t\tplace of\n'> <'\t\tcode: change\n'> <'\n'> 
          <'\t\tReviewed-by: Peff\n'> <'\t\tAcked-by: Johan\n'> <'\tEOF\n'> <'\tprintf "%s\\n" "place of" "code: change" |\n'> 
          <'\tgit interpret-trailers --trailer "Reviewed-by: Peff" \\\n'> <'\t\t--trailer "Acked-by: Johan" >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with config setup'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.key "Acked-by: " &&\n'> <'\tcat >expected <<-\\EOF &&\n'> 
          <'\n'> <'\t\tAcked-by: Peff\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&\n'> <'\ttest_cmp expected actual &&\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "Acked-by = Peff" empty >actual &&\n'> <'\ttest_cmp expected actual &&\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "Acked-by :Peff" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with config setup and ":=" as separators'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.separators ":=" &&\n'> 
          <'\tgit config trailer.ack.key "Acked-by= " &&\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\n'> <'\t\tAcked-by= Peff\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&\n'> <'\ttest_cmp expected actual &&\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "Acked-by= Peff" empty >actual &&\n'> <'\ttest_cmp expected actual &&\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "Acked-by : Peff" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with config setup and "%" as separators'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.separators "%" &&\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\n'> 
          <'\t\tbug% 42\n'> <'\t\tcount% 10\n'> <'\t\tbug% 422\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "bug = 42" \\\n'> <'\t\t--trailer count%10 --trailer "test: stuff" \\\n'> 
          <'\t\t--trailer "bug % 422" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with "%" as separators and a message with trailers'>)} 
      {
        (SQ <'\n'> <'\tcat >special_message <<-\\EOF &&\n'> <'\t\tSpecial Message\n'> <'\n'> 
          <'\t\tbug% 42\n'> <'\t\tcount% 10\n'> <'\t\tbug% 422\n'> <'\tEOF\n'> <'\tcat >expected <<-\\EOF &&\n'> 
          <'\t\tSpecial Message\n'> <'\n'> <'\t\tbug% 42\n'> <'\t\tcount% 10\n'> <'\t\tbug% 422\n'> <'\t\tcount% 100\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer count%100 \\\n'> <'\t\tspecial_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with config setup and ":=#" as separators'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.separators ":=#" &&\n'> 
          <'\tgit config trailer.bug.key "Bug #" &&\n'> <'\tcat >expected <<-\\EOF &&\n'> <'\n'> <'\t\tBug #42\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "bug = 42" empty >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with commit basic message'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >expected &&\n'> <'\techo >>expected &&\n'> 
          <'\tgit interpret-trailers <basic_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with basic patch'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >input &&\n'> <'\tcat basic_patch >>input &&\n'> 
          <'\tcat basic_message >expected &&\n'> <'\techo >>expected &&\n'> <'\tcat basic_patch >>expected &&\n'> 
          <'\tgit interpret-trailers <input >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with commit complex message as argument'>)} 
      {
        (SQ <'\n'> <'\tcat complex_message_body complex_message_trailers >complex_message &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> 
          <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> <'\tgit interpret-trailers complex_message >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with 2 files arguments'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >>expected &&\n'> <'\techo >>expected &&\n'> 
          <'\tcat basic_patch >>expected &&\n'> <'\tgit interpret-trailers complex_message input >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with message that has comments'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >message_with_comments &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>message_with_comments <<-\\EOF &&\n'> <'\t\t# comment\n'> <'\n'> <'\t\t# other comment\n'> <'\t\tCc: Z\n'> <'\t\t# yet another comment\n'> 
          <'\t\tReviewed-by: Johan\n'> <'\t\tReviewed-by: Z\n'> <'\t\t# last comment\n'> <'\n'> <'\tEOF\n'> 
          <'\tcat basic_patch >>message_with_comments &&\n'> <'\tcat basic_message >expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> <'\t\t# comment\n'> <'\n'> 
          <'\t\tReviewed-by: Johan\n'> <'\t\tCc: Peff\n'> <'\t\t# last comment\n'> <'\n'> <'\tEOF\n'> <'\tcat basic_patch >>expected &&\n'> 
          <
'\tgit interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&\n'
          > <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with message that has an old style conflict block'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >message_with_comments &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>message_with_comments <<-\\EOF &&\n'> <'\t\t# comment\n'> <'\n'> <'\t\t# other comment\n'> <'\t\tCc: Z\n'> <'\t\t# yet another comment\n'> 
          <'\t\tReviewed-by: Johan\n'> <'\t\tReviewed-by: Z\n'> <'\t\t# last comment\n'> <'\n'> <'\t\tConflicts:\n'> <'\n'> <'\tEOF\n'> 
          <'\tcat basic_message >expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> <'\t\t# comment\n'> <'\n'> <'\t\tReviewed-by: Johan\n'> 
          <'\t\tCc: Peff\n'> <'\t\t# last comment\n'> <'\n'> <'\t\tConflicts:\n'> <'\n'> <'\tEOF\n'> 
          <
'\tgit interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&\n'
          > <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with commit complex message and trailer args'>)} 
      {
        (SQ <'\n'> <'\tcat complex_message_body >expected &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tBug #42\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "bug: 42" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with complex patch, args and --trim-empty'>)} 
      {
        (SQ <'\n'> <'\tcat complex_message >complex_patch &&\n'> 
          <'\tcat basic_patch >>complex_patch &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tBug #42\n'> <'\tEOF\n'> <'\tcat basic_patch >>expected &&\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "ack: Peff" \\\n'> <'\t\t--trailer "bug: 42" <complex_patch >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'in-place editing with basic patch'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >message &&\n'> <'\tcat basic_patch >>message &&\n'> 
          <'\tcat basic_message >expected &&\n'> <'\techo >>expected &&\n'> <'\tcat basic_patch >>expected &&\n'> 
          <'\tgit interpret-trailers --in-place message &&\n'> <'\ttest_cmp expected message\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'in-place editing with additional trailer'>)} 
      {
        (SQ <'\n'> <'\tcat basic_message >message &&\n'> <'\tcat basic_patch >>message &&\n'> 
          <'\tcat basic_message >expected &&\n'> <'\techo >>expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> <'\t\tReviewed-by: Alice\n'> <'\tEOF\n'> 
          <'\tcat basic_patch >>expected &&\n'> <'\tgit interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&\n'> 
          <'\ttest_cmp expected message\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'in-place editing on stdin disallowed'>)} 
      {
        (SQ <'\n'> 
          <
'\ttest_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place < basic_message\n'
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'in-place editing on non-existing file'>)} 
      {
        (SQ <'\n'> 
          <
'\ttest_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place nonexisting &&\n'
          > <'\ttest_path_is_missing nonexisting\n'>
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM) (Lit_Comma ',') (SANITY)} 
      {(DQ ("in-place editing doesn't clobber original file on error"))} 
      {
        (SQ <'\n'> <'\tcat basic_message >message &&\n'> <'\tchmod -r message &&\n'> 
          <
'\ttest_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&\n'
          > <'\tchmod +r message &&\n'> <'\ttest_cmp message basic_message\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "where = before"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.bug.where "before" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> <'\t\tAcked-by= Peff\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> <'\t\t--trailer "bug: 42" complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "where = after"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.where "after" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> <'\t\t--trailer "bug: 42" complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "where = end"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.review.key "Reviewed-by" &&\n'> 
          <'\tgit config trailer.review.where "end" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tReviewed-by: Junio\n'> <'\t\tReviewed-by: Johannes\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \\\n'> <'\t\tcomplex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "where = start"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.review.key "Reviewed-by" &&\n'> 
          <'\tgit config trailer.review.where "start" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tReviewed-by: Johannes\n'> <'\t\tReviewed-by: Junio\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> 
          <'\t\tReviewed-by: Z\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \\\n'> <'\t\tcomplex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'using "where = before" for a token in the middle of the message'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.review.key "Reviewed-by:" &&\n'> 
          <'\tgit config trailer.review.where "before" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:Johan\n'> 
          <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "bug: 42" \\\n'> <'\t\t--trailer "review: Johan" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "where = before" and --trim-empty'>)} 
      {
        (SQ <'\n'> <'\tcat complex_message_body >expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #46\n'> <'\t\tBug #42\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:Johan\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trim-empty --trailer "ack: Peff" \\\n'> <'\t\t--trailer "bug: 42" --trailer "review: Johan" \\\n'> 
          <'\t\t--trailer "Bug: 46" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'the default is "ifExists = addIfDifferentNeighbor"'>)} 
      {
        (SQ <'\n'> <'\tcat complex_message_body >expected &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> 
          <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'default "ifExists" is now "addIfDifferent"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ifexists "addIfDifferent" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Junio\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> 
          <'\t\t--trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = addIfDifferent" with "where = end"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "addIfDifferent" &&\n'> 
          <'\tgit config trailer.ack.where "end" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tAcked-by= Peff\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = addIfDifferent" with "where = before"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "addIfDifferent" &&\n'> 
          <'\tgit config trailer.ack.where "before" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> 
          <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = addIfDifferentNeighbor" with "where = end"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "addIfDifferentNeighbor" &&\n'> 
          <'\tgit config trailer.ack.where "end" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Junio\n'> <'\t\tTested-by: Jakub\n'> <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> 
          <'\t\t--trailer "ack: Junio" --trailer "bug: 42" \\\n'> <'\t\t--trailer "Tested-by: Jakub" --trailer "ack: Junio" \\\n'> 
          <'\t\t--trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'using "ifExists = addIfDifferentNeighbor"  with "where = after"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "addIfDifferentNeighbor" &&\n'> 
          <'\tgit config trailer.ack.where "after" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\t\tTested-by: Jakub\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" --trailer "review:" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "bug: 42" \\\n'> 
          <'\t\t--trailer "Tested-by: Jakub" --trailer "ack: Junio" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = addIfDifferentNeighbor" and --trim-empty'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "addIfDifferentNeighbor" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tcat >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tAcked-by= Peff\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trim-empty --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "Acked-by= Peff" --trailer "review:" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "bug: 42" \\\n'> 
          <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = add" with "where = end"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "add" &&\n'> 
          <'\tgit config trailer.ack.where "end" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Peff\n'> <'\t\tTested-by: Jakub\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tTested-by: Johannes\n'> <'\t\tAcked-by= Peff\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "Acked-by= Peff" --trailer "review:" \\\n'> <'\t\t--trailer "Tested-by: Jakub" --trailer "ack: Junio" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "Tested-by: Johannes" \\\n'> <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = add" with "where = after"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ack.ifExists "add" &&\n'> 
          <'\tgit config trailer.ack.where "after" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Peff\n'> 
          <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> <'\t\t--trailer "Acked-by= Peff" --trailer "review:" \\\n'> 
          <'\t\t--trailer "ack: Junio" --trailer "bug: 42" \\\n'> <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = replace"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.fix.key "Fixes: " &&\n'> 
          <'\tgit config trailer.fix.ifExists "replace" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> 
          <'\t\tSigned-off-by: Z\n'> <'\t\tFixes: 22\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" \\\n'> 
          <'\t\t--trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \\\n'> <'\t\t--trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = replace" with "where = after"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.fix.where "after" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: 22\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" \\\n'> 
          <'\t\t--trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \\\n'> <'\t\t--trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifExists = doNothing"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.fix.ifExists "doNothing" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> 
          <'\t\t--trailer "ack: Junio" --trailer "fix=22" \\\n'> <'\t\t--trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'the default is "ifMissing = add"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.cc.key "Cc: " &&\n'> 
          <'\tgit config trailer.cc.where "before" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tCc: Linus\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> <'\t\t--trailer "cc=Linus" --trailer "ack: Junio" \\\n'> 
          <'\t\t--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'when default "ifMissing" is "doNothing"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.ifmissing "doNothing" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> 
          <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> <'\t\t--trailer "cc=Linus" --trailer "ack: Junio" \\\n'> 
          <'\t\t--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual &&\n'> 
          <'\tgit config trailer.ifmissing "add"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifMissing = add" with "where = end"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.cc.key "Cc: " &&\n'> 
          <'\tgit config trailer.cc.where "end" &&\n'> <'\tgit config trailer.cc.ifMissing "add" &&\n'> <'\tcat complex_message_body >expected &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\t\tCc: Linus\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "fix=22" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifMissing = add" with "where = before"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.cc.key "Cc: " &&\n'> 
          <'\tgit config trailer.cc.where "before" &&\n'> <'\tgit config trailer.cc.ifMissing "add" &&\n'> <'\tcat complex_message_body >expected &&\n'> 
          <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tCc: Linus\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> 
          <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> <'\t\t--trailer "ack: Junio" --trailer "fix=22" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using "ifMissing = doNothing"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.cc.ifMissing "doNothing" &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> 
          <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=53" \\\n'> 
          <'\t\t--trailer "cc=Linus" --trailer "ack: Junio" \\\n'> <'\t\t--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \\\n'> 
          <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'default "where" is now "after"'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.where "after" &&\n'> 
          <'\tgit config --unset trailer.ack.where &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tBug #42\n'> <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tAcked-by= Peff\n'> <'\t\tAcked-by= Peff\n'> 
          <'\t\tAcked-by= Junio\n'> <'\t\tAcked-by= Peff\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\t\tTested-by: Jakub\n'> 
          <'\t\tTested-by: Johannes\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "ack: Peff" \\\n'> 
          <'\t\t--trailer "Acked-by= Peff" --trailer "review:" \\\n'> <'\t\t--trailer "Tested-by: Jakub" --trailer "ack: Junio" \\\n'> 
          <'\t\t--trailer "bug: 42" --trailer "Tested-by: Johannes" \\\n'> <'\t\t--trailer "ack: Peff" <complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with simple command'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.sign.key "Signed-off-by: " &&\n'> 
          <'\tgit config trailer.sign.where "after" &&\n'> <'\tgit config trailer.sign.ifExists "addIfDifferentNeighbor" &&\n'> 
          <'\tgit config trailer.sign.command "echo \\"A U Thor <author@example.com>\\"" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tSigned-off-by: A U Thor <author@example.com>\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=22" \\\n'> 
          <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with command using commiter information'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.sign.ifExists "addIfDifferent" &&\n'> 
          <
'\tgit config trailer.sign.command "echo \\"\\$GIT_COMMITTER_NAME <\\$GIT_COMMITTER_EMAIL>\\"" &&\n'
          > <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tSigned-off-by: C O Mitter <committer@example.com>\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=22" \\\n'> 
          <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with command using author information'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.sign.key "Signed-off-by: " &&\n'> 
          <'\tgit config trailer.sign.where "after" &&\n'> <'\tgit config trailer.sign.ifExists "addIfDifferentNeighbor" &&\n'> 
          <
'\tgit config trailer.sign.command "echo \\"\\$GIT_AUTHOR_NAME <\\$GIT_AUTHOR_EMAIL>\\"" &&\n'
          > <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-\\EOF &&\n'> 
          <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tSigned-off-by: A U Thor <author@example.com>\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=22" \\\n'> 
          <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup a commit'>)} 
      {
        (SQ <'\n'> <'\techo "Content of the first commit." > a.txt &&\n'> <'\tgit add a.txt &&\n'> 
          <'\tgit commit -m "Add file a.txt"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with command using $ARG'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.fix.ifExists "replace" &&\n'> 
          <
'\tgit config trailer.fix.command "git log -1 --oneline --format=\\"%h (%s)\\" --abbrev-commit --abbrev=14 \\$ARG" &&\n'
          > <'\tFIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) &&\n'> 
          <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-EOF &&\n'> <'\t\tFixes: $FIXED\n'> <'\t\tAcked-by= Z\n'> 
          <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> <'\t\tSigned-off-by: A U Thor <author@example.com>\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:" --trailer "fix=HEAD" \\\n'> <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with failing command using $ARG'>)} 
      {
        (SQ <'\n'> <'\tgit config trailer.fix.ifExists "replace" &&\n'> 
          <'\tgit config trailer.fix.command "false \\$ARG" &&\n'> <'\tcat complex_message_body >expected &&\n'> <'\tsed -e "s/ Z\\$/ /" >>expected <<-EOF &&\n'> 
          <'\t\tFixes: Z\n'> <'\t\tAcked-by= Z\n'> <'\t\tReviewed-by:\n'> <'\t\tSigned-off-by: Z\n'> 
          <'\t\tSigned-off-by: A U Thor <author@example.com>\n'> <'\tEOF\n'> <'\tgit interpret-trailers --trailer "review:" --trailer "fix=HEAD" \\\n'> 
          <'\t\t<complex_message >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with empty tokens'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset trailer.fix.command &&\n'> <'\tcat >expected <<-EOF &&\n'> 
          <'\n'> <'\t\tSigned-off-by: A U Thor <author@example.com>\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer ":" --trailer ":test" >actual <<-EOF &&\n'> <'\tEOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with command but no key'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset trailer.sign.key &&\n'> <'\tcat >expected <<-EOF &&\n'> <'\n'> 
          <'\t\tsign: A U Thor <author@example.com>\n'> <'\tEOF\n'> <'\tgit interpret-trailers >actual <<-EOF &&\n'> <'\tEOF\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'with no command and no key'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset trailer.review.key &&\n'> <'\tcat >expected <<-EOF &&\n'> 
          <'\n'> <'\t\treview: Junio\n'> <'\t\tsign: A U Thor <author@example.com>\n'> <'\tEOF\n'> 
          <'\tgit interpret-trailers --trailer "review:Junio" >actual <<-EOF &&\n'> <'\tEOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)