nushell-plugins/nushell/crates/nu-std/tests/test_std-rfc_iter.nu

124 lines
2.7 KiB
Plaintext
Raw Normal View History

2025-06-27 02:33:44 +01:00
use std/assert
use std/testing *
use std-rfc/iter *
@test
def recurse-example-basic [] {
let out = {
"foo": {
"egg": "X"
"spam": "Y"
}
"bar": {
"quox": ["A" "B"]
}
}
| recurse
let expected = [
[path, item];
[ ($.), {foo: {egg: X, spam: Y}, bar: {quox: [A, B]}} ],
[ ($.foo), {egg: X, spam: Y} ],
[ ($.bar), {quox: [A, B]} ],
[ ($.foo.egg), X ],
[ ($.foo.spam), Y ],
[ ($.bar.quox), [A, B] ],
[ ($.bar.quox.0), A ],
[ ($.bar.quox.1), B ]
]
assert equal $out $expected
}
@test
def recurse-example-jq [] {
let out = {"name": "/", "children": [
{"name": "/bin", "children": [
{"name": "/bin/ls", "children": []},
{"name": "/bin/sh", "children": []}]},
{"name": "/home", "children": [
{"name": "/home/stephen", "children": [
{"name": "/home/stephen/jq", "children": []}]}]}]}
| recurse children
| get item.name
let expected = [/, /bin, /home, /bin/ls, /bin/sh, /home/stephen, /home/stephen/jq]
assert equal $out $expected
}
@test
def recurse-example-jq-depth-first [] {
let out = {"name": "/", "children": [
{"name": "/bin", "children": [
{"name": "/bin/ls", "children": []},
{"name": "/bin/sh", "children": []}]},
{"name": "/home", "children": [
{"name": "/home/stephen", "children": [
{"name": "/home/stephen/jq", "children": []}]}]}]}
| recurse children --depth-first
| get item.name
let expected = [/, /bin, /bin/ls, /bin/sh, /home, /home/stephen, /home/stephen/jq]
assert equal $out $expected
}
@test
def recurse-example-closure [] {
let out = 2
| recurse { ({path: square item: ($in * $in)}) }
| take while { $in.item < 100 }
let expected = [
[path, item];
[$., 2],
[$.square, 4],
[$.square.square, 16]
]
assert equal $out $expected
}
@test
def only-example-list [] {
let out = [5] | only
assert equal $out 5
}
@test
def only-example-table [] {
let out = [{name: foo, id: 5}] | only name
assert equal $out foo
}
@test
def only-more-than-one-list [] {
try {
[1 2 3] | only
assert false
} catch {|err|
assert ($err.msg has "expected only one")
}
}
@test
def only-more-than-one-table [] {
try {
[[name, id]; [foo bar] [5 6]] | only foo
assert false
} catch {|err|
assert ($err.msg has "expected only one")
}
}
@test
def only-none [] {
try {
[] | only
assert false
} catch {|err|
(assert ($err.msg has "non-empty"))
}
}