nushell/crates/nu-std/tests/test_std-rfc_str.nu
Douglas 3eae657121
Update std-rfc tests for to use @test attributes (#15098)
After #14906, the test runner was updated to use attributes, along with
the existing `std` modules. However, since that PR was started before
`std-rfc` was in main, it didn't include updates to those tests. Once
#14906 was merged, the `std-rfc` tests no longer ran in CI. This PR
updates the tests accordingly.
2025-02-12 06:48:41 -05:00

294 lines
6.1 KiB
Plaintext

use std/assert
use std/testing *
use std-rfc/str
@test
def str-dedent_simple [] {
# Test 1:
# Should start with "Heading" in the first character position
# Should not end with a line-break
# The blank line has no extra spaces
assert equal (
do {
let s = "
Heading
one
two
"
$s | str dedent
}
) $"Heading(char lsep)(char lsep) one(char lsep) two"
}
@test
def str-dedent_leave_blankline_whitespace [] {
# Test 2:
# Same as #1, but the blank line has leftover whitespace
# indentation (16 spaces) which is left in the result
assert equal (
do {
let s = "
Heading
one
two
"
$s | str dedent
}
) $"Heading(char lsep) (char lsep) one(char lsep) two"
}
@test
def str-dedent_leave_blankline_tab [] {
# Test 3:
# Same, but with a single tab character on the "blank" line
assert equal (
do {
let s = $"
Heading
(char tab)
one
two
"
$s | str dedent
}
) $"Heading(char lsep)(char tab)(char lsep) one(char lsep) two"
}
@test
def str-dedent_ends_with_newline [] {
# Test 4:
# Ends with line-break
assert equal (
do {
let s = "
Heading
one
two
"
$s | str dedent
}
) $"Heading(char lsep)(char lsep) one(char lsep) two(char lsep)"
}
@test
def str-dedent_identity [] {
# Test 5:
# Identity - Returns the original string sans first and last empty lines
# No other whitespace should be removed
assert equal (
do {
let s = $"(char lsep) Identity (char lsep)"
$s | str dedent
}
) " Identity "
}
@test
def str-dedent_error-no_blank_lines [] {
# Test 6:
# Error - Does not contain an empty first line
assert error {||
let s = "Error"
$s | str dedent
}
# Test 6.1:
# Error - Does not contain an empty first line
assert error {||
let s = $"Error(char lsep) (char lsep)Testing(char lsep)"
$s | str dedent
}
}
@test
def str-dedent_error-no_blank_first_line [] {
# Test 7:
# Error - Does not contain an empty last line
assert error {||
let s = "
Error"
$s | str dedent
}
}
@test
def str-dedent_error-missing_last_empty_line [] {
# Test 7.1:
# Error - Does not contain an empty last line
assert error {||
let s = "
Error"
$s | str dedent
}
}
@test
def str-dedent_error-not_enough_indentation [] {
# Test 8:
# Error - Line 1 does not have enough indentation
assert error {||
let s = "
Line 1
Line 2
"
$s | str dedent
}
}
@test
def str-dedent_error-not_enough_indentation2 [] {
# Test 8.1:
# Error - Line 2 does not have enough indentation
assert error {||
let s = "
Line 1
Line 2
"
$s | str dedent
}
}
@test
def str-dedent_error-not_enough_indentation3 [] {
# Test 8.2:
# Error - Line does not have enough indentation
assert error {||
let s = "
Line
"
$s | str dedent
}
}
@test
def str-dedent_first_line_whitespace_allowed [] {
# Test 9:
# "Hidden" whitespace on the first line is allowed
assert equal (
do {
let s = $" (char tab) (char lsep) Identity (char lsep)"
$s | str dedent
}
) " Identity "
}
@test
def str-dedent_using_tabs [] {
# Test 10:
# If the indentation on the last line uses tabs, then the number of tabs
# will be used instead of spaces
let actual = (
$"(char lsep)(char tab)(char tab)First line(char lsep)(char tab)(char tab)(char tab)Second line(char lsep)(char tab)(char tab)"
| str dedent
)
let expected = $"First line(char lsep)(char tab)Second line"
assert equal $actual $expected
}
@test
def str-unindent_simple [] {
# Test 1:
# Should start with "Heading" in the first character position
# Should not end with a line-break
# The blank line has no extra spaces
let actual = (
"
Heading
one
two
"
| str unindent
)
let expected = $"Heading(char lsep)(char lsep) one(char lsep) two"
assert equal $actual $expected
}
@test
def str-unindent_ignore_first_and_last_whitespace [] {
# Test 2:
# If the first and/or last line are only whitespace
# then they shouldn't be included in the result
let actual = "
Heading
one
two
"
| str unindent
let expected = " Heading
one
two"
| str unindent
assert equal $actual $expected
}
@test
def str-unindent_keep_extra_line [] {
# Test 3:
# Keep intentional blank lines at start and/or end
let actual = "
Content
" | str unindent
let expected = $"(char lsep)Content(char lsep)"
assert equal $actual $expected
}
@test
def str-unindent_works_on_single_line [] {
# Test 4:
# Works on a single-line string
# And trailing whitespace is preserved
let actual = (" Content " | str unindent)
let expected = "Content "
assert equal $actual $expected
}
@test
def str-unindent_whitespace_only_single_line [] {
# Test 4:
# Works on a single-line string with whitespace-only
# Returns the original string
let actual = (" " | str unindent)
let expected = " "
assert equal $actual $expected
}
@test
def str-unindent_whitespace_works_with_tabs [] {
# Test 4:
# Works with tabs for indentation
let actual = (
$"(char lsep)(char tab)(char tab)Content(char lsep)"
| str unindent --tabs
)
let expected = "Content"
assert equal $actual $expected
}