mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-20 06:13:47 +08:00
44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
|
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);
|
||
|
}
|