import gleam/list import gleeunit import input/key.{type Key, Char, csi, esc} pub fn main() -> Nil { gleeunit.main() } type TestCase { TestCase(input: List(String), expected: Key) } pub fn key_from_list_test() { let base_tests = [TestCase([], key.Continue([]))] let char_tests = [TestCase(["c"], Char("c"))] let escape_tests = [ TestCase([esc, csi], key.Continue([esc, csi])), TestCase([esc], key.Continue([esc])), TestCase([esc, csi, "D"], key.Left), TestCase([esc, csi, "C"], key.Right), TestCase([esc, csi, "A"], key.Up), TestCase([esc, csi, "B"], key.Down), ] let input_tests = [ TestCase(["$"], key.Continue(["$"])), TestCase(["$", "a"], key.Continue(["$", "a"])), TestCase(["$", "a", "b"], key.Continue(["$", "ab"])), TestCase(["$", "ab", "\r"], key.Input("ab")), ] let test_cases = [base_tests, char_tests, escape_tests, input_tests] list.each(list.flatten(test_cases), fn(tc) { assert tc.expected == key.from_list(tc.input) }) }