use turkos_os_shell_input::{Epoch, Error, Input}; #[test] fn os_shell_input_cancel_invalidates_stale_commit_and_allows_new_line() { let mut input = Input::<16>::new(); let first = input.epoch(); input.push(first, "hel").unwrap(); input.push(first, "lo").unwrap(); let second = input.cancel(first).unwrap(); assert_eq!(input.len(), 0); assert_eq!(input.commit(first).err(), Some(Error::StaleEpoch)); assert_eq!(input.push(first, "old"), Err(Error::StaleEpoch)); input.push(second, "new").unwrap(); let command = input.commit(second).unwrap(); assert_eq!(command.as_str(), "new"); assert_eq!(command.epoch, second); assert_eq!(input.len(), 0); } #[test] fn os_shell_input_capacity_nul_and_utf8_are_atomic() { let mut input = Input::<5>::new(); let epoch = input.epoch(); input.push(epoch, "ç").unwrap(); assert_eq!(input.len(), 2); assert_eq!(input.push(epoch, "abcd"), Err(Error::Full)); assert_eq!(input.push(epoch, "\0"), Err(Error::Nul)); assert_eq!(input.len(), 2); input.push(epoch, "ay").unwrap(); assert_eq!(input.commit(epoch).unwrap().as_str(), "çay"); } #[test] fn os_shell_input_rejects_wrong_epoch_without_mutation() { let mut input = Input::<8>::new(); let epoch = input.epoch(); input.push(epoch, "run").unwrap(); assert_eq!(input.cancel(Epoch(9)), Err(Error::StaleEpoch)); assert_eq!(input.commit(Epoch(9)).err(), Some(Error::StaleEpoch)); assert_eq!(input.len(), 3); assert_eq!(input.commit(epoch).unwrap().as_str(), "run"); }