mirror of
https://github.com/jroimartin/gocui.git
synced 2025-04-27 13:48:49 +08:00
141 lines
4.9 KiB
Go
141 lines
4.9 KiB
Go
package gocui
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseOne(t *testing.T) {
|
|
var ei *escapeInterpreter
|
|
|
|
ei = newEscapeInterpreter(OutputNormal)
|
|
isEscape, err := ei.parseOne('a')
|
|
assert.Equal(t, false, isEscape)
|
|
assert.NoError(t, err)
|
|
|
|
ei = newEscapeInterpreter(OutputNormal)
|
|
parseEscRunes(t, ei, "\x1b[0K")
|
|
_, ok := ei.instruction.(eraseInLineFromCursor)
|
|
assert.Equal(t, true, ok)
|
|
|
|
ei = newEscapeInterpreter(OutputNormal)
|
|
parseEscRunes(t, ei, "\x1b[K")
|
|
_, ok = ei.instruction.(eraseInLineFromCursor)
|
|
assert.Equal(t, true, ok)
|
|
|
|
ei = newEscapeInterpreter(OutputNormal)
|
|
parseEscRunes(t, ei, "\x1b[1K")
|
|
_, ok = ei.instruction.(noInstruction)
|
|
assert.Equal(t, true, ok)
|
|
|
|
}
|
|
|
|
func TestParseOneColours(t *testing.T) {
|
|
scenarios := []struct {
|
|
outputMode OutputMode
|
|
input string
|
|
expectedFg Attribute
|
|
expectedBg Attribute
|
|
}{
|
|
{OutputNormal, "\x1b[30m", ColorBlack, ColorDefault},
|
|
{OutputNormal, "\x1b[31m", ColorRed, ColorDefault},
|
|
{OutputNormal, "\x1b[32m", ColorGreen, ColorDefault},
|
|
{OutputNormal, "\x1b[33m", ColorYellow, ColorDefault},
|
|
{OutputNormal, "\x1b[34m", ColorBlue, ColorDefault},
|
|
{OutputNormal, "\x1b[35m", ColorMagenta, ColorDefault},
|
|
{OutputNormal, "\x1b[36m", ColorCyan, ColorDefault},
|
|
{OutputNormal, "\x1b[37m", ColorWhite, ColorDefault},
|
|
{OutputNormal, "\x1b[40m", ColorDefault, ColorBlack},
|
|
{OutputNormal, "\x1b[41m", ColorDefault, ColorRed},
|
|
{OutputNormal, "\x1b[42m", ColorDefault, ColorGreen},
|
|
{OutputNormal, "\x1b[43m", ColorDefault, ColorYellow},
|
|
{OutputNormal, "\x1b[44m", ColorDefault, ColorBlue},
|
|
{OutputNormal, "\x1b[45m", ColorDefault, ColorMagenta},
|
|
{OutputNormal, "\x1b[46m", ColorDefault, ColorCyan},
|
|
{OutputNormal, "\x1b[47m", ColorDefault, ColorWhite},
|
|
{OutputNormal, "\x1b[47;31m", ColorRed, ColorWhite},
|
|
{OutputNormal, "\x1b[90m", Get256Color(8), ColorDefault},
|
|
{OutputNormal, "\x1b[91m", Get256Color(9), ColorDefault},
|
|
{OutputNormal, "\x1b[92m", Get256Color(10), ColorDefault},
|
|
{OutputNormal, "\x1b[93m", Get256Color(11), ColorDefault},
|
|
{OutputNormal, "\x1b[94m", Get256Color(12), ColorDefault},
|
|
{OutputNormal, "\x1b[95m", Get256Color(13), ColorDefault},
|
|
{OutputNormal, "\x1b[96m", Get256Color(14), ColorDefault},
|
|
{OutputNormal, "\x1b[97m", Get256Color(15), ColorDefault},
|
|
{OutputNormal, "\x1b[100m", ColorDefault, Get256Color(8)},
|
|
{OutputNormal, "\x1b[101m", ColorDefault, Get256Color(9)},
|
|
{OutputNormal, "\x1b[102m", ColorDefault, Get256Color(10)},
|
|
{OutputNormal, "\x1b[103m", ColorDefault, Get256Color(11)},
|
|
{OutputNormal, "\x1b[104m", ColorDefault, Get256Color(12)},
|
|
{OutputNormal, "\x1b[105m", ColorDefault, Get256Color(13)},
|
|
{OutputNormal, "\x1b[106m", ColorDefault, Get256Color(14)},
|
|
{OutputNormal, "\x1b[107m", ColorDefault, Get256Color(15)},
|
|
{Output256, "\x1b[38;5;32m", Get256Color(32), ColorDefault},
|
|
{OutputTrue, "\x1b[38;5;32m", Get256Color(32), ColorDefault},
|
|
{OutputTrue, "\x1b[38;2;50;103;205m", NewRGBColor(50, 103, 205), ColorDefault},
|
|
{Output256, "\x1b[48;5;32m", ColorDefault, Get256Color(32)},
|
|
{OutputTrue, "\x1b[48;5;32m", ColorDefault, Get256Color(32)},
|
|
{OutputTrue, "\x1b[48;2;50;103;205m", ColorDefault, NewRGBColor(50, 103, 205)},
|
|
{OutputTrue, "\x1b[1;95;48;2;255;224;224m", Get256Color(13), NewRGBColor(255, 224, 224)},
|
|
}
|
|
|
|
for _, scenario := range scenarios {
|
|
ei := newEscapeInterpreter(scenario.outputMode)
|
|
parseEscRunes(t, ei, scenario.input)
|
|
assert.Equal(t, scenario.expectedFg, ei.curFgColor&AttrColorBits)
|
|
assert.Equal(t, scenario.expectedBg, ei.curBgColor)
|
|
}
|
|
|
|
// resetting colours
|
|
scenarios = []struct {
|
|
outputMode OutputMode
|
|
input string
|
|
expectedFg Attribute
|
|
expectedBg Attribute
|
|
}{
|
|
{OutputNormal, "\x1b[39m", ColorDefault, ColorRed},
|
|
{OutputNormal, "\x1b[49m", ColorRed, ColorDefault},
|
|
{OutputNormal, "\x1b[0m", ColorDefault, ColorDefault},
|
|
}
|
|
|
|
for _, scenario := range scenarios {
|
|
ei := newEscapeInterpreter(scenario.outputMode)
|
|
ei.curFgColor = ColorRed
|
|
ei.curBgColor = ColorRed
|
|
parseEscRunes(t, ei, scenario.input)
|
|
assert.Equal(t, scenario.expectedFg, ei.curFgColor)
|
|
assert.Equal(t, scenario.expectedBg, ei.curBgColor)
|
|
}
|
|
|
|
// setting attributes
|
|
attrScenarios := []struct {
|
|
outputMode OutputMode
|
|
input string
|
|
expectedAttr Attribute
|
|
}{
|
|
{OutputNormal, "\x1b[1m", AttrBold},
|
|
{OutputNormal, "\x1b[2m", AttrDim},
|
|
{OutputNormal, "\x1b[3m", AttrItalic},
|
|
{OutputNormal, "\x1b[4m", AttrUnderline},
|
|
{OutputNormal, "\x1b[5m", AttrBlink},
|
|
{OutputNormal, "\x1b[7m", AttrReverse},
|
|
{OutputNormal, "\x1b[9m", AttrStrikeThrough},
|
|
}
|
|
|
|
for _, scenario := range attrScenarios {
|
|
ei := newEscapeInterpreter(scenario.outputMode)
|
|
parseEscRunes(t, ei, scenario.input)
|
|
style := ei.curFgColor & AttrStyleBits
|
|
assert.Equal(t, scenario.expectedAttr, style)
|
|
}
|
|
}
|
|
|
|
func parseEscRunes(t *testing.T, ei *escapeInterpreter, runes string) {
|
|
for _, r := range []rune(runes) {
|
|
isEscape, err := ei.parseOne(r)
|
|
assert.Equal(t, true, isEscape)
|
|
assert.NoError(t, err)
|
|
}
|
|
}
|