(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'Test special whitespace in diff engine.\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)})
    (C {(test_expect_success)} {(DQ ("Ray Lehtiniemi's example"))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tdo {\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\t   nothing;\n' span_id:41) (Token id:Id.Lit_Chars val:'\t} while (0);\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:43) (Token id:Id.Lit_Chars val:'\tgit update-index --add x &&\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\n' span_id:45) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:47) (Token id:Id.Lit_Chars val:'\t{\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t   nothing;\n' span_id:49) (Token id:Id.Lit_Chars val:'\t}\n' span_id:50) (Token id:Id.Lit_Chars val:'\twhile (0);\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:52) (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expect &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tindex adf3937..6edc172 100644\n' span_id:56) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:58) (Token id:Id.Lit_Chars val:'\t@@ -1,3 +1,5 @@\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\t-do {\n' span_id:60) (Token id:Id.Lit_Chars val:'\t+do\n' span_id:61) (Token id:Id.Lit_Chars val:'\t+{\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\t    nothing;\n' span_id:63) (Token id:Id.Lit_Chars val:'\t-} while (0);\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\t+}\n' span_id:65) (Token id:Id.Lit_Chars val:'\t+while (0);\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:67) (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tgit diff >out &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit diff -w >out &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tgit diff -b >out &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'another test, without options' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\ttr Q "\\015" <<-\\EOF >x &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\twhitespace at beginning\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\twhitespace change\n' span_id:90) (Token id:Id.Lit_Chars val:'\twhitespace in the middle\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\twhitespace at end\n' span_id:92) (Token id:Id.Lit_Chars val:'\tunchanged line\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\tCR at endQ\n' span_id:94) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:95) (Token id:Id.Lit_Chars val:'\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\ttr "_" " " <<-\\EOF >x &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t_\twhitespace at beginning\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\twhitespace \t change\n' span_id:101) (Token id:Id.Lit_Chars val:'\twhite space in the middle\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\twhitespace at end__\n' span_id:103) (Token id:Id.Lit_Chars val:'\tunchanged line\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\tCR at end\n' span_id:105) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:106) (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\ttr "Q_" "\\015 " <<-\\EOF >expect &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tindex d99af23..22d9f73 100644\n' span_id:110) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:112) (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,6 @@\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\t-whitespace at beginning\n' span_id:114) (Token id:Id.Lit_Chars val:'\t-whitespace change\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\t-whitespace in the middle\n' span_id:116) (Token id:Id.Lit_Chars val:'\t-whitespace at end\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\t+ \twhitespace at beginning\n' span_id:118) (Token id:Id.Lit_Chars val:'\t+whitespace \t change\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\t+white space in the middle\n' span_id:120) (Token id:Id.Lit_Chars val:'\t+whitespace at end__\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t unchanged line\n' span_id:122) (Token id:Id.Lit_Chars val:'\t-CR at endQ\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\t+CR at end\n' span_id:124) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:125) (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tgit diff >out &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\n' span_id:129) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\tgit diff -w >out &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id:Id.Lit_Chars val:'\tgit diff -w -b >out &&\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\n' span_id:136) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff -w --ignore-space-at-eol >out &&\n'
            span_id: 137
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit diff -w -b --ignore-space-at-eol >out &&\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\n' span_id:142) (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\ttr "Q_" "\\015 " <<-\\EOF >expect &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\tindex d99af23..22d9f73 100644\n' span_id:146) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:148) (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,6 @@\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\t-whitespace at beginning\n' span_id:150) (Token id:Id.Lit_Chars val:'\t+_\twhitespace at beginning\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\t whitespace \t change\n' span_id:152) (Token id:Id.Lit_Chars val:'\t-whitespace in the middle\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\t+white space in the middle\n' span_id:154) (Token id:Id.Lit_Chars val:'\t whitespace at end__\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\t unchanged line\n' span_id:156) (Token id:Id.Lit_Chars val:'\t CR at end\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit diff -b >out &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff -b --ignore-space-at-eol >out &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out &&\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id:Id.Lit_Chars val:'\ttr "Q_" "\\015 " <<-\\EOF >expect &&\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:166) (Token id:Id.Lit_Chars val:'\tindex d99af23..22d9f73 100644\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:168) (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,6 @@\n' span_id:170) (Token id:Id.Lit_Chars val:'\t-whitespace at beginning\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\t-whitespace change\n' span_id:172) (Token id:Id.Lit_Chars val:'\t-whitespace in the middle\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\t+_\twhitespace at beginning\n' span_id:174) (Token id:Id.Lit_Chars val:'\t+whitespace \t change\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t+white space in the middle\n' span_id:176) (Token id:Id.Lit_Chars val:'\t whitespace at end__\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\t unchanged line\n' span_id:178) (Token id:Id.Lit_Chars val:'\t CR at end\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:180) (Token id:Id.Lit_Chars val:'\tgit diff --ignore-space-at-eol >out &&\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:182)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: only new lines' span_id:189))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 5 >x &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 5 | sed "/3/i\\\\\n' span_id:196) (Token id:Id.Lit_Chars val:'" >x &&\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --ignore-blank-lines >out &&\n'
            span_id: 198
          ) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp out expect\n' span_id:200)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: only new lines with space' span_id:207))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 5 >x &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 5 | sed "/3/i\\\\\n' span_id:214) (Token id:Id.Lit_Chars val:' " >x &&\n' span_id:215) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff -w --ignore-blank-lines >out &&\n'
            span_id: 216
          ) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:217) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp out expect\n' span_id:218)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: after change' span_id:225))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\t1\n' span_id:231) (Token id:Id.Lit_Chars val:'\t2\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\n' span_id:233) (Token id:Id.Lit_Chars val:'\t3\n' span_id:234) (Token id:Id.Lit_Chars val:'\t4\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:236) (Token id:Id.Lit_Chars val:'\n' span_id:237) (Token id:Id.Lit_Chars val:'\t6\n' span_id:238) 
          (Token id:Id.Lit_Chars val:'\t7\n' span_id:239) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:240) 
          (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\tchange\n' span_id:243) (Token id:Id.Lit_Chars val:'\n' span_id:244) (Token id:Id.Lit_Chars val:'\t1\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:246) (Token id:Id.Lit_Chars val:'\t3\n' span_id:247) (Token id:Id.Lit_Chars val:'\t4\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:249) (Token id:Id.Lit_Chars val:'\t6\n' span_id:250) (Token id:Id.Lit_Chars val:'\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\t7\n' span_id:252) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:253) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&\n'
            span_id: 254
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:256) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:258) (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,7 @@\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:260) (Token id:Id.Lit_Chars val:'\t+\n' span_id:261) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:262) 
          (Token id:Id.Lit_Chars val:'\t 2\n' span_id:263) (Token id:Id.Lit_Chars val:'\t-\n' span_id:264) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\t 4\n' span_id:266) (Token id:Id.Lit_Chars val:'\t 5\n' span_id:267) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:269)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: before change' span_id:276))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:280) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\t1\n' span_id:282) (Token id:Id.Lit_Chars val:'\t2\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\n' span_id:284) (Token id:Id.Lit_Chars val:'\t3\n' span_id:285) (Token id:Id.Lit_Chars val:'\t4\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:287) (Token id:Id.Lit_Chars val:'\t6\n' span_id:288) (Token id:Id.Lit_Chars val:'\t7\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:290) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id:Id.Lit_Chars val:'\t1\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:295) (Token id:Id.Lit_Chars val:'\t3\n' span_id:296) (Token id:Id.Lit_Chars val:'\t4\n' span_id:297) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:298) (Token id:Id.Lit_Chars val:'\n' span_id:299) (Token id:Id.Lit_Chars val:'\t6\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\t7\n' span_id:301) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:302) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:303) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&\n'
            span_id: 304
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:306) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:307) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:308) (Token id:Id.Lit_Chars val:'\t@@ -4,5 +4,7 @@\n' span_id:309) 
          (Token id:Id.Lit_Chars val:'\t 3\n' span_id:310) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:311) (Token id:Id.Lit_Chars val:'\t 5\n' span_id:312) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:313) (Token id:Id.Lit_Chars val:'\t 6\n' span_id:314) (Token id:Id.Lit_Chars val:'\t 7\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:316) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:318)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: between changes' span_id:325))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:329) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\t1\n' span_id:331) (Token id:Id.Lit_Chars val:'\t2\n' span_id:332) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:333) (Token id:Id.Lit_Chars val:'\t4\n' span_id:334) (Token id:Id.Lit_Chars val:'\t5\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\n' span_id:336) (Token id:Id.Lit_Chars val:'\n' span_id:337) (Token id:Id.Lit_Chars val:'\t6\n' span_id:338) 
          (Token id:Id.Lit_Chars val:'\t7\n' span_id:339) (Token id:Id.Lit_Chars val:'\t8\n' span_id:340) (Token id:Id.Lit_Chars val:'\t9\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\t10\n' span_id:342) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:343) 
          (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:345) 
          (Token id:Id.Lit_Chars val:'\tchange\n' span_id:346) (Token id:Id.Lit_Chars val:'\t1\n' span_id:347) (Token id:Id.Lit_Chars val:'\t2\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\t3\n' span_id:350) (Token id:Id.Lit_Chars val:'\t4\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:352) (Token id:Id.Lit_Chars val:'\t6\n' span_id:353) (Token id:Id.Lit_Chars val:'\t7\n' span_id:354) 
          (Token id:Id.Lit_Chars val:'\t8\n' span_id:355) (Token id:Id.Lit_Chars val:'\n' span_id:356) (Token id:Id.Lit_Chars val:'\t9\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\t10\n' span_id:358) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:359) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:360) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --ignore-blank-lines >out.tmp &&\n'
            span_id: 361
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:362) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:363) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:365) (Token id:Id.Lit_Chars val:'\t@@ -1,5 +1,7 @@\n' span_id:366) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:367) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:368) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:369) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:370) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:371) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:372) 
          (Token id:Id.Lit_Chars val:'\t 5\n' span_id:373) (Token id:Id.Lit_Chars val:'\t@@ -8,5 +8,7 @@\n' span_id:374) 
          (Token id:Id.Lit_Chars val:'\t 6\n' span_id:375) (Token id:Id.Lit_Chars val:'\t 7\n' span_id:376) (Token id:Id.Lit_Chars val:'\t 8\n' span_id:377) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:378) (Token id:Id.Lit_Chars val:'\t 9\n' span_id:379) (Token id:Id.Lit_Chars val:'\t 10\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:381) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:382) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:383)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'ignore-blank-lines: between changes (with interhunkctx)'
            span_id: 390
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 10 >x &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:398) (Token id:Id.Lit_Chars val:'\t1\n' span_id:399) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:400) (Token id:Id.Lit_Chars val:'\n' span_id:401) (Token id:Id.Lit_Chars val:'\t3\n' span_id:402) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:403) (Token id:Id.Lit_Chars val:'\t5\n' span_id:404) (Token id:Id.Lit_Chars val:'\n' span_id:405) 
          (Token id:Id.Lit_Chars val:'\t6\n' span_id:406) (Token id:Id.Lit_Chars val:'\t7\n' span_id:407) (Token id:Id.Lit_Chars val:'\t8\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\t9\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\t10\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\tchange\n' span_id:412) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:413) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --inter-hunk-context=2 --ignore-blank-lines >out.tmp &&\n'
            span_id: 414
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:415) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:416) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:417) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:418) (Token id:Id.Lit_Chars val:'\t@@ -1,10 +1,15 @@\n' span_id:419) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:420) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:421) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:423) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:424) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:425) 
          (Token id:Id.Lit_Chars val:'\t 5\n' span_id:426) (Token id:Id.Lit_Chars val:'\t+\n' span_id:427) (Token id:Id.Lit_Chars val:'\t 6\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\t 7\n' span_id:429) (Token id:Id.Lit_Chars val:'\t 8\n' span_id:430) (Token id:Id.Lit_Chars val:'\t 9\n' span_id:431) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:432) (Token id:Id.Lit_Chars val:'\t 10\n' span_id:433) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:434) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:436)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: scattered spaces' span_id:443))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 10 >x &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:449) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:451) (Token id:Id.Lit_Chars val:'\t1\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:453) (Token id:Id.Lit_Chars val:'\t3\n' span_id:454) (Token id:Id.Lit_Chars val:'\n' span_id:455) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:456) (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id:Id.Lit_Chars val:'\t5\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\n' span_id:459) (Token id:Id.Lit_Chars val:'\t6\n' span_id:460) (Token id:Id.Lit_Chars val:'\n' span_id:461) 
          (Token id:Id.Lit_Chars val:'\n' span_id:462) (Token id:Id.Lit_Chars val:'\t7\n' span_id:463) (Token id:Id.Lit_Chars val:'\n' span_id:464) 
          (Token id:Id.Lit_Chars val:'\t8\n' span_id:465) (Token id:Id.Lit_Chars val:'\t9\n' span_id:466) (Token id:Id.Lit_Chars val:'\t10\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\tchange\n' span_id:468) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:469) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&\n'
            span_id: 470
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:471) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:472) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:474) (Token id:Id.Lit_Chars val:'\t@@ -1,3 +1,4 @@\n' span_id:475) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:476) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:477) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\t 3\n' span_id:479) (Token id:Id.Lit_Chars val:'\t@@ -8,3 +15,4 @@\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\t 8\n' span_id:481) (Token id:Id.Lit_Chars val:'\t 9\n' span_id:482) (Token id:Id.Lit_Chars val:'\t 10\n' span_id:483) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:484) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:485) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:486)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: spaces coalesce' span_id:493))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:497) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 6 >x &&\n' span_id:498) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:499) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:500) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:501) (Token id:Id.Lit_Chars val:'\t1\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:503) (Token id:Id.Lit_Chars val:'\t3\n' span_id:504) (Token id:Id.Lit_Chars val:'\n' span_id:505) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:506) (Token id:Id.Lit_Chars val:'\n' span_id:507) (Token id:Id.Lit_Chars val:'\t5\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\n' span_id:509) (Token id:Id.Lit_Chars val:'\t6\n' span_id:510) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:511) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:512) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&\n'
            span_id: 513
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:515) (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:516) 
          (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:517) (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,11 @@\n' span_id:518) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:519) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:520) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:521) 
          (Token id:Id.Lit_Chars val:'\t 3\n' span_id:522) (Token id:Id.Lit_Chars val:'\t+\n' span_id:523) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:524) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:525) (Token id:Id.Lit_Chars val:'\t 5\n' span_id:526) (Token id:Id.Lit_Chars val:'\t+\n' span_id:527) 
          (Token id:Id.Lit_Chars val:'\t 6\n' span_id:528) (Token id:Id.Lit_Chars val:'\t+change\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:530) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:531)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ignore-blank-lines: mix changes and blank lines' span_id:538))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:542) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 16 >x &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\tgit update-index x &&\n' span_id:544) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >x &&\n' span_id:545) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:546) (Token id:Id.Lit_Chars val:'\t1\n' span_id:547) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:548) (Token id:Id.Lit_Chars val:'\n' span_id:549) (Token id:Id.Lit_Chars val:'\t3\n' span_id:550) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:551) (Token id:Id.Lit_Chars val:'\t5\n' span_id:552) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\t6\n' span_id:554) (Token id:Id.Lit_Chars val:'\t7\n' span_id:555) (Token id:Id.Lit_Chars val:'\t8\n' span_id:556) 
          (Token id:Id.Lit_Chars val:'\n' span_id:557) (Token id:Id.Lit_Chars val:'\t9\n' span_id:558) (Token id:Id.Lit_Chars val:'\t10\n' span_id:559) 
          (Token id:Id.Lit_Chars val:'\t11\n' span_id:560) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:561) (Token id:Id.Lit_Chars val:'\t12\n' span_id:562) 
          (Token id:Id.Lit_Chars val:'\t13\n' span_id:563) (Token id:Id.Lit_Chars val:'\t14\n' span_id:564) (Token id:Id.Lit_Chars val:'\n' span_id:565) 
          (Token id:Id.Lit_Chars val:'\t15\n' span_id:566) (Token id:Id.Lit_Chars val:'\t16\n' span_id:567) (Token id:Id.Lit_Chars val:'\tchange\n' span_id:568) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:569) (Token id:Id.Lit_Chars val:'\tgit diff --ignore-blank-lines >out.tmp &&\n' span_id:570) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\tdiff --git a/x b/x\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\t--- a/x\n' span_id:573) (Token id:Id.Lit_Chars val:'\t+++ b/x\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\t@@ -1,8 +1,11 @@\n' span_id:575) (Token id:Id.Lit_Chars val:'\t+change\n' span_id:576) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:577) 
          (Token id:Id.Lit_Chars val:'\t 2\n' span_id:578) (Token id:Id.Lit_Chars val:'\t+\n' span_id:579) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:580) 
          (Token id:Id.Lit_Chars val:'\t 4\n' span_id:581) (Token id:Id.Lit_Chars val:'\t 5\n' span_id:582) (Token id:Id.Lit_Chars val:'\t+change\n' span_id:583) 
          (Token id:Id.Lit_Chars val:'\t 6\n' span_id:584) (Token id:Id.Lit_Chars val:'\t 7\n' span_id:585) (Token id:Id.Lit_Chars val:'\t 8\n' span_id:586) 
          (Token id:Id.Lit_Chars val:'\t@@ -9,8 +13,11 @@\n' span_id:587) (Token id:Id.Lit_Chars val:'\t 9\n' span_id:588) (Token id:Id.Lit_Chars val:'\t 10\n' span_id:589) 
          (Token id:Id.Lit_Chars val:'\t 11\n' span_id:590) (Token id:Id.Lit_Chars val:'\t+change\n' span_id:591) 
          (Token id:Id.Lit_Chars val:'\t 12\n' span_id:592) (Token id:Id.Lit_Chars val:'\t 13\n' span_id:593) (Token id:Id.Lit_Chars val:'\t 14\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\t+\n' span_id:595) (Token id:Id.Lit_Chars val:'\t 15\n' span_id:596) (Token id:Id.Lit_Chars val:'\t 16\n' span_id:597) 
          (Token id:Id.Lit_Chars val:'\t+change\n' span_id:598) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:599) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected out.tmp\n' span_id:600)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check mixed spaces and tabs in indent' span_id:607))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:611) 
          (Token id:Id.Lit_Chars val:'\t# This is indented with SP HT SP.\n' span_id:612) (Token id:Id.Lit_Chars val:'\techo " \t foo();" >x &&\n' span_id:613) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --check | grep "space before tab in indent"\n'
            span_id: 614
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check mixed tabs and spaces in indent' span_id:621))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:625) 
          (Token id:Id.Lit_Chars val:'\t# This is indented with HT SP HT.\n' span_id:626) (Token id:Id.Lit_Chars val:'\techo "\t \tfoo();" >x &&\n' span_id:627) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --check | grep "space before tab in indent"\n'
            span_id: 628
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with no whitespace errors' span_id:635))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:639) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "snapshot" &&\n' span_id:640) (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:642)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with trailing whitespace' span_id:649))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:653) 
          (Token id:Id.Lit_Chars val:'\techo "foo(); " >x &&\n' span_id:654) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:655)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with space before tab in indent' span_id:662))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:666) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent has space followed by hard tab\n'
            span_id: 667
          ) (Token id:Id.Lit_Chars val:'\techo " \tfoo();" >x &&\n' span_id:668) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:669)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--check and --exit-code are not exclusive' span_id:676))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:680) 
          (Token id:Id.Lit_Chars val:'\tgit checkout x &&\n' span_id:681) (Token id:Id.Lit_Chars val:'\tgit diff --check --exit-code\n' span_id:682)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--check and --quiet are not exclusive' span_id:689))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:693) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check --quiet\n' span_id:694)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check staged with no whitespace errors' span_id:701))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:705) 
          (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:706) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:707) 
          (Token id:Id.Lit_Chars val:'\tgit diff --cached --check\n' span_id:708)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check staged with trailing whitespace' span_id:715))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:719) 
          (Token id:Id.Lit_Chars val:'\techo "foo(); " >x &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:721) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff --cached --check\n'
            span_id: 722
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check staged with space before tab in indent' span_id:729))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:733) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent has space followed by hard tab\n'
            span_id: 734
          ) (Token id:Id.Lit_Chars val:'\techo " \tfoo();" >x &&\n' span_id:735) 
          (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:736) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --cached --check\n' span_id:737)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with no whitespace errors (diff-index)' span_id:744))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:748) 
          (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:749) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:750) 
          (Token id:Id.Lit_Chars val:'\tgit diff-index --check HEAD\n' span_id:751)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with trailing whitespace (diff-index)' span_id:758))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:762) 
          (Token id:Id.Lit_Chars val:'\techo "foo(); " >x &&\n' span_id:763) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:764) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff-index --check HEAD\n'
            span_id: 765
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check with space before tab in indent (diff-index)'
            span_id: 772
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:776) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent has space followed by hard tab\n'
            span_id: 777
          ) (Token id:Id.Lit_Chars val:'\techo " \tfoo();" >x &&\n' span_id:778) 
          (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:779) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff-index --check HEAD\n' span_id:780)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check staged with no whitespace errors (diff-index)'
            span_id: 787
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:791) 
          (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:792) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:793) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index --cached --check HEAD\n'
            span_id: 794
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check staged with trailing whitespace (diff-index)'
            span_id: 801
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:805) 
          (Token id:Id.Lit_Chars val:'\techo "foo(); " >x &&\n' span_id:806) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:807) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff-index --cached --check HEAD\n'
            span_id: 808
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check staged with space before tab in indent (diff-index)'
            span_id: 815
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:819) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent has space followed by hard tab\n'
            span_id: 820
          ) (Token id:Id.Lit_Chars val:'\techo " \tfoo();" >x &&\n' span_id:821) 
          (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:822) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff-index --cached --check HEAD\n' span_id:823)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with no whitespace errors (diff-tree)' span_id:830))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:834) 
          (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:835) (Token id:Id.Lit_Chars val:'\tgit commit -m "new commit" x &&\n' span_id:836) 
          (Token id:Id.Lit_Chars val:'\tgit diff-tree --check HEAD^ HEAD\n' span_id:837)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check with trailing whitespace (diff-tree)' span_id:844))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:848) 
          (Token id:Id.Lit_Chars val:'\techo "foo(); " >x &&\n' span_id:849) (Token id:Id.Lit_Chars val:'\tgit commit -m "another commit" x &&\n' span_id:850) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff-tree --check HEAD^ HEAD\n'
            span_id: 851
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check with space before tab in indent (diff-tree)'
            span_id: 858
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:862) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent has space followed by hard tab\n'
            span_id: 863
          ) (Token id:Id.Lit_Chars val:'\techo " \tfoo();" >x &&\n' span_id:864) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "yet another" x &&\n' span_id:865) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff-tree --check HEAD^ HEAD\n' span_id:866)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check trailing whitespace (trailing-space: off)' span_id:873))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:877) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "-trailing-space" &&\n'
            span_id: 878
          ) (Token id:Id.Lit_Chars val:'\techo "foo ();   " >x &&\n' span_id:879) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:880)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check trailing whitespace (trailing-space: on)' span_id:887))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:891) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "trailing-space" &&\n'
            span_id: 892
          ) (Token id:Id.Lit_Chars val:'\techo "foo ();   " >x &&\n' span_id:893) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:894)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check space before tab in indent (space-before-tab: off)'
            span_id: 901
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:905) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent contains space followed by HT\n'
            span_id: 906
          ) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace "-space-before-tab" &&\n' span_id:907) 
          (Token id:Id.Lit_Chars val:'\techo " \tfoo ();" >x &&\n' span_id:908) (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:909)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check space before tab in indent (space-before-tab: on)'
            span_id: 916
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:920) 
          (Token
            id: Id.Lit_Chars
            val: '\t# indent contains space followed by HT\n'
            span_id: 921
          ) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace "space-before-tab" &&\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\techo " \tfoo ();   " >x &&\n' span_id:923) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:924)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check spaces as indentation (indent-with-non-tab: off)'
            span_id: 931
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:935) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "-indent-with-non-tab" &&\n'
            span_id: 936
          ) (Token id:Id.Lit_Chars val:'\techo "        foo ();" >x &&\n' span_id:937) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:938)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check spaces as indentation (indent-with-non-tab: on)'
            span_id: 945
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:949) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "indent-with-non-tab" &&\n'
            span_id: 950
          ) (Token id:Id.Lit_Chars val:'\techo "        foo ();" >x &&\n' span_id:951) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:952)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ditto, but tabwidth=9' span_id:959))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:963) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "indent-with-non-tab,tabwidth=9" &&\n'
            span_id: 964
          ) (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:965)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tabs and spaces as indentation (indent-with-non-tab: on)'
            span_id: 972
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:976) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "indent-with-non-tab" &&\n'
            span_id: 977
          ) (Token id:Id.Lit_Chars val:'\techo "\t                foo ();" >x &&\n' span_id:978) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:979)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ditto, but tabwidth=10' span_id:986))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:990) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "indent-with-non-tab,tabwidth=10" &&\n'
            span_id: 991
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:992)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ditto, but tabwidth=20' span_id:999))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1003) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "indent-with-non-tab,tabwidth=20" &&\n'
            span_id: 1004
          ) (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:1005)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check tabs as indentation (tab-in-indent: off)' span_id:1012))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1016) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "-tab-in-indent" &&\n'
            span_id: 1017
          ) (Token id:Id.Lit_Chars val:'\techo "\tfoo ();" >x &&\n' span_id:1018) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:1019)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check tabs as indentation (tab-in-indent: on)' span_id:1026))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1030) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tab-in-indent" &&\n'
            span_id: 1031
          ) (Token id:Id.Lit_Chars val:'\techo "\tfoo ();" >x &&\n' span_id:1032) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:1033)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tabs and spaces as indentation (tab-in-indent: on)'
            span_id: 1040
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1044) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tab-in-indent" &&\n'
            span_id: 1045
          ) (Token id:Id.Lit_Chars val:'\techo "\t                foo ();" >x &&\n' span_id:1046) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:1047)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ditto, but tabwidth=1 (must be irrelevant)' span_id:1054))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1058) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tab-in-indent,tabwidth=1" &&\n'
            span_id: 1059
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:1060)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tab-in-indent and indent-with-non-tab conflict'
            span_id: 1067
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1071) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tab-in-indent,indent-with-non-tab" &&\n'
            span_id: 1072
          ) (Token id:Id.Lit_Chars val:'\techo "foo ();" >x &&\n' span_id:1073) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check\n' span_id:1074)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tab-in-indent excluded from wildcard whitespace attribute'
            span_id: 1081
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1085) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --unset core.whitespace &&\n'
            span_id: 1086
          ) (Token id:Id.Lit_Chars val:'\techo "x whitespace" >.gitattributes &&\n' span_id:1087) 
          (Token id:Id.Lit_Chars val:'\techo "\t  foo ();" >x &&\n' span_id:1088) (Token id:Id.Lit_Chars val:'\tgit diff --check &&\n' span_id:1089) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes\n' span_id:1090)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'line numbers in --check output are correct' span_id:1097))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1101) 
          (Token id:Id.Lit_Chars val:'\techo "" >x &&\n' span_id:1102) (Token id:Id.Lit_Chars val:'\techo "foo(); " >>x &&\n' span_id:1103) 
          (Token id:Id.Lit_Chars val:'\tgit diff --check | grep "x:2:"\n' span_id:1104)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkdiff detects new trailing blank lines (1)' span_id:1111))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1115) 
          (Token id:Id.Lit_Chars val:'\techo "foo();" >x &&\n' span_id:1116) (Token id:Id.Lit_Chars val:'\techo "" >>x &&\n' span_id:1117) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --check | grep "new blank line"\n'
            span_id: 1118
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkdiff detects new trailing blank lines (2)' span_id:1125))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1129) 
          (Token
            id: Id.Lit_Chars
            val: '\t{ echo a; echo b; echo; echo; } >x &&\n'
            span_id: 1130
          ) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:1131) 
          (Token
            id: Id.Lit_Chars
            val: '\t{ echo a; echo; echo; echo; echo; } >x &&\n'
            span_id: 1132
          ) (Token id:Id.Lit_Chars val:'\tgit diff --check | grep "new blank line"\n' span_id:1133)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkdiff allows new blank lines' span_id:1140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1144) 
          (Token id:Id.Lit_Chars val:'\tgit checkout x &&\n' span_id:1145) (Token id:Id.Lit_Chars val:'\tmv x y &&\n' span_id:1146) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1147) (Token id:Id.Lit_Chars val:'\t\techo "/* This is new */" &&\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\t\techo "" &&\n' span_id:1149) (Token id:Id.Lit_Chars val:'\t\tcat y\n' span_id:1150) 
          (Token id:Id.Lit_Chars val:'\t) >x &&\n' span_id:1151) (Token id:Id.Lit_Chars val:'\tgit diff --check\n' span_id:1152)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1158)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1165
        )
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1161)
          fd: -1
          arg_word: {(expect)}
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'whitespace-only changes not reported' span_id:1169))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1173) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1174) (Token id:Id.Lit_Chars val:'\techo >x "hello world" &&\n' span_id:1175) 
          (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tgit commit -m "hello 1" &&\n' span_id:1177) 
          (Token id:Id.Lit_Chars val:'\techo >x "hello  world" &&\n' span_id:1178) (Token id:Id.Lit_Chars val:'\tgit diff -b >actual &&\n' span_id:1179) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1180)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1186)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1198
          stdin_parts: [
            ('diff --git a/x b/z\n')
            ('similarity index NUM%\n')
            ('rename from x\n')
            ('rename to z\n')
            ('index 380c32a..a97b785 100644\n')
          ]
        )
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1189)
          fd: -1
          arg_word: {(expect)}
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'whitespace-only changes reported across renames'
            span_id: 1202
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1206) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1207) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i"; done >x &&\n'
            span_id: 1208
          ) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:1209) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "base" &&\n' span_id:1210) (Token id:Id.Lit_Chars val:'\tsed -e "5s/^/ /" x >z &&\n' span_id:1211) 
          (Token id:Id.Lit_Chars val:'\tgit rm x &&\n' span_id:1212) (Token id:Id.Lit_Chars val:'\tgit add z &&\n' span_id:1213) 
          (Token id:Id.Lit_Chars val:'\tgit diff -w -M --cached |\n' span_id:1214) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "/^similarity index /s/[0-9][0-9]*/NUM/" >actual &&\n'
            span_id: 1215
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1216)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1222)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1225)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1226)) 
              (OF)
            }
          here_end_span_id: 1233
          stdin_parts: [
            ('diff --git a/empty b/void\n')
            ('similarity index 100%\n')
            ('rename from empty\n')
            ('rename to void\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename empty' span_id:1238))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1242) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:1244) 
          (Token id:Id.Lit_Chars val:'\tgit add empty &&\n' span_id:1245) (Token id:Id.Lit_Chars val:'\tgit commit -m empty &&\n' span_id:1246) 
          (Token id:Id.Lit_Chars val:'\tgit mv empty void &&\n' span_id:1247) (Token id:Id.Lit_Chars val:'\tgit diff -w --cached -M >current &&\n' span_id:1248) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:1249)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combined diff with autocrlf conversion' span_id:1256))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1260) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1261) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1262) 
          (Token id:Id.Lit_Chars val:'\techo >x hello &&\n' span_id:1263) (Token id:Id.Lit_Chars val:'\tgit commit -m "one side" x &&\n' span_id:1264) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:1265) (Token id:Id.Lit_Chars val:'\techo >x goodbye &&\n' span_id:1266) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "the other side" x &&\n'
            span_id: 1267
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:1268) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:1269) (Token id:Id.Lit_Chars val:'\n' span_id:1270) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff | sed -e "1,/^@@@/d" >actual &&\n'
            span_id: 1271
          ) (Token id:Id.Lit_Chars val:'\t! grep "^-" actual\n' span_id:1272) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1273)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup diff colors' span_id:1284))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1288) 
          (Token id:Id.Lit_Chars val:'\tgit config color.diff always &&\n' span_id:1289) (Token id:Id.Lit_Chars val:'\tgit config color.diff.plain normal &&\n' span_id:1290) 
          (Token id:Id.Lit_Chars val:'\tgit config color.diff.meta bold &&\n' span_id:1291) (Token id:Id.Lit_Chars val:'\tgit config color.diff.frag cyan &&\n' span_id:1292) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config color.diff.func normal &&\n'
            span_id: 1293
          ) (Token id:Id.Lit_Chars val:'\tgit config color.diff.old red &&\n' span_id:1294) 
          (Token id:Id.Lit_Chars val:'\tgit config color.diff.new green &&\n' span_id:1295) (Token id:Id.Lit_Chars val:'\tgit config color.diff.commit yellow &&\n' span_id:1296) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config color.diff.whitespace blue &&\n'
            span_id: 1297
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1298) 
          (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false\n' span_id:1299)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'diff that introduces a line with only tabs' span_id:1306))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1310) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace blank-at-eol &&\n'
            span_id: 1311
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1312) 
          (Token id:Id.Lit_Chars val:'\techo "test" >x &&\n' span_id:1313) (Token id:Id.Lit_Chars val:'\tgit commit -m "initial" x &&\n' span_id:1314) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "{NTN}" | tr "NT" "\\n\\t" >>x &&\n'
            span_id: 1315
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always diff | test_decode_color >current &&\n'
            span_id: 1316
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1317) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-\\EOF &&\n' span_id:1318) (Token id:Id.Lit_Chars val:'\t<BOLD>diff --git a/x b/x<RESET>\n' span_id:1319) 
          (Token
            id: Id.Lit_Chars
            val: '\t<BOLD>index 9daeafb..2874b91 100644<RESET>\n'
            span_id: 1320
          ) (Token id:Id.Lit_Chars val:'\t<BOLD>--- a/x<RESET>\n' span_id:1321) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>+++ b/x<RESET>\n' span_id:1322) (Token id:Id.Lit_Chars val:'\t<CYAN>@@ -1 +1,4 @@<RESET>\n' span_id:1323) 
          (Token id:Id.Lit_Chars val:'\t test<RESET>\n' span_id:1324) (Token id:Id.Lit_Chars val:'\t<GREEN>+<RESET><GREEN>{<RESET>\n' span_id:1325) 
          (Token id:Id.Lit_Chars val:'\t<GREEN>+<RESET><BLUE>\t<RESET>\n' span_id:1326) (Token id:Id.Lit_Chars val:'\t<GREEN>+<RESET><GREEN>}<RESET>\n' span_id:1327) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1328) (Token id:Id.Lit_Chars val:'\n' span_id:1329) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:1330)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'diff that introduces and removes ws breakages' span_id:1337))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1341) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1342) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1343) 
          (Token id:Id.Lit_Chars val:'\t\techo "0. blank-at-eol " &&\n' span_id:1344) (Token id:Id.Lit_Chars val:'\t\techo "1. blank-at-eol "\n' span_id:1345) 
          (Token id:Id.Lit_Chars val:'\t} >x &&\n' span_id:1346) (Token id:Id.Lit_Chars val:'\tgit commit -a --allow-empty -m preimage &&\n' span_id:1347) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:1348) (Token id:Id.Lit_Chars val:'\t\techo "0. blank-at-eol " &&\n' span_id:1349) 
          (Token id:Id.Lit_Chars val:'\t\techo "1. still-blank-at-eol " &&\n' span_id:1350) (Token id:Id.Lit_Chars val:'\t\techo "2. and a new line "\n' span_id:1351) 
          (Token id:Id.Lit_Chars val:'\t} >x &&\n' span_id:1352) (Token id:Id.Lit_Chars val:'\n' span_id:1353) 
          (Token id:Id.Lit_Chars val:'\tgit -c color.diff=always diff |\n' span_id:1354) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1355) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1356) (Token id:Id.Lit_Chars val:'\tcat >expected <<-\\EOF &&\n' span_id:1357) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>diff --git a/x b/x<RESET>\n' span_id:1358) (Token id:Id.Lit_Chars val:'\t<BOLD>index d0233a2..700886e 100644<RESET>\n' span_id:1359) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>--- a/x<RESET>\n' span_id:1360) (Token id:Id.Lit_Chars val:'\t<BOLD>+++ b/x<RESET>\n' span_id:1361) 
          (Token id:Id.Lit_Chars val:'\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n' span_id:1362) (Token id:Id.Lit_Chars val:'\t 0. blank-at-eol <RESET>\n' span_id:1363) 
          (Token id:Id.Lit_Chars val:'\t<RED>-1. blank-at-eol <RESET>\n' span_id:1364) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n'
            span_id: 1365
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n'
            span_id: 1366
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1367) (Token id:Id.Lit_Chars val:'\n' span_id:1368) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:1369)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ws-error-highlight test setup' span_id:1376))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1380) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1381) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1382) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:1383) (Token id:Id.Lit_Chars val:'\t\techo "0. blank-at-eol " &&\n' span_id:1384) 
          (Token id:Id.Lit_Chars val:'\t\techo "1. blank-at-eol "\n' span_id:1385) (Token id:Id.Lit_Chars val:'\t} >x &&\n' span_id:1386) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a --allow-empty -m preimage &&\n'
            span_id: 1387
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1388) 
          (Token id:Id.Lit_Chars val:'\t\techo "0. blank-at-eol " &&\n' span_id:1389) (Token id:Id.Lit_Chars val:'\t\techo "1. still-blank-at-eol " &&\n' span_id:1390) 
          (Token id:Id.Lit_Chars val:'\t\techo "2. and a new line "\n' span_id:1391) (Token id:Id.Lit_Chars val:'\t} >x &&\n' span_id:1392) (Token id:Id.Lit_Chars val:'\n' span_id:1393) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat >expect.default-old <<-\\EOF &&\n'
            span_id: 1394
          ) (Token id:Id.Lit_Chars val:'\t<BOLD>diff --git a/x b/x<RESET>\n' span_id:1395) 
          (Token
            id: Id.Lit_Chars
            val: '\t<BOLD>index d0233a2..700886e 100644<RESET>\n'
            span_id: 1396
          ) (Token id:Id.Lit_Chars val:'\t<BOLD>--- a/x<RESET>\n' span_id:1397) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>+++ b/x<RESET>\n' span_id:1398) (Token id:Id.Lit_Chars val:'\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n' span_id:1399) 
          (Token id:Id.Lit_Chars val:'\t 0. blank-at-eol <RESET>\n' span_id:1400) (Token id:Id.Lit_Chars val:'\t<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>\n' span_id:1401) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n'
            span_id: 1402
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n'
            span_id: 1403
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1404) (Token id:Id.Lit_Chars val:'\n' span_id:1405) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.all <<-\\EOF &&\n' span_id:1406) (Token id:Id.Lit_Chars val:'\t<BOLD>diff --git a/x b/x<RESET>\n' span_id:1407) 
          (Token
            id: Id.Lit_Chars
            val: '\t<BOLD>index d0233a2..700886e 100644<RESET>\n'
            span_id: 1408
          ) (Token id:Id.Lit_Chars val:'\t<BOLD>--- a/x<RESET>\n' span_id:1409) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>+++ b/x<RESET>\n' span_id:1410) (Token id:Id.Lit_Chars val:'\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n' span_id:1411) 
          (Token
            id: Id.Lit_Chars
            val: '\t <RESET>0. blank-at-eol<RESET><BLUE> <RESET>\n'
            span_id: 1412
          ) (Token id:Id.Lit_Chars val:'\t<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>\n' span_id:1413) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>\n'
            span_id: 1414
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>\n'
            span_id: 1415
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1416) (Token id:Id.Lit_Chars val:'\n' span_id:1417) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.none <<-\\EOF\n' span_id:1418) (Token id:Id.Lit_Chars val:'\t<BOLD>diff --git a/x b/x<RESET>\n' span_id:1419) 
          (Token
            id: Id.Lit_Chars
            val: '\t<BOLD>index d0233a2..700886e 100644<RESET>\n'
            span_id: 1420
          ) (Token id:Id.Lit_Chars val:'\t<BOLD>--- a/x<RESET>\n' span_id:1421) 
          (Token id:Id.Lit_Chars val:'\t<BOLD>+++ b/x<RESET>\n' span_id:1422) (Token id:Id.Lit_Chars val:'\t<CYAN>@@ -1,2 +1,3 @@<RESET>\n' span_id:1423) 
          (Token id:Id.Lit_Chars val:'\t 0. blank-at-eol <RESET>\n' span_id:1424) (Token id:Id.Lit_Chars val:'\t<RED>-1. blank-at-eol <RESET>\n' span_id:1425) 
          (Token
            id: Id.Lit_Chars
            val: '\t<GREEN>+1. still-blank-at-eol <RESET>\n'
            span_id: 1426
          ) (Token id:Id.Lit_Chars val:'\t<GREEN>+2. and a new line <RESET>\n' span_id:1427) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1428) (Token id:Id.Lit_Chars val:'\n' span_id:1429)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'test --ws-error-highlight option' span_id:1436))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1440) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1441) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always diff --ws-error-highlight=default,old |\n'
            span_id: 1442
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1443) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect.default-old current &&\n'
            span_id: 1444
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1445) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always diff --ws-error-highlight=all |\n'
            span_id: 1446
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1447) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.all current &&\n' span_id:1448) (Token id:Id.Lit_Chars val:'\n' span_id:1449) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always diff --ws-error-highlight=none |\n'
            span_id: 1450
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1451) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.none current\n' span_id:1452) (Token id:Id.Lit_Chars val:'\n' span_id:1453)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'test diff.wsErrorHighlight config' span_id:1460))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1464) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1465) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=default,old diff |\n'
            span_id: 1466
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1467) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect.default-old current &&\n'
            span_id: 1468
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1469) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=all diff |\n'
            span_id: 1470
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1471) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.all current &&\n' span_id:1472) (Token id:Id.Lit_Chars val:'\n' span_id:1473) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=none diff |\n'
            span_id: 1474
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1475) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.none current\n' span_id:1476) (Token id:Id.Lit_Chars val:'\n' span_id:1477)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'option overrides diff.wsErrorHighlight' span_id:1484))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1488) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1489) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=none \\\n'
            span_id: 1490
          ) (Token id:Id.Lit_Chars val:'\t\tdiff --ws-error-highlight=default,old |\n' span_id:1491) 
          (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1492) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.default-old current &&\n' span_id:1493) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1494) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=default \\\n'
            span_id: 1495
          ) (Token id:Id.Lit_Chars val:'\t\tdiff --ws-error-highlight=all |\n' span_id:1496) 
          (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1497) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.all current &&\n' span_id:1498) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1499) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c color.diff=always -c diff.wsErrorHighlight=all \\\n'
            span_id: 1500
          ) (Token id:Id.Lit_Chars val:'\t\tdiff --ws-error-highlight=none |\n' span_id:1501) 
          (Token id:Id.Lit_Chars val:'\ttest_decode_color >current &&\n' span_id:1502) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.none current\n' span_id:1503) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1504)
        )
      }
    )
    (C {(test_done)})
  ]
)