141 lines
5.1 KiB
Go
141 lines
5.1 KiB
Go
package ansiterm
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestStateTransitions(t *testing.T) {
|
|
stateTransitionHelper(t, "CsiEntry", "Ground", alphabetics)
|
|
stateTransitionHelper(t, "CsiEntry", "CsiParam", csiCollectables)
|
|
stateTransitionHelper(t, "Escape", "CsiEntry", []byte{ANSI_ESCAPE_SECONDARY})
|
|
stateTransitionHelper(t, "Escape", "OscString", []byte{0x5D})
|
|
stateTransitionHelper(t, "Escape", "Ground", escapeToGroundBytes)
|
|
stateTransitionHelper(t, "Escape", "EscapeIntermediate", intermeds)
|
|
stateTransitionHelper(t, "EscapeIntermediate", "EscapeIntermediate", intermeds)
|
|
stateTransitionHelper(t, "EscapeIntermediate", "EscapeIntermediate", executors)
|
|
stateTransitionHelper(t, "EscapeIntermediate", "Ground", escapeIntermediateToGroundBytes)
|
|
stateTransitionHelper(t, "OscString", "Ground", []byte{ANSI_BEL})
|
|
stateTransitionHelper(t, "OscString", "Ground", []byte{0x5C})
|
|
stateTransitionHelper(t, "Ground", "Ground", executors)
|
|
}
|
|
|
|
func TestAnyToX(t *testing.T) {
|
|
anyToXHelper(t, []byte{ANSI_ESCAPE_PRIMARY}, "Escape")
|
|
anyToXHelper(t, []byte{DCS_ENTRY}, "DcsEntry")
|
|
anyToXHelper(t, []byte{OSC_STRING}, "OscString")
|
|
anyToXHelper(t, []byte{CSI_ENTRY}, "CsiEntry")
|
|
anyToXHelper(t, toGroundBytes, "Ground")
|
|
}
|
|
|
|
func TestCollectCsiParams(t *testing.T) {
|
|
parser, _ := createTestParser("CsiEntry")
|
|
parser.Parse(csiCollectables)
|
|
|
|
buffer := parser.context.paramBuffer
|
|
bufferCount := len(buffer)
|
|
|
|
if bufferCount != len(csiCollectables) {
|
|
t.Errorf("Buffer: %v", buffer)
|
|
t.Errorf("CsiParams: %v", csiCollectables)
|
|
t.Errorf("Buffer count failure: %d != %d", bufferCount, len(csiParams))
|
|
return
|
|
}
|
|
|
|
for i, v := range csiCollectables {
|
|
if v != buffer[i] {
|
|
t.Errorf("Buffer: %v", buffer)
|
|
t.Errorf("CsiParams: %v", csiParams)
|
|
t.Errorf("Mismatch at buffer[%d] = %d", i, buffer[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseParams(t *testing.T) {
|
|
parseParamsHelper(t, []byte{}, []string{})
|
|
parseParamsHelper(t, []byte{';'}, []string{})
|
|
parseParamsHelper(t, []byte{';', ';'}, []string{})
|
|
parseParamsHelper(t, []byte{'7'}, []string{"7"})
|
|
parseParamsHelper(t, []byte{'7', ';'}, []string{"7"})
|
|
parseParamsHelper(t, []byte{'7', ';', ';'}, []string{"7"})
|
|
parseParamsHelper(t, []byte{'7', ';', ';', '8'}, []string{"7", "8"})
|
|
parseParamsHelper(t, []byte{'7', ';', '8', ';'}, []string{"7", "8"})
|
|
parseParamsHelper(t, []byte{'7', ';', ';', '8', ';', ';'}, []string{"7", "8"})
|
|
parseParamsHelper(t, []byte{'7', '8'}, []string{"78"})
|
|
parseParamsHelper(t, []byte{'7', '8', ';'}, []string{"78"})
|
|
parseParamsHelper(t, []byte{'7', '8', ';', '9', '0'}, []string{"78", "90"})
|
|
parseParamsHelper(t, []byte{'7', '8', ';', ';', '9', '0'}, []string{"78", "90"})
|
|
parseParamsHelper(t, []byte{'7', '8', ';', '9', '0', ';'}, []string{"78", "90"})
|
|
parseParamsHelper(t, []byte{'7', '8', ';', '9', '0', ';', ';'}, []string{"78", "90"})
|
|
}
|
|
|
|
func TestCursor(t *testing.T) {
|
|
cursorSingleParamHelper(t, 'A', "CUU")
|
|
cursorSingleParamHelper(t, 'B', "CUD")
|
|
cursorSingleParamHelper(t, 'C', "CUF")
|
|
cursorSingleParamHelper(t, 'D', "CUB")
|
|
cursorSingleParamHelper(t, 'E', "CNL")
|
|
cursorSingleParamHelper(t, 'F', "CPL")
|
|
cursorSingleParamHelper(t, 'G', "CHA")
|
|
cursorTwoParamHelper(t, 'H', "CUP")
|
|
cursorTwoParamHelper(t, 'f', "HVP")
|
|
funcCallParamHelper(t, []byte{'?', '2', '5', 'h'}, "CsiEntry", "Ground", []string{"DECTCEM([true])"})
|
|
funcCallParamHelper(t, []byte{'?', '2', '5', 'l'}, "CsiEntry", "Ground", []string{"DECTCEM([false])"})
|
|
}
|
|
|
|
func TestErase(t *testing.T) {
|
|
// Erase in Display
|
|
eraseHelper(t, 'J', "ED")
|
|
|
|
// Erase in Line
|
|
eraseHelper(t, 'K', "EL")
|
|
}
|
|
|
|
func TestSelectGraphicRendition(t *testing.T) {
|
|
funcCallParamHelper(t, []byte{'m'}, "CsiEntry", "Ground", []string{"SGR([0])"})
|
|
funcCallParamHelper(t, []byte{'0', 'm'}, "CsiEntry", "Ground", []string{"SGR([0])"})
|
|
funcCallParamHelper(t, []byte{'0', ';', '1', 'm'}, "CsiEntry", "Ground", []string{"SGR([0 1])"})
|
|
funcCallParamHelper(t, []byte{'0', ';', '1', ';', '2', 'm'}, "CsiEntry", "Ground", []string{"SGR([0 1 2])"})
|
|
}
|
|
|
|
func TestScroll(t *testing.T) {
|
|
scrollHelper(t, 'S', "SU")
|
|
scrollHelper(t, 'T', "SD")
|
|
}
|
|
|
|
func TestPrint(t *testing.T) {
|
|
parser, evtHandler := createTestParser("Ground")
|
|
parser.Parse(printables)
|
|
validateState(t, parser.currState, "Ground")
|
|
|
|
for i, v := range printables {
|
|
expectedCall := fmt.Sprintf("Print([%s])", string(v))
|
|
actualCall := evtHandler.FunctionCalls[i]
|
|
if actualCall != expectedCall {
|
|
t.Errorf("Actual != Expected: %v != %v at %d", actualCall, expectedCall, i)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestClear(t *testing.T) {
|
|
p, _ := createTestParser("Ground")
|
|
fillContext(p.context)
|
|
p.clear()
|
|
validateEmptyContext(t, p.context)
|
|
}
|
|
|
|
func TestClearOnStateChange(t *testing.T) {
|
|
clearOnStateChangeHelper(t, "Ground", "Escape", []byte{ANSI_ESCAPE_PRIMARY})
|
|
clearOnStateChangeHelper(t, "Ground", "CsiEntry", []byte{CSI_ENTRY})
|
|
}
|
|
|
|
func TestC0(t *testing.T) {
|
|
expectedCall := "Execute([" + string(ANSI_LINE_FEED) + "])"
|
|
c0Helper(t, []byte{ANSI_LINE_FEED}, "Ground", []string{expectedCall})
|
|
expectedCall = "Execute([" + string(ANSI_CARRIAGE_RETURN) + "])"
|
|
c0Helper(t, []byte{ANSI_CARRIAGE_RETURN}, "Ground", []string{expectedCall})
|
|
}
|
|
|
|
func TestEscDispatch(t *testing.T) {
|
|
funcCallParamHelper(t, []byte{'M'}, "Escape", "Ground", []string{"RI([])"})
|
|
}
|