#![feature(fs)] extern crate termios; #[test] fn get_term_attr_should_return_data() { use termios::{termios, TermIntf}; use std::fs::{OpenOptions}; let tty = OpenOptions::new().read(true) .write(true) .create(false) .open("/dev/tty") .unwrap(); let empty_attrs = termios::new(); let mut tty_attrs = termios::new(); assert!(empty_attrs == tty_attrs); let _ = tty.get_term_attr(&mut tty_attrs); assert!(empty_attrs != tty_attrs); } #[test] fn get_after_set_term_attr_should_reflect_changes() { use termios::{termios, TermIntf, TCSANOW}; use std::fs::{OpenOptions}; let tty = OpenOptions::new().read(true) .write(true) .create(true) .open("/dev/tty") .unwrap(); let mut pre_attrs = termios::new(); let mut post_attrs = termios::new(); let _ = tty.get_term_attr(&mut pre_attrs); assert!(pre_attrs != post_attrs); post_attrs = pre_attrs.clone(); assert!(pre_attrs == post_attrs); // tty will ordinarily have local mode bits set, such as echo, canonical, // etc., so zeroing it here is pretty reliable for testing. // ref: man page states "by default, ICANON set". post_attrs.c_lflag = 0; // TODO(bas): is the above assumption brittle? let _ = tty.set_term_attr(TCSANOW, &post_attrs); let _ = tty.get_term_attr(&mut post_attrs); assert!(pre_attrs != post_attrs); let _ = tty.set_term_attr(TCSANOW, &pre_attrs); }