2023-01-11 12:14:07 +03:00
|
|
|
package twin
|
|
|
|
|
|
|
|
import (
|
2023-01-11 12:44:24 +03:00
|
|
|
"strings"
|
2023-01-11 12:14:07 +03:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"gotest.tools/v3/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func assertEncode(t *testing.T, incomingString string, expectedEvent Event, expectedRemainder string) {
|
2023-01-11 13:06:38 +03:00
|
|
|
actualEvent, actualRemainder := consumeEncodedEvent(incomingString)
|
|
|
|
|
2023-01-11 12:44:24 +03:00
|
|
|
message := strings.Replace(incomingString, "\x1b", "ESC", -1)
|
|
|
|
message = strings.Replace(message, "\r", "RET", -1)
|
|
|
|
|
2023-01-11 13:06:38 +03:00
|
|
|
assert.Assert(t, actualEvent != nil,
|
|
|
|
"Input: %s Result: %#v Expected: %#v", message, "nil", expectedEvent)
|
2023-01-11 12:44:24 +03:00
|
|
|
assert.Equal(t, *actualEvent, expectedEvent,
|
|
|
|
"Input: %s Result: %#v Expected: %#v", message, *actualEvent, expectedEvent)
|
|
|
|
assert.Equal(t, actualRemainder, expectedRemainder, message)
|
2023-01-11 12:14:07 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestConsumeEncodedEvent(t *testing.T) {
|
|
|
|
assertEncode(t, "a", EventRune{rune: 'a'}, "")
|
2023-01-11 12:44:24 +03:00
|
|
|
assertEncode(t, "\r", EventKeyCode{keyCode: KeyEnter}, "")
|
|
|
|
assertEncode(t, "\x1b", EventKeyCode{keyCode: KeyEscape}, "")
|
|
|
|
|
|
|
|
// Implicitly test having a remaining rune at the end
|
|
|
|
assertEncode(t, "\x1b[Ax", EventKeyCode{keyCode: KeyUp}, "x")
|
|
|
|
|
|
|
|
assertEncode(t, "\x1b[<64;127;41M", EventMouse{buttons: MouseWheelUp}, "")
|
|
|
|
assertEncode(t, "\x1b[<65;127;41M", EventMouse{buttons: MouseWheelDown}, "")
|
2023-01-11 13:06:38 +03:00
|
|
|
|
|
|
|
// This happens when users paste.
|
|
|
|
//
|
|
|
|
// Ref: https://github.com/walles/moar/issues/73
|
|
|
|
assertEncode(t, "1234", EventRune{rune: '1'}, "234")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestConsumeEncodedEventWithUnsupportedEscapeCode(t *testing.T) {
|
|
|
|
event, remainder := consumeEncodedEvent("\x1bXXXXX")
|
|
|
|
assert.Assert(t, event == nil)
|
|
|
|
assert.Equal(t, remainder, "")
|
2023-01-11 12:14:07 +03:00
|
|
|
}
|
2023-01-11 13:08:38 +03:00
|
|
|
|
|
|
|
func TestConsumeEncodedEventWithNoInput(t *testing.T) {
|
|
|
|
event, remainder := consumeEncodedEvent("")
|
|
|
|
assert.Assert(t, event == nil)
|
|
|
|
assert.Equal(t, remainder, "")
|
|
|
|
}
|