From 10364c4f22ea93a95b6518436334b0517495c352 Mon Sep 17 00:00:00 2001 From: JT <547158+jntrnr@users.noreply.github.com> Date: Mon, 28 Feb 2022 07:10:02 -0500 Subject: [PATCH] don't use table compaction in to nuon if not a table (#4671) * don't use table compaction in to nuon if not a table * Make a proper nuon conversion test * more nuon tests --- crates/nu-command/src/formats/to/nuon.rs | 2 +- .../tests/format_conversions/mod.rs | 1 + .../tests/format_conversions/nuon.rs | 104 ++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 crates/nu-command/tests/format_conversions/nuon.rs diff --git a/crates/nu-command/src/formats/to/nuon.rs b/crates/nu-command/src/formats/to/nuon.rs index d3bac4bd3d..5d6fda94d6 100644 --- a/crates/nu-command/src/formats/to/nuon.rs +++ b/crates/nu-command/src/formats/to/nuon.rs @@ -65,7 +65,7 @@ fn value_to_string(v: &Value, span: Span) -> Result { Value::Int { val, .. } => Ok(format!("{}", *val)), Value::List { vals, .. } => { let headers = get_columns(vals); - if vals.iter().all(|x| x.columns() == headers) { + if !headers.is_empty() && vals.iter().all(|x| x.columns() == headers) { // Table output let headers_output = headers.join(", "); diff --git a/crates/nu-command/tests/format_conversions/mod.rs b/crates/nu-command/tests/format_conversions/mod.rs index 5af12f9fc1..cc89e0275f 100644 --- a/crates/nu-command/tests/format_conversions/mod.rs +++ b/crates/nu-command/tests/format_conversions/mod.rs @@ -5,6 +5,7 @@ mod html; mod ics; mod json; mod markdown; +mod nuon; mod ods; mod sqlite; mod ssv; diff --git a/crates/nu-command/tests/format_conversions/nuon.rs b/crates/nu-command/tests/format_conversions/nuon.rs new file mode 100644 index 0000000000..6a4f036bc0 --- /dev/null +++ b/crates/nu-command/tests/format_conversions/nuon.rs @@ -0,0 +1,104 @@ +use nu_test_support::{nu, pipeline}; + +#[test] +fn to_nuon_correct_compaction() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + open appveyor.yml + | to nuon + | str length + | $in > 500 + "# + )); + + assert_eq!(actual.out, "true"); +} + +#[test] +fn to_nuon_list_of_numbers() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + [1, 2, 3, 4] + | to nuon + | from nuon + | $in == [1, 2, 3, 4] + "# + )); + + assert_eq!(actual.out, "true"); +} + +#[test] +fn to_nuon_list_of_strings() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + [abc, xyz, def] + | to nuon + | from nuon + | $in == [abc, xyz, def] + "# + )); + + assert_eq!(actual.out, "true"); +} + +#[test] +fn to_nuon_table() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + [[my, columns]; [abc, xyz], [def, ijk]] + | to nuon + | from nuon + | $in == [[my, columns]; [abc, xyz], [def, ijk]] + "# + )); + + assert_eq!(actual.out, "true"); +} + +#[test] +fn to_nuon_bool() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + $false + | to nuon + | from nuon + "# + )); + + assert_eq!(actual.out, "false"); +} + +#[test] +fn to_nuon_negative_int() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + -1 + | to nuon + | from nuon + "# + )); + + assert_eq!(actual.out, "-1"); +} + +#[test] +fn to_nuon_records() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + {name: "foo bar", age: 100, height: 10} + | to nuon + | from nuon + | $in == {name: "foo bar", age: 100, height: 10} + "# + )); + + assert_eq!(actual.out, "true"); +}