mirror of
https://github.com/nushell/nushell.git
synced 2024-12-28 09:59:36 +01:00
319930a1b9
* Add streaming support to save for ExternalStream data Prior to this change, save would collect data from an ExternalStream (data originating from externals) consuming memory for the full amount of data piped to it, This change adds streaming support for ExternalStream allowing saving of arbitrarily large files and bounding memory usage. * Remove broken save test This test passes but not for the right reasons, since this test was written filename has become a required parameter. The parser outputs an error but the test still passes as is checking the original un-mutated file assuming save has re-written the contents. This change removes the test. ``` running 1 test === stderr Error: nu::parser::missing_positional (https://docs.rs/nu-parser/0.60.0/nu-parser/enum.ParseError.html#variant.MissingPositional) × Missing required positional argument. ╭─[source:1:1] 1 │ open save_test_1/cargo_sample.toml | save · ▲ · ╰── missing filename ╰──── help: Usage: save {flags} <filename> test commands::save::figures_out_intelligently_where_to_write_out_with_metadata ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 515 filtered out; finished in 0.10s ```
84 lines
2.3 KiB
Rust
84 lines
2.3 KiB
Rust
use nu_test_support::fs::file_contents;
|
|
use nu_test_support::nu;
|
|
use nu_test_support::playground::Playground;
|
|
use std::io::Write;
|
|
|
|
#[test]
|
|
fn writes_out_csv() {
|
|
Playground::setup("save_test_2", |dirs, sandbox| {
|
|
sandbox.with_files(vec![]);
|
|
|
|
let expected_file = dirs.test().join("cargo_sample.csv");
|
|
|
|
nu!(
|
|
cwd: dirs.root(),
|
|
r#"echo [[name, version, description, license, edition]; [nu, "0.14", "A new type of shell", "MIT", "2018"]] | save save_test_2/cargo_sample.csv"#,
|
|
);
|
|
|
|
let actual = file_contents(expected_file);
|
|
println!("{}", actual);
|
|
assert!(actual.contains("nu,0.14,A new type of shell,MIT,2018"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn writes_out_list() {
|
|
Playground::setup("save_test_3", |dirs, sandbox| {
|
|
sandbox.with_files(vec![]);
|
|
|
|
let expected_file = dirs.test().join("list_sample.txt");
|
|
|
|
nu!(
|
|
cwd: dirs.root(),
|
|
r#"echo [a b c d] | save save_test_3/list_sample.txt"#,
|
|
);
|
|
|
|
let actual = file_contents(expected_file);
|
|
println!("{actual}");
|
|
assert_eq!(actual, "a\nb\nc\nd\n")
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn save_append_will_create_file_if_not_exists() {
|
|
Playground::setup("save_test_3", |dirs, sandbox| {
|
|
sandbox.with_files(vec![]);
|
|
|
|
let expected_file = dirs.test().join("new-file.txt");
|
|
|
|
nu!(
|
|
cwd: dirs.root(),
|
|
r#"echo hello | save --raw --append save_test_3/new-file.txt"#,
|
|
);
|
|
|
|
let actual = file_contents(expected_file);
|
|
println!("{}", actual);
|
|
assert_eq!(actual, "hello");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn save_append_will_not_overwrite_content() {
|
|
Playground::setup("save_test_4", |dirs, sandbox| {
|
|
sandbox.with_files(vec![]);
|
|
|
|
let expected_file = dirs.test().join("new-file.txt");
|
|
|
|
{
|
|
let mut file =
|
|
std::fs::File::create(&expected_file).expect("Failed to create test file");
|
|
file.write_all("hello ".as_bytes())
|
|
.expect("Failed to write to test file")
|
|
}
|
|
|
|
nu!(
|
|
cwd: dirs.root(),
|
|
r#"echo world | save --append save_test_4/new-file.txt"#,
|
|
);
|
|
|
|
let actual = file_contents(expected_file);
|
|
println!("{}", actual);
|
|
assert_eq!(actual, "hello world");
|
|
})
|
|
}
|