mirror of
https://github.com/nushell/nushell.git
synced 2024-12-24 16:09:11 +01:00
95b78eee25
# Description The meaning of the word usage is specific to describing how a command function is *used* and not a synonym for general description. Usage can be used to describe the SYNOPSIS or EXAMPLES sections of a man page where the permitted argument combinations are shown or example *uses* are given. Let's not confuse people and call it what it is a description. Our `help` command already creates its own *Usage* section based on the available arguments and doesn't refer to the description with usage. # User-Facing Changes `help commands` and `scope commands` will now use `description` or `extra_description` `usage`-> `description` `extra_usage` -> `extra_description` Breaking change in the plugin protocol: In the signature record communicated with the engine. `usage`-> `description` `extra_usage` -> `extra_description` The same rename also takes place for the methods on `SimplePluginCommand` and `PluginCommand` # Tests + Formatting - Updated plugin protocol specific changes # After Submitting - [ ] update plugin protocol doc
333 lines
9.2 KiB
Rust
333 lines
9.2 KiB
Rust
use nu_test_support::fs::Stub::FileWithContent;
|
|
use nu_test_support::nu;
|
|
use nu_test_support::playground::Playground;
|
|
use pretty_assertions::assert_eq;
|
|
|
|
// Note: These tests might slightly overlap with crates/nu-command/tests/commands/help.rs
|
|
|
|
#[test]
|
|
fn scope_shows_alias() {
|
|
let actual = nu!("alias xaz = echo alias1
|
|
scope aliases | find xaz | length
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 1);
|
|
}
|
|
|
|
#[test]
|
|
fn scope_shows_command() {
|
|
let actual = nu!("def xaz [] { echo xaz }
|
|
scope commands | find xaz | length
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 1);
|
|
}
|
|
|
|
#[test]
|
|
fn scope_doesnt_show_scoped_hidden_alias() {
|
|
let actual = nu!("alias xaz = echo alias1
|
|
do {
|
|
hide xaz
|
|
scope aliases | find xaz | length
|
|
}
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn scope_doesnt_show_hidden_alias() {
|
|
let actual = nu!("alias xaz = echo alias1
|
|
hide xaz
|
|
scope aliases | find xaz | length
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn scope_doesnt_show_scoped_hidden_command() {
|
|
let actual = nu!("def xaz [] { echo xaz }
|
|
do {
|
|
hide xaz
|
|
scope commands | find xaz | length
|
|
}
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn scope_doesnt_show_hidden_command() {
|
|
let actual = nu!("def xaz [] { echo xaz }
|
|
hide xaz
|
|
scope commands | find xaz | length
|
|
");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|
|
|
|
// same problem as 'which' command
|
|
#[ignore = "See https://github.com/nushell/nushell/issues/4837"]
|
|
#[test]
|
|
fn correctly_report_of_shadowed_alias() {
|
|
let actual = nu!("alias xaz = echo alias1
|
|
def helper [] {
|
|
alias xaz = echo alias2
|
|
scope aliases
|
|
}
|
|
helper | where alias == xaz | get expansion.0");
|
|
|
|
assert_eq!(actual.out, "echo alias2");
|
|
}
|
|
|
|
#[test]
|
|
fn correct_scope_modules_fields() {
|
|
let module_setup = r#"
|
|
# nice spam
|
|
#
|
|
# and some extra description for spam
|
|
|
|
export module eggs {
|
|
export module bacon {
|
|
export def sausage [] { 'sausage' }
|
|
}
|
|
}
|
|
|
|
export def main [] { 'foo' };
|
|
export alias xaz = print
|
|
export extern git []
|
|
export const X = 4
|
|
|
|
export-env { $env.SPAM = 'spam' }
|
|
"#;
|
|
|
|
Playground::setup("correct_scope_modules_fields", |dirs, sandbox| {
|
|
sandbox.with_files(&[FileWithContent("spam.nu", module_setup)]);
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "spam");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.description",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "nice spam");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.extra_description",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "and some extra description for spam");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.has_env_block",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "true");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.commands.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "spam");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.aliases.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "xaz");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.externs.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "git");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.constants.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "X");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.submodules.0.submodules.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "bacon");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope modules | where name == spam | get 0.submodules.0.submodules.0.commands.0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "sausage");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn correct_scope_aliases_fields() {
|
|
let module_setup = r#"
|
|
# nice alias
|
|
export alias xaz = print
|
|
"#;
|
|
|
|
Playground::setup("correct_scope_aliases_fields", |dirs, sandbox| {
|
|
sandbox.with_files(&[FileWithContent("spam.nu", module_setup)]);
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope aliases | where name == 'spam xaz' | get 0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "spam xaz");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope aliases | where name == 'spam xaz' | get 0.expansion",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "print");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope aliases | where name == 'spam xaz' | get 0.description",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "nice alias");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope aliases | where name == 'spam xaz' | get 0.decl_id | is-empty",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope aliases | where name == 'spam xaz' | get 0.aliased_decl_id | is-empty",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn scope_alias_aliased_decl_id_external() {
|
|
let inp = &[
|
|
"alias c = cargo",
|
|
"scope aliases | where name == c | get 0.aliased_decl_id | is-empty",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "true");
|
|
}
|
|
|
|
#[test]
|
|
fn correct_scope_externs_fields() {
|
|
let module_setup = r#"
|
|
# nice extern
|
|
export extern git []
|
|
"#;
|
|
|
|
Playground::setup("correct_scope_aliases_fields", |dirs, sandbox| {
|
|
sandbox.with_files(&[FileWithContent("spam.nu", module_setup)]);
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope externs | where name == 'spam git' | get 0.name",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "spam git");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope externs | where name == 'spam git' | get 0.description",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "nice extern");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope externs | where name == 'spam git' | get 0.description | str contains (char nl)",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
|
|
let inp = &[
|
|
"use spam.nu",
|
|
"scope externs | where name == 'spam git' | get 0.decl_id | is-empty",
|
|
];
|
|
let actual = nu!(cwd: dirs.test(), &inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn scope_externs_sorted() {
|
|
let inp = &[
|
|
"extern a []",
|
|
"extern b []",
|
|
"extern c []",
|
|
"scope externs | get name | str join ''",
|
|
];
|
|
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "abc");
|
|
}
|
|
|
|
#[test]
|
|
fn correct_scope_variables_fields() {
|
|
let inp = &[
|
|
"let x = 'x'",
|
|
"scope variables | where name == '$x' | get 0.type",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "string");
|
|
|
|
let inp = &[
|
|
"let x = 'x'",
|
|
"scope variables | where name == '$x' | get 0.value",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "x");
|
|
|
|
let inp = &[
|
|
"let x = 'x'",
|
|
"scope variables | where name == '$x' | get 0.is_const",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
|
|
let inp = &[
|
|
"const x = 'x'",
|
|
"scope variables | where name == '$x' | get 0.is_const",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "true");
|
|
|
|
let inp = &[
|
|
"let x = 'x'",
|
|
"scope variables | where name == '$x' | get 0.var_id | is-empty",
|
|
];
|
|
let actual = nu!(&inp.join("; "));
|
|
assert_eq!(actual.out, "false");
|
|
}
|