From 7182ab387f6fc6c90c62272d6fa29d22f5dd6fed Mon Sep 17 00:00:00 2001 From: bel Date: Fri, 24 Mar 2023 21:38:06 -0600 Subject: [PATCH] test button.plaintext parser --- src/device/input/button/parser_test.go | 11 +++++++++ src/device/input/button/plaintext.go | 19 ++++++++------- src/device/input/button/plaintext_test.go | 29 +++++++++++++++++++++++ src/device/input/button/v1.go | 19 +++++++++++++++ 4 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 src/device/input/button/parser_test.go create mode 100644 src/device/input/button/plaintext_test.go create mode 100644 src/device/input/button/v1.go diff --git a/src/device/input/button/parser_test.go b/src/device/input/button/parser_test.go new file mode 100644 index 0000000..caba359 --- /dev/null +++ b/src/device/input/button/parser_test.go @@ -0,0 +1,11 @@ +package button_test + +import ( + "mayhem-party/src/device/input/button" + "testing" +) + +func TestParser(t *testing.T) { + var _ button.Parser = button.Plaintext{} + var _ button.Parser = button.V1{} +} diff --git a/src/device/input/button/plaintext.go b/src/device/input/button/plaintext.go index dd258d6..23c12d4 100644 --- a/src/device/input/button/plaintext.go +++ b/src/device/input/button/plaintext.go @@ -6,26 +6,29 @@ import ( ) type Plaintext struct { - src raw.Raw + src raw.Raw + release byte } func NewPlaintext(src raw.Raw) Plaintext { - return Plaintext{src: src} + releaseChar := byte('!') + if v := os.Getenv("BUTTON_PLAINTEXT_RELEASE"); v != "" { + releaseChar = byte(v[0]) + } + return Plaintext{ + src: src, + release: releaseChar, + } } func (p Plaintext) Close() { p.src.Close() } func (p Plaintext) Read() []Button { - releaseChar := byte('!') - if v := os.Getenv("BUTTON_PLAINTEXT_RELEASE"); v != "" { - releaseChar = byte(v[0]) - } - b := p.src.Read() buttons := make([]Button, 0, len(b)) down := true for i := range b { - if b[i] == releaseChar { + if b[i] == p.release { down = false } else { if b[i] != '\n' { diff --git a/src/device/input/button/plaintext_test.go b/src/device/input/button/plaintext_test.go new file mode 100644 index 0000000..f293aab --- /dev/null +++ b/src/device/input/button/plaintext_test.go @@ -0,0 +1,29 @@ +package button_test + +import ( + "mayhem-party/src/device/input/button" + "testing" +) + +func TestPlaintext(t *testing.T) { + src := constSrc("c!b") + p := button.NewPlaintext(src) + got := p.Read() + if len(got) != 2 { + t.Fatal(len(got)) + } + if got[0] != (button.Button{Char: 'c', Down: true}) { + t.Error(got[0]) + } + if got[1] != (button.Button{Char: 'b', Down: false}) { + t.Error(got[1]) + } +} + +type constSrc string + +func (c constSrc) Close() {} + +func (c constSrc) Read() []byte { + return []byte(c) +} diff --git a/src/device/input/button/v1.go b/src/device/input/button/v1.go new file mode 100644 index 0000000..639a5f7 --- /dev/null +++ b/src/device/input/button/v1.go @@ -0,0 +1,19 @@ +package button + +import "mayhem-party/src/device/input/raw" + +type V1 struct { + src raw.Raw +} + +func NewV1(src raw.Raw) V1 { + return V1{ + src: src, + } +} + +func (v1 V1) Close() { v1.src.Close() } + +func (v1 V1) Read() []Button { + panic(nil) +}