parse_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package input
  2. import (
  3. "image/color"
  4. "reflect"
  5. "testing"
  6. "github.com/charmbracelet/x/ansi"
  7. )
  8. func TestParseSequence_Events(t *testing.T) {
  9. input := []byte("\x1b\x1b[Ztest\x00\x1b]10;rgb:1234/1234/1234\x07\x1b[27;2;27~\x1b[?1049;2$y\x1b[4;1$y")
  10. want := []Event{
  11. KeyPressEvent{Code: KeyTab, Mod: ModShift | ModAlt},
  12. KeyPressEvent{Code: 't', Text: "t"},
  13. KeyPressEvent{Code: 'e', Text: "e"},
  14. KeyPressEvent{Code: 's', Text: "s"},
  15. KeyPressEvent{Code: 't', Text: "t"},
  16. KeyPressEvent{Code: KeySpace, Mod: ModCtrl},
  17. ForegroundColorEvent{color.RGBA{R: 0x12, G: 0x12, B: 0x12, A: 0xff}},
  18. KeyPressEvent{Code: KeyEscape, Mod: ModShift},
  19. ModeReportEvent{Mode: ansi.AltScreenSaveCursorMode, Value: ansi.ModeReset},
  20. ModeReportEvent{Mode: ansi.InsertReplaceMode, Value: ansi.ModeSet},
  21. }
  22. var p Parser
  23. for i := 0; len(input) != 0; i++ {
  24. if i >= len(want) {
  25. t.Fatalf("reached end of want events")
  26. }
  27. n, got := p.parseSequence(input)
  28. if !reflect.DeepEqual(got, want[i]) {
  29. t.Errorf("got %#v (%T), want %#v (%T)", got, got, want[i], want[i])
  30. }
  31. input = input[n:]
  32. }
  33. }
  34. func BenchmarkParseSequence(b *testing.B) {
  35. var p Parser
  36. input := []byte("\x1b\x1b[Ztest\x00\x1b]10;1234/1234/1234\x07\x1b[27;2;27~")
  37. b.ReportAllocs()
  38. b.ResetTimer()
  39. for i := 0; i < b.N; i++ {
  40. p.parseSequence(input)
  41. }
  42. }