nushell/crates/nu-command/tests/commands/while_.rs

35 lines
1008 B
Rust
Raw Normal View History

2022-11-11 19:21:45 +01:00
use nu_test_support::nu;
#[test]
fn while_sum() {
let actual = nu!(
"mut total = 0; mut x = 0; while $x <= 10 { $total = $total + $x; $x = $x + 1 }; $total"
);
assert_eq!(actual.out, "55");
}
#[test]
Remove autoprinting of loop block values (#8618) # Description This removes autoprinting the final value of a loop, much in the same spirit as not autoprinting values at the end of statements. As we fix these corner cases, it becomes more consistent that to print to the screen in a script, you use the `print` command. This gives a noticeable performance improvement as a bonus. Before: ``` C:\Source\nushell〉 for x in 1..10 { $x } 1 2 3 4 5 6 7 8 9 10 ``` Now: ``` C:\Source\nushell〉 for x in 1..10 { $x } C:\Source\nushell〉 ``` # User-Facing Changes **BREAKING CHANGE** Loops like `for`, `loop`, and `while` will no longer automatically print loop values to the screen. # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date.
2023-03-26 01:23:54 +01:00
fn while_doesnt_auto_print_in_each_iteration() {
Change `echo` to print when not redirected (#10338) # Description This changes `echo` to work more closely to what users of other shells would expect: * when redirected, `echo` works as before and sends values through the pipeline * when not redirected, `echo` will print values to the screen/terminal # User-Facing Changes A standalone `echo` now will print to the terminal, if not redirected. The `echo` command is no longer const eval-able, as it will now print to the terminal in some cases. # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass (on Windows make sure to [enable developer mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging)) - `cargo run -- -c "use std testing; testing run-tests --path crates/nu-std"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
2023-09-12 20:35:01 +02:00
let actual = nu!("mut total = 0; while $total < 2 { $total = $total + 1; 1 }");
Remove autoprinting of loop block values (#8618) # Description This removes autoprinting the final value of a loop, much in the same spirit as not autoprinting values at the end of statements. As we fix these corner cases, it becomes more consistent that to print to the screen in a script, you use the `print` command. This gives a noticeable performance improvement as a bonus. Before: ``` C:\Source\nushell〉 for x in 1..10 { $x } 1 2 3 4 5 6 7 8 9 10 ``` Now: ``` C:\Source\nushell〉 for x in 1..10 { $x } C:\Source\nushell〉 ``` # User-Facing Changes **BREAKING CHANGE** Loops like `for`, `loop`, and `while` will no longer automatically print loop values to the screen. # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date.
2023-03-26 01:23:54 +01:00
// Make sure we don't see any of these values in the output
// As we do not auto-print loops anymore
assert!(!actual.out.contains('1'));
}
#[test]
fn while_break_on_external_failed() {
let actual =
nu!("mut total = 0; while $total < 2 { $total = $total + 1; print 1; nu --testbin fail }");
// Note: nu! macro auto replace "\n" and "\r\n" with ""
// so our output will be `1`
assert_eq!(actual.out, "1");
}
#[test]
fn failed_while_should_break_running() {
let actual =
nu!("mut total = 0; while $total < 2 { $total = $total + 1; nu --testbin fail }; print 3");
assert!(!actual.out.contains('3'));
}