fish-shell/src/tests/redirection.rs

44 lines
1.4 KiB
Rust
Raw Normal View History

use crate::io::{IoChain, IoClose, IoFd};
use crate::redirection::dup2_list_resolve_chain;
use std::sync::Arc;
#[test]
fn test_dup2s() {
let mut chain = IoChain::new();
chain.push(Arc::new(IoClose::new(17)));
chain.push(Arc::new(IoFd::new(3, 19)));
let list = dup2_list_resolve_chain(&chain);
assert_eq!(list.get_actions().len(), 2);
let act1 = list.get_actions()[0];
assert_eq!(act1.src, 17);
assert_eq!(act1.target, -1);
let act2 = list.get_actions()[1];
assert_eq!(act2.src, 19);
assert_eq!(act2.target, 3);
}
#[test]
fn test_dup2s_fd_for_target_fd() {
let mut chain = IoChain::new();
// note io_fd_t params are backwards from dup2.
chain.push(Arc::new(IoClose::new(10)));
chain.push(Arc::new(IoFd::new(9, 10)));
chain.push(Arc::new(IoFd::new(5, 8)));
chain.push(Arc::new(IoFd::new(1, 4)));
chain.push(Arc::new(IoFd::new(3, 5)));
let list = dup2_list_resolve_chain(&chain);
assert_eq!(list.fd_for_target_fd(3), 8);
assert_eq!(list.fd_for_target_fd(5), 8);
assert_eq!(list.fd_for_target_fd(8), 8);
assert_eq!(list.fd_for_target_fd(1), 4);
assert_eq!(list.fd_for_target_fd(4), 4);
assert_eq!(list.fd_for_target_fd(100), 100);
assert_eq!(list.fd_for_target_fd(0), 0);
assert_eq!(list.fd_for_target_fd(-1), -1);
assert_eq!(list.fd_for_target_fd(9), -1);
assert_eq!(list.fd_for_target_fd(10), -1);
}