(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:'diff whitespace error detection' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id: Id.Lit_Chars val: '\tgit config diff.color.whitespace "blue reverse" &&\n' span_id: 22 ) (Token id:Id.Lit_Chars val:'\t>F &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit add F &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\techo " Eight SP indent" >>F &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\techo " \tHT and SP indent" >>F &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo "With trailing SP " >>F &&\n' span_id:27) (Token id: Id.Lit_Chars val: '\techo "Carriage ReturnQ" | tr Q "\\015" >>F &&\n' span_id: 28 ) (Token id:Id.Lit_Chars val:'\techo "No problem" >>F &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\techo >>F\n' span_id:30) (Token id:Id.Lit_Chars val:'\n' span_id:31) ) } ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:blue_grep) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'7;34m' span_id:37))} spids: [35] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:40) ) (command.Simple words: [{(printf)} {(DQ (Id.Lit_Other '\\') ('033[%s'))} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:56) fd: -1 arg_word: {(check-grep)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Subshell command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(grep)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:68) fd: -1 arg_word: {(check-grep)} ) ] ) (C {(grep)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}) ] negated: F ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:80) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:83) fd: 2 arg_word: {(1)} ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grep_a) op: assign_op.Equal rhs: {(grep)} spids: [89] ) ] ) ] spids: [59 86] ) (if_arm cond: [ (command.Subshell command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(grep)} {(-a)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:103) fd: -1 arg_word: {(check-grep)} ) ] ) (C {(grep)} {(-a)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}) ] negated: F ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:117) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:120) fd: 2 arg_word: {(1)} ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grep_a) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'grep -a' span_id:128))} spids: [126] ) ] ) ] spids: [92 123] ) ] else_action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grep_a) op: assign_op.Equal rhs: {(grep)} spids: [134] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:137) ) ] ) (C {(rm)} {(-f)} {(check-grep)}) (command.ShFunction name: prepare_output body: (command.BraceGroup children: [ (command.Simple words: [{(git)} {(diff)} {(--color)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:164) fd: -1 arg_word: {(output)} ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$grep_a')} {(DQ ($ Id.VSub_DollarName '$blue_grep'))} {(output)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:176) fd: -1 arg_word: {(error)} ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$grep_a')} {(-v)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))} {(output)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:190) fd: -1 arg_word: {(normal)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:194) arg_word: {(0)} ) ] ) ) (C {(test_expect_success)} {(default)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) (Token id:Id.Lit_Chars val:'\n' span_id:207) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\n' span_id:209) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:214) (Token id:Id.Lit_Chars val:'\n' span_id:215) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'default (attribute)' span_id:222))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id:Id.Lit_Chars val:'\n' span_id:227) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 228 ) (Token id:Id.Lit_Chars val:'\techo "F whitespace" >.gitattributes &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\n' span_id:231) (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:235) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:236) (Token id:Id.Lit_Chars val:'\n' span_id:237) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'default, tabwidth=10 (attribute)' span_id:244))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id:Id.Lit_Chars val:'\n' span_id:249) (Token id: Id.Lit_Chars val: '\tgit config core.whitespace "tabwidth=10" &&\n' span_id: 250 ) (Token id:Id.Lit_Chars val:'\techo "F whitespace" >.gitattributes &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\n' span_id:253) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:258) (Token id:Id.Lit_Chars val:'\n' span_id:259) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no check (attribute)' span_id:266))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id:Id.Lit_Chars val:'\n' span_id:271) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 272 ) (Token id:Id.Lit_Chars val:'\techo "F -whitespace" >.gitattributes &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:280) (Token id:Id.Lit_Chars val:'\n' span_id:281) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'no check, tabwidth=10 (attribute), must be irrelevant' span_id: 288 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id: Id.Lit_Chars val: '\tgit config core.whitespace "tabwidth=10" &&\n' span_id: 294 ) (Token id:Id.Lit_Chars val:'\techo "F -whitespace" >.gitattributes &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:302) (Token id:Id.Lit_Chars val:'\n' span_id:303) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -trail' span_id:310))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace -trail &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\n' span_id:319) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:324) (Token id:Id.Lit_Chars val:'\n' span_id:325) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -trail (attribute)' span_id:332))} { (SQ (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: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 338 ) (Token id:Id.Lit_Chars val:'\techo "F whitespace=-trail" >.gitattributes &&\n' span_id:339) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\n' span_id:341) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:346) (Token id:Id.Lit_Chars val:'\n' span_id:347) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -space' span_id:354))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\n' span_id:359) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace -space &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:368) (Token id:Id.Lit_Chars val:'\n' span_id:369) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -space (attribute)' span_id:376))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:380) (Token id:Id.Lit_Chars val:'\n' span_id:381) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 382 ) (Token id:Id.Lit_Chars val:'\techo "F whitespace=-space" >.gitattributes &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:390) (Token id:Id.Lit_Chars val:'\n' span_id:391) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only' span_id:398))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:402) (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace indent,-trailing,-space &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:406) (Token id:Id.Lit_Chars val:'\n' span_id:407) (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:408) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:410) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:412) (Token id:Id.Lit_Chars val:'\n' span_id:413) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only (attribute)' span_id:420))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:424) (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 426 ) (Token id: Id.Lit_Chars val: '\techo "F whitespace=indent,-trailing,-space" >.gitattributes &&\n' span_id: 427 ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:430) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:434) (Token id:Id.Lit_Chars val:'\n' span_id:435) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only, tabwidth=10' span_id:442))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) (Token id:Id.Lit_Chars val:'\n' span_id:447) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:448) (Token id: Id.Lit_Chars val: '\tgit config core.whitespace indent,tabwidth=10,-trailing,-space &&\n' span_id: 449 ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\n' span_id:451) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:454) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:456) (Token id:Id.Lit_Chars val:'\n' span_id:457) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'with indent-non-tab only, tabwidth=10 (attribute)' span_id: 464 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:468) (Token id:Id.Lit_Chars val:'\n' span_id:469) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 470 ) (Token id: Id.Lit_Chars val: '\techo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes &&\n' span_id: 471 ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\n' span_id:473) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:476) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:478) (Token id:Id.Lit_Chars val:'\n' span_id:479) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with cr-at-eol' span_id:486))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:490) (Token id:Id.Lit_Chars val:'\n' span_id:491) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace cr-at-eol &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\n' span_id:495) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:497) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:498) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:500) (Token id:Id.Lit_Chars val:'\n' span_id:501) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with cr-at-eol (attribute)' span_id:508))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:512) (Token id:Id.Lit_Chars val:'\n' span_id:513) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 514 ) (Token id: Id.Lit_Chars val: '\techo "F whitespace=trailing,cr-at-eol" >.gitattributes &&\n' span_id: 515 ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:518) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:520) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:522) (Token id:Id.Lit_Chars val:'\n' span_id:523) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'trailing empty lines (1)' span_id:530))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:534) (Token id:Id.Lit_Chars val:'\n' span_id:535) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check >output &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\tgrep "new blank line at" output &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\tgrep "trailing whitespace" output\n' span_id:539) (Token id:Id.Lit_Chars val:'\n' span_id:540) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'trailing empty lines (2)' span_id:547))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:551) (Token id:Id.Lit_Chars val:'\n' span_id:552) (Token id: Id.Lit_Chars val: '\techo "F -whitespace" >.gitattributes &&\n' span_id: 553 ) (Token id:Id.Lit_Chars val:'\tgit diff --check >output &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\t! test -s output\n' span_id:555) (Token id:Id.Lit_Chars val:'\n' span_id:556) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkdiff shows correct line number for trailing blank lines' span_id: 563 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:567) (Token id:Id.Lit_Chars val:'\n' span_id:568) (Token id:Id.Lit_Chars val:'\tprintf "a\\nb\\n" > G &&\n' span_id:569) (Token id:Id.Lit_Chars val:'\tgit add G &&\n' span_id:570) (Token id: Id.Lit_Chars val: '\tprintf "x\\nx\\nx\\na\\nb\\nc\\n\\n" > G &&\n' span_id: 571 ) (Token id: Id.Lit_Chars val: '\t[ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]\n' span_id: 572 ) (Token id:Id.Lit_Chars val:'\n' span_id:573) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not color trailing cr in context' span_id:580))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:584) (Token id: Id.Lit_Chars val: '\ttest_might_fail git config --unset core.whitespace &&\n' span_id: 585 ) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:586) (Token id:Id.Lit_Chars val:'\techo AAAQ | tr Q "\\015" >G &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\tgit add G &&\n' span_id:588) (Token id:Id.Lit_Chars val:'\techo BBBQ | tr Q "\\015" >>G &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\tgit diff --color G | tr "\\015" Q >output &&\n' span_id:590) (Token id:Id.Lit_Chars val:'\tgrep "BBB.*${blue_grep}Q" output &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\tgrep "AAA.*\\[mQ" output\n' span_id:592) (Token id:Id.Lit_Chars val:'\n' span_id:593) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'color new trailing blank lines' span_id:600))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:604) (Token id: Id.Lit_Chars val: '\t{ echo a; echo b; echo; echo; } >x &&\n' span_id: 605 ) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:606) (Token id: Id.Lit_Chars val: '\t{ echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&\n' span_id: 607 ) (Token id:Id.Lit_Chars val:'\tgit diff --color x >output &&\n' span_id:608) (Token id: Id.Lit_Chars val: '\tcnt=$($grep_a "${blue_grep}" output | wc -l) &&\n' span_id: 609 ) (Token id:Id.Lit_Chars val:'\ttest $cnt = 2\n' span_id:610) ) } ) (C {(test_done)}) ] )