Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

$env.config now always holds a record with only valid values #7309

Merged
merged 8 commits into from
Dec 10, 2022
Prev Previous commit
Next Next commit
Try to improve tests
  • Loading branch information
webbedspace committed Dec 9, 2022
commit 3beff14344923094b54ff67afe25e8f77751cf4e
50 changes: 42 additions & 8 deletions crates/nu-protocol/tests/test_into_config.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,37 @@
use nu_test_support::{nu, pipeline};
use nu_test_support::{nu, nu_repl_code};

#[test]
fn config_is_mutable() {
let actual = nu!(cwd: ".", nu_repl_code(&[r"let-env config = { ls: { clickable_links: true } }",
"$env.config.ls.clickable_links = false;",
"$env.config.ls.clickable_links"]));

assert_eq!(actual.out, "false");
}

#[test]
fn config_affected_when_mutated() {
let actual = nu!(cwd: ".", nu_repl_code(&[r#"let-env config = { filesize: { metric: false, format:"auto" } }"#,
r#"$env.config = { filesize: { metric: true, format:"auto" } }"#,
"20mib | into string"]));

assert_eq!(actual.out, "21.0 MB");
}

#[test]
fn config_affected_when_deep_mutated() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[
r#"source default_config.nu"#,
r#"$env.config.filesize.metric = true"#,
r#"20mib | into string"#]));

assert_eq!(actual.out, "21.0 MB");
}

#[test]
fn config_add_unsupported_key() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; $env.config.foo = 2 "#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#"source default_config.nu"#,
r#"$env.config.foo = 2"#]));

assert!(actual
.err
Expand All @@ -11,38 +40,43 @@ fn config_add_unsupported_key() {

#[test]
fn config_add_unsupported_type() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; $env.config.ls = '' "#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#"source default_config.nu"#,
r#"$env.config.ls = '' "#]));

assert!(actual.err.contains("should be a record"));
}

#[test]
fn config_add_unsupported_value() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; $env.config.history.file_format = ''; "#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#"source default_config.nu"#,
r#"$env.config.history.file_format = ''"#]));

println!("{:?}", actual.out);
assert!(actual.err.contains(
"unrecognized $env.config.history.file_format ''; expected either 'sqlite' or 'plaintext'"
));
}

#[test]
fn config_unsupported_key_reverted() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; do -i { $env.config.foo = 1 | print ('foo' in $env.config) }"#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#"source default_config.nu"#,
r#"do -i { $env.config.foo = 1 | print ('foo' in $env.config) }"#]));

assert_eq!(actual.out, "false");
}

#[test]
fn config_unsupported_type_reverted() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; do -i { $env.config.ls = '' | print ($env.config.ls | describe) }"#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#" source default_config.nu"#,
r#"do -i { $env.config.ls = '' | print ($env.config.ls | describe) }"#]));

assert!(actual.out.starts_with("record"));
}

#[test]
fn config_unsupported_value_reverted() {
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", pipeline(r#" source default_config.nu; $env.config.history.file_format = 'plaintext'; do -i { $env.config.history.file_format = ''; } $env.config.history.file_format | to json"#));
let actual = nu!(cwd: "crates/nu-utils/src/sample_config", nu_repl_code(&[r#" source default_config.nu"#, r#" $env.config.history.file_format = 'plaintext'"#,
r#"do -i { $env.config.history.file_format = ''; }"#,
r#"$env.config.history.file_format | to json"#]));

assert_eq!(actual.out, "\"plaintext\"");
}