mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 06:05:27 +02:00
small refactoring around units and add tests (#15746)
Closes #14469 # Description - ~~Implement the ``--unit`` conversion in "into int" command~~ - New ``ShellError::InvalidUnit`` unit if users enter wrong units - Made ``ShellError::CantConvertToDuration`` more generic: became ``CantConvertToUnit`` - Tried to improve the way we parse units and get the supported units. It's not complete, though, I will continue this refactoring in another PR. But I already did some small refactorings in the "format duration" and "format filesize" commands - Add tests for "format filesize" and "format duration" # User-Facing Changes ```nu ~> 1MB | format filesize sec Error: nu:🐚:invalid_unit × Invalid unit ╭─[entry #7:1:23] 1 │ 1MB | format filesize sec · ─┬─ · ╰── encountered here ╰──── help: Supported units are: B, kB, MB, GB, TB, PB, EB, KiB, MiB, GiB, TiB, PiB, EiB ```
This commit is contained in:
@ -112,3 +112,17 @@ fn format_filesize_works_with_nonempty_files() {
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_filesize_with_invalid_unit() {
|
||||
let actual = nu!("1MB | format filesize sec");
|
||||
|
||||
assert!(actual.err.contains("invalid_unit"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_duration_with_invalid_unit() {
|
||||
let actual = nu!("1sec | format duration MB");
|
||||
|
||||
assert!(actual.err.contains("invalid_unit"));
|
||||
}
|
||||
|
@ -95,6 +95,20 @@ fn into_duration_from_record_fails_with_invalid_sign() {
|
||||
|
||||
// Tests invalid usage
|
||||
|
||||
#[test]
|
||||
fn into_duration_invalid_unit() {
|
||||
let actual = nu!(r#"1 | into duration --unit xx"#);
|
||||
|
||||
assert!(actual.err.contains("nu::shell::invalid_unit"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn into_duration_filesize_unit() {
|
||||
let actual = nu!(r#"1 | into duration --unit MB"#);
|
||||
|
||||
assert!(actual.err.contains("nu::shell::invalid_unit"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn into_duration_from_record_fails_with_unknown_key() {
|
||||
let actual = nu!(r#"{week: 10, unknown: 1} | into duration"#);
|
||||
|
@ -1,3 +1,4 @@
|
||||
mod commands;
|
||||
mod format_conversions;
|
||||
mod sort_utils;
|
||||
mod string;
|
||||
|
15
crates/nu-command/tests/string/format/duration.rs
Normal file
15
crates/nu-command/tests/string/format/duration.rs
Normal file
@ -0,0 +1,15 @@
|
||||
use nu_test_support::nu;
|
||||
|
||||
#[test]
|
||||
fn format_duration() {
|
||||
let actual = nu!(r#"1hr | format duration sec"#);
|
||||
|
||||
assert_eq!("3600 sec", actual.out);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_duration_with_invalid_unit() {
|
||||
let actual = nu!(r#"1hr | format duration MB"#);
|
||||
|
||||
assert!(actual.err.contains("invalid_unit"));
|
||||
}
|
15
crates/nu-command/tests/string/format/filesize.rs
Normal file
15
crates/nu-command/tests/string/format/filesize.rs
Normal file
@ -0,0 +1,15 @@
|
||||
use nu_test_support::nu;
|
||||
|
||||
#[test]
|
||||
fn format_duration() {
|
||||
let actual = nu!(r#"1MB | format filesize kB"#);
|
||||
|
||||
assert_eq!("1000 kB", actual.out);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_duration_with_invalid_unit() {
|
||||
let actual = nu!(r#"1MB | format filesize sec"#);
|
||||
|
||||
assert!(actual.err.contains("invalid_unit"));
|
||||
}
|
2
crates/nu-command/tests/string/format/mod.rs
Normal file
2
crates/nu-command/tests/string/format/mod.rs
Normal file
@ -0,0 +1,2 @@
|
||||
mod duration;
|
||||
mod filesize;
|
1
crates/nu-command/tests/string/mod.rs
Normal file
1
crates/nu-command/tests/string/mod.rs
Normal file
@ -0,0 +1 @@
|
||||
mod format;
|
Reference in New Issue
Block a user