nushell/crates/nu-command/tests/commands/seq_char.rs
anomius ea6493c041
Seq char update will work on all char (#14261)
# Description - fixes #14174

This PR addresses a bug in the `seq char` command where the command's
behavior did not align with its help description, which stated that it
prints a sequence of ASCII characters. The initial implementation only
allowed alphabetic characters, leading to user confusion when
non-alphabetic characters (e.g., digits, punctuation) were rejected or
when unexpected behavior occurred for certain input ranges.

### Changes Made:
- **Updated the input validation**: Modified the `is_single_character`
function to accept any ASCII character instead of restricting to
alphabetic characters.
- **Enhanced error messages**: Clarified error messages to specify that
any single ASCII character is acceptable.
- **Expanded functionality**: Ensured that the command can now generate
sequences that include non-alphabetic ASCII characters.
- **Updated tests**: Added tests to cover new use cases involving
non-alphabetic characters and improved validation.

### Examples After Fix:
- `seq char '0' '9'` now outputs `['0', '1', '2', '3', '4', '5', '6',
'7', '8', '9']`
- `seq char ' ' '/'` outputs a list of characters from space to `/`
- `seq char 'A' 'z'` correctly includes alphabetic and non-alphabetic
characters between `A` and `z`

# User-Facing Changes
- Users can now input any single ASCII character for the `start` and
`end` parameters of `seq char`.
- The output will accurately include all characters within the specified
ASCII range, including digits and punctuation.

# Tests + Formatting
- Added new tests to ensure the `seq char` command supports sequences
including non-alphabetic ASCII characters.
2024-11-15 21:05:29 +01:00

59 lines
1.2 KiB
Rust

use nu_test_support::nu;
#[test]
fn fails_when_first_arg_is_multiple_chars() {
let actual = nu!("seq char aa z");
assert!(actual
.err
.contains("input should be a single ASCII character"));
}
#[test]
fn fails_when_second_arg_is_multiple_chars() {
let actual = nu!("seq char a zz");
assert!(actual
.err
.contains("input should be a single ASCII character"));
}
#[test]
fn generates_sequence_from_a_to_e() {
let actual = nu!("seq char a e | str join ''");
assert_eq!(actual.out, "abcde");
}
#[test]
fn generates_sequence_from_e_to_a() {
let actual = nu!("seq char e a | str join ''");
assert_eq!(actual.out, "edcba");
}
#[test]
fn fails_when_non_ascii_character_is_used_in_first_arg() {
let actual = nu!("seq char ñ z");
assert!(actual
.err
.contains("input should be a single ASCII character"));
}
#[test]
fn fails_when_non_ascii_character_is_used_in_second_arg() {
let actual = nu!("seq char a ñ");
assert!(actual
.err
.contains("input should be a single ASCII character"));
}
#[test]
fn joins_sequence_with_pipe() {
let actual = nu!("seq char a e | str join '|'");
assert_eq!(actual.out, "a|b|c|d|e");
}