installed pty
[VSoRC/.git] / node_modules / node-pty / deps / winpty / misc / color-test.sh
diff --git a/node_modules/node-pty/deps/winpty/misc/color-test.sh b/node_modules/node-pty/deps/winpty/misc/color-test.sh
new file mode 100644 (file)
index 0000000..065c809
--- /dev/null
@@ -0,0 +1,212 @@
+#!/bin/bash
+
+FORE=$1
+BACK=$2
+FILL=$3
+
+if [ "$FORE" = "" ]; then
+    FORE=DefaultFore
+fi
+if [ "$BACK" = "" ]; then
+    BACK=DefaultBack
+fi
+
+# To detect color changes, we want a character that fills the whole cell
+# if possible.  U+2588 is perfect, except that it becomes invisible in the
+# original xterm, when bolded.  For that terminal, use something else, like
+# "#" or "@".
+if [ "$FILL" = "" ]; then
+    FILL="█"
+fi
+
+# SGR (Select Graphic Rendition)
+s() {
+    printf '\033[0m'
+    while [ "$1" != "" ]; do
+        printf '\033['"$1"'m'
+        shift
+    done
+}
+
+# Print
+p() {
+    echo -n "$@"
+}
+
+# Print with newline
+pn() {
+    echo "$@"
+}
+
+# For practical reasons, sandwich black and white in-between the other colors.
+FORE_COLORS="31 30 37 32 33 34 35 36"
+BACK_COLORS="41 40 47 42 43 44 45 46"
+
+
+
+### Test order of Invert(7) -- it does not matter what order it appears in.
+
+# The Red color setting here (31) is shadowed by the green setting (32).  The
+# Reverse flag does not cause (32) to alter the background color immediately;
+# instead, the Reverse flag is applied once to determine the final effective
+# Fore/Back colors.
+s 7 31 32; p " -- Should be: $BACK-on-green -- "; s; pn
+s 31 7 32; p " -- Should be: $BACK-on-green -- "; s; pn
+s 31 32 7; p " -- Should be: $BACK-on-green -- "; s; pn
+
+# As above, but for the background color.
+s 7 41 42; p " -- Should be: green-on-$FORE -- "; s; pn
+s 41 7 42; p " -- Should be: green-on-$FORE -- "; s; pn
+s 41 42 7; p " -- Should be: green-on-$FORE -- "; s; pn
+
+# One last, related test
+s 7; p "Invert text"; s 7 1; p " with some words bold"; s; pn;
+s 0; p "Normal text"; s 0 1; p " with some words bold"; s; pn;
+
+pn
+
+
+
+### Test effect of Bold(1) on color, with and without Invert(7).
+
+# The Bold flag does not affect the background color when Reverse is missing.
+# There should always be 8 colored boxes.
+p "  "
+for x in $BACK_COLORS; do
+    s $x; p "-"; s $x 1; p "-"
+done
+s; pn "    Bold should not affect background"
+
+# On some terminals, Bold affects color, and on some it doesn't.  If there
+# are only 8 colored boxes, then the next two tests will also show 8 colored
+# boxes.  If there are 16 boxes, then exactly one of the next two tests will
+# also have 16 boxes.
+p "  "
+for x in $FORE_COLORS; do
+    s $x; p "$FILL"; s $x 1; p "$FILL"
+done
+s; pn "    Does bold affect foreground color?"
+
+# On some terminals, Bold+Invert highlights the final Background color.
+p "  "
+for x in $FORE_COLORS; do
+    s $x 7; p "-"; s $x 7 1; p "-"
+done
+s; pn "    Test if Bold+Invert affects background color"
+
+# On some terminals, Bold+Invert highlights the final Foreground color.
+p "  "
+for x in $BACK_COLORS; do
+    s $x 7; p "$FILL"; s $x 7 1; p "$FILL"
+done
+s; pn "    Test if Bold+Invert affects foreground color"
+
+pn
+
+
+
+### Test for support of ForeHi and BackHi properties.
+
+# ForeHi
+p "  "
+for x in $FORE_COLORS; do
+    hi=$(( $x + 60 ))
+    s $x; p "$FILL"; s $hi; p "$FILL"
+done
+s; pn "    Test for support of ForeHi colors"
+p "  "
+for x in $FORE_COLORS; do
+    hi=$(( $x + 60 ))
+    s $x; p "$FILL"; s $x $hi; p "$FILL"
+done
+s; pn "    Test for support of ForeHi colors (w/compat)"
+
+# BackHi
+p "  "
+for x in $BACK_COLORS; do
+    hi=$(( $x + 60 ))
+    s $x; p "-"; s $hi; p "-"
+done
+s; pn "    Test for support of BackHi colors"
+p "  "
+for x in $BACK_COLORS; do
+    hi=$(( $x + 60 ))
+    s $x; p "-"; s $x $hi; p "-"
+done
+s; pn "    Test for support of BackHi colors (w/compat)"
+
+pn
+
+
+
+### Identify the default fore and back colors.
+
+pn "Match default fore and back colors against 16-color palette"
+pn "  ==fore==  ==back=="
+for fore in $FORE_COLORS; do
+    forehi=$(( $fore + 60 ))
+    back=$(( $fore + 10 ))
+    backhi=$(( $back + 60 ))
+    p "  "
+    s $fore;   p "$FILL"; s; p "$FILL"; s $fore;   p "$FILL"; s; p "  "
+    s $forehi; p "$FILL"; s; p "$FILL"; s $forehi; p "$FILL"; s; p "  "
+    s $back;   p "-"; s; p "-"; s $back;   p "-"; s; p "  "
+    s $backhi; p "-"; s; p "-"; s $backhi; p "-"; s; p "  "
+    pn "  $fore $forehi $back $backhi"
+done
+
+pn
+
+
+
+### Test coloring of rest-of-line.
+
+#
+# When a new line is scrolled in, every cell in the line receives the
+# current background color, which can be the default/transparent color.
+#
+
+p "Newline with red background: usually no red -->"; s 41; pn
+s; pn "This text is plain, but rest is red if scrolled -->"
+s; p " "; s 41; printf '\033[1K'; s; printf '\033[1C'; pn "<-- red Erase-in-Line to beginning"
+s; p "red Erase-in-Line to end -->"; s 41; printf '\033[0K'; s; pn
+pn
+
+
+
+### Moving the cursor around does not change colors of anything.
+
+pn "Test modifying uncolored lines with a colored SGR:"
+pn "aaaa"
+pn
+pn "____e"
+s 31 42; printf '\033[4C\033[3A'; pn "bb"
+pn "cccc"
+pn "dddd"
+s; pn
+
+pn "Test modifying colored+inverted+bold line with plain text:"
+s 42 31 7 1; printf 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r';
+s; pn "This text is plain and followed by green-on-red -->"
+pn
+
+
+
+### Full-width character overwriting
+
+pn 'Overwrite part of a full-width char with a half-width char'
+p 'initial U+4000 ideographs -->'; s 31 42; p '䀀䀀'; s; pn
+p 'write X to index #1 -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[24G'; p X; s; pn
+p 'write X to index #2 -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[25G'; p X; s; pn
+p 'write X to index #3 -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[26G'; p X; s; pn
+p 'write X to index #4 -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[27G'; p X; s; pn
+pn
+
+pn 'Verify that Erase-in-Line can "fix" last char in line'
+p 'original                  -->'; s 31 42; p '䀀䀀'; s; pn
+p 'overwrite                 -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[30G'; p 'XXX'; s; pn
+p 'overwrite + Erase-in-Line -->'; s 31 42; p '䀀䀀'; s 35 44; printf '\033[30G'; p 'XXX'; s; printf '\033[0K'; pn
+p 'original                  -->'; s 31 42; p 'X䀀䀀'; s; pn
+p 'overwrite                 -->'; s 31 42; p 'X䀀䀀'; s 35 44; printf '\033[30G'; p 'ーー'; s; pn
+p 'overwrite + Erase-in-Line -->'; s 31 42; p 'X䀀䀀'; s 35 44; printf '\033[30G'; p 'ーー'; s; printf '\033[0K'; pn
+pn