From 4fd99742042233f001d9d1d34e85cd804669effa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20N=2E=20Robalino?= Date: Sun, 16 Feb 2020 20:35:01 -0500 Subject: [PATCH] Display rows in the same table regardless of their column order given they are equal. (#1392) --- src/commands/table.rs | 16 ++++++++++++---- tests/shell/pipeline/mod.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/commands/table.rs b/src/commands/table.rs index 795879d95b..5c1818bff3 100644 --- a/src/commands/table.rs +++ b/src/commands/table.rs @@ -72,13 +72,21 @@ fn table(args: CommandArgs, registry: &CommandRegistry) -> Result { if !new_input.is_empty() { if let Some(descs) = new_input.get(0) { + let descs = descs.data_descriptors(); - let compare = a.data_descriptors(); - if descs != compare { + let descs_size = descs.len(); + + let a_descs = a.data_descriptors(); + + let mut compare = a_descs; + compare.extend(descs.into_iter()); + compare.dedup(); + + if !compare.is_empty() { + new_input.push_back(a); + } else { delay_slot = Some(a); break; - } else { - new_input.push_back(a); } } else { new_input.push_back(a); diff --git a/tests/shell/pipeline/mod.rs b/tests/shell/pipeline/mod.rs index 6fc8a40177..6522a99b19 100644 --- a/tests/shell/pipeline/mod.rs +++ b/tests/shell/pipeline/mod.rs @@ -1,6 +1,8 @@ mod commands; +use nu_test_support::fs::Stub::FileWithContentToBeTrimmed; use nu_test_support::nu; +use nu_test_support::playground::Playground; #[test] fn doesnt_break_on_utf8() { @@ -8,3 +10,31 @@ fn doesnt_break_on_utf8() { assert_eq!(actual, "ö", "'{}' should contain ö", actual); } + +#[test] +fn visualize_one_table_given_rows_with_same_columns_regardless_of_their_order_per_row() { + Playground::setup("visualize_table_test_1", |dirs, sandbox| { + sandbox.with_files(vec![FileWithContentToBeTrimmed( + "unordered_columns.txt", + r#" + [ + {"name":"Andrés", "rusty_luck": 1 }, + {"rusty_luck": 1, "name": "Jonathan"}, + ] + "#, + )]); + + let actual = nu!( + cwd: dirs.test(), "open unordered_columns.txt | from-json" + ); + + let name_column_indices: Vec<_> = actual.match_indices("name").collect(); + let rusty_luck_column_indices: Vec<_> = actual.match_indices("rusty_luck").collect(); + + for (index, (name_index, _)) in name_column_indices.iter().enumerate() { + let (rusty_luck_index, _) = rusty_luck_column_indices[index]; + + assert!(name_index < &rusty_luck_index); + } + }) +}