use to_lowercase in str downcase (#10850)

# Description
as we can see in the [documentation of
`str.to_lowercase`](https://doc.rust-lang.org/std/primitive.str.html#method.to_lowercase),
not only ASCII symbols have lower and upper variants.

- `str upcase` uses the correct method to convert the string

7ac5a01e2f/crates/nu-command/src/strings/str_/case/upcase.rs (L93)
- `str downcase` incorrectly converts only ASCII characters

7ac5a01e2f/crates/nu-command/src/strings/str_/case/downcase.rs (L124)

this PR uses `str.to_lower_case` instead of `str.to_ascii_lowercase` in
`str downcase`.

# User-Facing Changes
- upcase still works fine
```nushell
~ l> "ὀδυσσεύς" | str upcase
ὈΔΥΣΣΕΎΣ
```
- downcase now works

👉 before
```nushell
~ l> "ὈΔΥΣΣΕΎΣ" | str downcase
ὈΔΥΣΣΕΎΣ
```
👉 after
```nushell
~ l> "ὈΔΥΣΣΕΎΣ" | str downcase
ὀδυσσεύς
```

# Tests + Formatting
- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
-  `toolkit test`
-  `toolkit test stdlib`

adds two tests
- `non_ascii_upcase`
- `non_ascii_downcase`

# After Submitting
This commit is contained in:
Antoine Stevan 2023-10-27 19:16:17 +02:00 committed by GitHub
parent 7ac5a01e2f
commit 01d8961eb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 1 deletions

View File

@ -121,7 +121,7 @@ fn operate(
fn action(input: &Value, head: Span) -> Value {
match input {
Value::String { val, .. } => Value::string(val.to_ascii_lowercase(), head),
Value::String { val, .. } => Value::string(val.to_lowercase(), head),
Value::Error { .. } => input.clone(),
_ => Value::error(
ShellError::OnlySupportsThisInputType {

View File

@ -76,6 +76,13 @@ fn downcases() {
})
}
#[test]
fn non_ascii_downcase() {
let actual = nu!("'ὈΔΥΣΣΕΎΣ' | str downcase");
assert_eq!(actual.out, "ὀδυσσεύς");
}
#[test]
fn upcases() {
Playground::setup("str_test_4", |dirs, sandbox| {
@ -96,6 +103,13 @@ fn upcases() {
})
}
#[test]
fn non_ascii_upcase() {
let actual = nu!("'ὀδυσσεύς' | str upcase");
assert_eq!(actual.out, "ὈΔΥΣΣΕΎΣ");
}
#[test]
#[ignore = "Playgrounds are not supported in nu-cmd-extra"]
fn camelcases() {