And add the ability of other modules to listen to either the final result (a `Key`) or tap into the input as it is read
34 lines
742 B
Gleam
34 lines
742 B
Gleam
import gleam/list
|
|
import gleeunit
|
|
|
|
import input/key.{type Key, Char}
|
|
import mpv/control.{type Control}
|
|
import mpv/internal as control_internal
|
|
|
|
pub fn main() -> Nil {
|
|
gleeunit.main()
|
|
}
|
|
|
|
type TestCase {
|
|
TestCase(key: Key, expected: Result(Control, Nil))
|
|
}
|
|
|
|
pub fn control_from_key_test() {
|
|
let test_cases = [
|
|
TestCase(Char(" "), Ok(control.TogglePlayPause)),
|
|
TestCase(Char("q"), Ok(control.Exit)),
|
|
]
|
|
|
|
list.each(test_cases, fn(tc) {
|
|
assert tc.expected == control.from_key(tc.key)
|
|
})
|
|
}
|
|
|
|
pub fn parse_playback_time_test() {
|
|
let json_string =
|
|
"{\"data\":\"123.456789\",\"request_id\":0,\"error\":\"success\"}\n"
|
|
|
|
let assert Ok(data) = control_internal.parse_playback_time(json_string)
|
|
assert data == 123.456789
|
|
}
|