Imported Upstream version 2.17.5
[platform/upstream/git.git] / t / t4026-color.sh
index 3726a0e..671e951 100755 (executable)
@@ -6,10 +6,11 @@
 test_description='Test diff/status color escape codes'
 . ./test-lib.sh
 
+ESC=$(printf '\033')
 color()
 {
        actual=$(git config --get-color no.such.slot "$1") &&
-       test "$actual" = "\e$2"
+       test "$actual" = "${2:+$ESC}$2"
 }
 
 invalid_color()
@@ -21,6 +22,10 @@ test_expect_success 'reset' '
        color "reset" "[m"
 '
 
+test_expect_success 'empty color is empty' '
+       color "" ""
+'
+
 test_expect_success 'attribute before color name' '
        color "bold red" "[1;31m"
 '
@@ -45,14 +50,46 @@ test_expect_success 'fg bg attr...' '
        color "blue bold dim ul blink reverse" "[1;2;4;5;7;34m"
 '
 
+# note that nobold and nodim are the same code (22)
+test_expect_success 'attr negation' '
+       color "nobold nodim noul noblink noreverse" "[22;24;25;27m"
+'
+
+test_expect_success '"no-" variant of negation' '
+       color "no-bold no-blink" "[22;25m"
+'
+
 test_expect_success 'long color specification' '
        color "254 255 bold dim ul blink reverse" "[1;2;4;5;7;38;5;254;48;5;255m"
 '
 
+test_expect_success 'absurdly long color specification' '
+       color \
+         "#ffffff #ffffff bold nobold dim nodim italic noitalic
+          ul noul blink noblink reverse noreverse strike nostrike" \
+         "[1;2;3;4;5;7;9;22;23;24;25;27;29;38;2;255;255;255;48;2;255;255;255m"
+'
+
+test_expect_success '0-7 are aliases for basic ANSI color names' '
+       color "0 7" "[30;47m"
+'
+
 test_expect_success '256 colors' '
        color "254 bold 255" "[1;38;5;254;48;5;255m"
 '
 
+test_expect_success '24-bit colors' '
+       color "#ff00ff black" "[38;2;255;0;255;40m"
+'
+
+test_expect_success '"normal" yields no color at all"' '
+       color "normal black" "[40m"
+'
+
+test_expect_success '-1 is a synonym for "normal"' '
+       color "-1 black" "[40m"
+'
+
 test_expect_success 'color too small' '
        invalid_color "-2"
 '
@@ -84,9 +121,9 @@ test_expect_success 'unknown color slots are ignored (branch)' '
 '
 
 test_expect_success 'unknown color slots are ignored (status)' '
-       git config color.status.nosuchslotwilleverbedefined white || exit
-       git status
-       case $? in 0|1) : ok ;; *) false ;; esac
+       git config color.status.nosuchslotwilleverbedefined white &&
+       { git status; ret=$?; } &&
+       case $ret in 0|1) : ok ;; *) false ;; esac
 '
 
 test_done