use crate::posix::helpers::*;
use std::fs;
#[test]
fn posix_paste_basic() {
let dir = setup_test_env();
let file1 = dir.path().join("file1");
let file2 = dir.path().join("file2");
fs::write(&file1, "a\nb\nc\n").unwrap();
fs::write(&file2, "1\n2\n3\n").unwrap();
let result = run(&[
"paste",
file1.to_str().unwrap(),
file2.to_str().unwrap(),
]);
assert_success(&result);
assert!(result.1.contains("a\t1"));
assert!(result.1.contains("b\t2"));
assert!(result.1.contains("c\t3"));
}
#[test]
fn posix_paste_delimiter() {
let dir = setup_test_env();
let file1 = dir.path().join("file1");
let file2 = dir.path().join("file2");
fs::write(&file1, "a\nb\n").unwrap();
fs::write(&file2, "1\n2\n").unwrap();
let result = run(&[
"paste",
"-d:",
file1.to_str().unwrap(),
file2.to_str().unwrap(),
]);
assert_success(&result);
assert!(result.1.contains("a:1"));
assert!(result.1.contains("b:2"));
}
#[test]
fn posix_paste_serial() {
let dir = setup_test_env();
let file = dir.path().join("file");
fs::write(&file, "a\nb\nc\n").unwrap();
let result = run(&["paste", "-s", file.to_str().unwrap()]);
assert_success(&result);
assert_eq!(result.1, "a\tb\tc\n");
}
#[test]
fn posix_paste_stdin() {
let dir = setup_test_env();
let file = dir.path().join("file");
fs::write(&file, "1\n2\n").unwrap();
let result = run_with_stdin(
&["paste", "-", file.to_str().unwrap()],
b"a\nb\n",
);
assert_success(&result);
assert!(result.1.contains("a\t1"));
}
#[test]
fn posix_paste_multi_delim() {
let dir = setup_test_env();
let file1 = dir.path().join("file1");
let file2 = dir.path().join("file2");
let file3 = dir.path().join("file3");
fs::write(&file1, "a\n").unwrap();
fs::write(&file2, "b\n").unwrap();
fs::write(&file3, "c\n").unwrap();
let result = run(&[
"paste",
"-d:,",
file1.to_str().unwrap(),
file2.to_str().unwrap(),
file3.to_str().unwrap(),
]);
assert_success(&result);
assert!(result.1.contains("a:b,c"));
}
#[test]
fn posix_paste_exit_success() {
let result = run_with_stdin(&["paste", "-"], b"test");
assert_eq!(result.0, 0);
}
#[test]
fn posix_paste_uneven() {
let dir = setup_test_env();
let file1 = dir.path().join("file1");
let file2 = dir.path().join("file2");
fs::write(&file1, "a\nb\nc\n").unwrap();
fs::write(&file2, "1\n").unwrap();
let result = run(&[
"paste",
file1.to_str().unwrap(),
file2.to_str().unwrap(),
]);
assert_success(&result);
assert!(result.1.contains("a\t1"));
}
#[test]
fn posix_paste_no_delim() {
let dir = setup_test_env();
let file1 = dir.path().join("file1");
let file2 = dir.path().join("file2");
fs::write(&file1, "a\n").unwrap();
fs::write(&file2, "b\n").unwrap();
let result = run(&[
"paste",
"-d",
"",
file1.to_str().unwrap(),
file2.to_str().unwrap(),
]);
if result.0 == 0 {
assert!(result.1.contains("ab"));
}
}