diff --git a/crates/nu-std/std/formats/mod.nu b/crates/nu-std/std/formats/mod.nu index 2f20e81451..addfa4c1c9 100644 --- a/crates/nu-std/std/formats/mod.nu +++ b/crates/nu-std/std/formats/mod.nu @@ -28,3 +28,13 @@ export def "to ndjson" []: any -> string { export def "to jsonl" []: any -> string { each { to json --raw } | to text } + +# Convert from NDNUON (newline-delimited NUON), to structured data +export def "from ndnuon" []: [string -> any] { + lines | each { from nuon } +} + +# Convert structured data to NDNUON, i.e. newline-delimited NUON +export def "to ndnuon" []: [any -> string] { + each { to nuon --raw } | to text +} diff --git a/crates/nu-std/tests/test_formats.nu b/crates/nu-std/tests/test_formats.nu index f54598bf08..ec1f6adb47 100644 --- a/crates/nu-std/tests/test_formats.nu +++ b/crates/nu-std/tests/test_formats.nu @@ -2,15 +2,26 @@ use std/assert use std/formats * -def test_data_multiline [] { - let lines = [ - "{\"a\":1}", - "{\"a\":2}", - "{\"a\":3}", - "{\"a\":4}", - "{\"a\":5}", - "{\"a\":6}", - ] +def test_data_multiline [--nuon] { + let lines = if $nuon { + [ + "{a: 1}", + "{a: 2}", + "{a: 3}", + "{a: 4}", + "{a: 5}", + "{a: 6}", + ] + } else { + [ + "{\"a\":1}", + "{\"a\":2}", + "{\"a\":3}", + "{\"a\":4}", + "{\"a\":5}", + "{\"a\":6}", + ] + } if $nu.os-info.name == "windows" { $lines | str join "\r\n" @@ -84,3 +95,36 @@ def to_jsonl_single_object [] { let expect = "{\"a\":1}" assert equal $result $expect "could not convert to JSONL" } + +#[test] +def from_ndnuon_multiple_objects [] { + let result = test_data_multiline | from ndnuon + let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] + assert equal $result $expect "could not convert from NDNUON" +} + +#[test] +def from_ndnuon_single_object [] { + let result = '{a: 1}' | from ndnuon + let expect = [{a:1}] + assert equal $result $expect "could not convert from NDNUON" +} + +#[test] +def from_ndnuon_invalid_object [] { + assert error { '{"a":1' | formats from ndnuon } +} + +#[test] +def to_ndnuon_multiple_objects [] { + let result = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] | to ndnuon | str trim + let expect = test_data_multiline --nuon + assert equal $result $expect "could not convert to NDNUON" +} + +#[test] +def to_ndnuon_single_object [] { + let result = [{a:1}] | to ndnuon | str trim + let expect = "{a: 1}" + assert equal $result $expect "could not convert to NDNUON" +} diff --git a/crates/nu-std/tests/test_std_formats.nu b/crates/nu-std/tests/test_std_formats.nu index f23590c5a0..ed6b079d7e 100644 --- a/crates/nu-std/tests/test_std_formats.nu +++ b/crates/nu-std/tests/test_std_formats.nu @@ -1,16 +1,27 @@ # Test std/formats when importing `use std *` use std * -def test_data_multiline [] { +def test_data_multiline [--nuon] { use std * - let lines = [ - "{\"a\":1}", - "{\"a\":2}", - "{\"a\":3}", - "{\"a\":4}", - "{\"a\":5}", - "{\"a\":6}", - ] + let lines = if $nuon { + [ + "{a: 1}", + "{a: 2}", + "{a: 3}", + "{a: 4}", + "{a: 5}", + "{a: 6}", + ] + } else { + [ + "{\"a\":1}", + "{\"a\":2}", + "{\"a\":3}", + "{\"a\":4}", + "{\"a\":5}", + "{\"a\":6}", + ] + } if $nu.os-info.name == "windows" { $lines | str join "\r\n" @@ -84,3 +95,36 @@ def to_jsonl_single_object [] { let expect = "{\"a\":1}" assert equal $result $expect "could not convert to JSONL" } + +#[test] +def from_ndnuon_multiple_objects [] { + let result = test_data_multiline | formats from ndnuon + let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] + assert equal $result $expect "could not convert from NDNUON" +} + +#[test] +def from_ndnuon_single_object [] { + let result = '{a: 1}' | formats from ndnuon + let expect = [{a:1}] + assert equal $result $expect "could not convert from NDNUON" +} + +#[test] +def from_ndnuon_invalid_object [] { + assert error { '{"a":1' | formats from ndnuon } +} + +#[test] +def to_ndnuon_multiple_objects [] { + let result = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] | formats to ndnuon | str trim + let expect = test_data_multiline --nuon + assert equal $result $expect "could not convert to NDNUON" +} + +#[test] +def to_ndnuon_single_object [] { + let result = [{a:1}] | formats to ndnuon | str trim + let expect = "{a: 1}" + assert equal $result $expect "could not convert to NDNUON" +}