(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'test_description='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'test_description='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'Test diff/status color escape codes'>)} ) ] redirects: [] ) (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {<'./test-lib.sh'>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <color> name: color body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'actual='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'actual='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'actual='> name:actual) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<config>} {<--get-color>} {<no.such.slot>} {(DQ ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName actual))} {<Id.Lit_Equals '='>} {(DQ <'\x1b'> ($ Id.VSub_Number 2))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <invalid_color> name: invalid_color body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <test_must_fail> more_env: [] words: [ {<test_must_fail>} {<git>} {<config>} {<--get-color>} {<no.such.slot>} {(DQ ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [{<test_expect_success>} {(SQ <reset>)} {(SQ <'\n'> <'\tcolor "reset" "[m"\n'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'attribute before color name'>)} {(SQ <'\n'> <'\tcolor "bold red" "[1;31m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'color name before attribute'>)} {(SQ <'\n'> <'\tcolor "red bold" "[1;31m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'attr fg bg'>)} {(SQ <'\n'> <'\tcolor "ul blue red" "[4;34;41m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'fg attr bg'>)} {(SQ <'\n'> <'\tcolor "blue ul red" "[4;34;41m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'fg bg attr'>)} {(SQ <'\n'> <'\tcolor "blue red ul" "[4;34;41m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'fg bg attr...'>)} {(SQ <'\n'> <'\tcolor "blue bold dim ul blink reverse" "[1;2;4;5;7;34m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'attr negation'>)} {(SQ <'\n'> <'\tcolor "nobold nodim noul noblink noreverse" "[22;24;25;27m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'"no-" variant of negation'>)} {(SQ <'\n'> <'\tcolor "no-bold no-blink" "[22;25m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'long color specification'>)} { (SQ <'\n'> <'\tcolor "254 255 bold dim ul blink reverse" "[1;2;4;5;7;38;5;254;48;5;255m"\n'>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'absurdly long color specification'>)} { (SQ <'\n'> <'\tcolor \\\n'> <'\t "#ffffff #ffffff bold nobold dim nodim italic noitalic\n'> <'\t ul noul blink noblink reverse noreverse strike nostrike" \\\n'> <'\t "[1;2;3;4;5;7;9;22;23;24;25;27;29;38;2;255;255;255;48;2;255;255;255m"\n'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'0-7 are aliases for basic ANSI color names'>)} {(SQ <'\n'> <'\tcolor "0 7" "[30;47m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'256 colors'>)} {(SQ <'\n'> <'\tcolor "254 bold 255" "[1;38;5;254;48;5;255m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'24-bit colors'>)} {(SQ <'\n'> <'\tcolor "#ff00ff black" "[38;2;255;0;255;40m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'"normal" yields no color at all"'>)} {(SQ <'\n'> <'\tcolor "normal black" "[40m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'-1 is a synonym for "normal"'>)} {(SQ <'\n'> <'\tcolor "-1 black" "[40m"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [{<test_expect_success>} {(SQ <'color too small'>)} {(SQ <'\n'> <'\tinvalid_color "-2"\n'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [{<test_expect_success>} {(SQ <'color too big'>)} {(SQ <'\n'> <'\tinvalid_color "256"\n'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'extra character after color number'>)} {(SQ <'\n'> <'\tinvalid_color "3X"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'extra character after color name'>)} {(SQ <'\n'> <'\tinvalid_color "redX"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'extra character after attribute'>)} {(SQ <'\n'> <'\tinvalid_color "dimX"\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'unknown color slots are ignored (diff)'>)} { (SQ <'\n'> <'\tgit config color.diff.nosuchslotwilleverbedefined white &&\n'> <'\tgit diff --color\n'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'unknown color slots are ignored (branch)'>)} { (SQ <'\n'> <'\tgit config color.branch.nosuchslotwilleverbedefined white &&\n'> <'\tgit branch -a\n'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'unknown color slots are ignored (status)'>)} { (SQ <'\n'> <'\tgit config color.status.nosuchslotwilleverbedefined white &&\n'> <'\t{ git status; ret=$?; } &&\n'> <'\tcase $ret in 0|1) : ok ;; *) false ;; esac\n'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_done> more_env: [] words: [{<test_done>}] redirects: [] do_fork: T ) ] )