From 5ca9d307c6f24d963a8e8fd1fe71bc05e94cc73a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20N=2E=20Robalino?= Date: Tue, 16 Jul 2019 05:28:55 -0500 Subject: [PATCH] Integration tests refactoring and visibility in them. --- tests/commands_test.rs | 85 +++++++++++ tests/enter.out | 1 - tests/enter.txt | 10 -- tests/external_num.out | 1 - tests/external_num.txt | 3 - tests/filters_test.rs | 48 +++++++ .../formats/cargo_sample.toml} | 0 .../formats/jonathan.xml} | 0 .../{test.ini => fixtures/formats/sample.ini} | 0 .../formats/sgml_description.json} | 0 tests/fixtures/formats/skinfolds.unsupported | 1 + tests/helpers/mod.rs | 82 +++++++++++ tests/inc_plugin.out | 1 - tests/inc_plugin.txt | 3 - tests/json_roundtrip.out | 1 - tests/json_roundtrip.txt | 3 - tests/lines.out | 1 - tests/lines.txt | 3 - tests/open_ini.out | 1 - tests/open_ini.txt | 3 - tests/open_json.out | 1 - tests/open_json.txt | 3 - tests/open_toml.out | 1 - tests/open_toml.txt | 3 - tests/open_xml.out | 1 - tests/open_xml.txt | 3 - tests/sort_by.out | 1 - tests/sort_by.txt | 3 - tests/split.out | 1 - tests/split.txt | 3 - tests/tests.rs | 135 +++--------------- tests/toml_roundtrip.out | 1 - tests/toml_roundtrip.txt | 3 - tests/unit.out | 1 - tests/unit.txt | 4 - 35 files changed, 234 insertions(+), 177 deletions(-) create mode 100644 tests/commands_test.rs delete mode 100644 tests/enter.out delete mode 100644 tests/enter.txt delete mode 100644 tests/external_num.out delete mode 100644 tests/external_num.txt create mode 100644 tests/filters_test.rs rename tests/{test.toml => fixtures/formats/cargo_sample.toml} (100%) rename tests/{test.xml => fixtures/formats/jonathan.xml} (100%) rename tests/{test.ini => fixtures/formats/sample.ini} (100%) rename tests/{test.json => fixtures/formats/sgml_description.json} (100%) create mode 100644 tests/fixtures/formats/skinfolds.unsupported create mode 100644 tests/helpers/mod.rs delete mode 100644 tests/inc_plugin.out delete mode 100644 tests/inc_plugin.txt delete mode 100644 tests/json_roundtrip.out delete mode 100644 tests/json_roundtrip.txt delete mode 100644 tests/lines.out delete mode 100644 tests/lines.txt delete mode 100644 tests/open_ini.out delete mode 100644 tests/open_ini.txt delete mode 100644 tests/open_json.out delete mode 100644 tests/open_json.txt delete mode 100644 tests/open_toml.out delete mode 100644 tests/open_toml.txt delete mode 100644 tests/open_xml.out delete mode 100644 tests/open_xml.txt delete mode 100644 tests/sort_by.out delete mode 100644 tests/sort_by.txt delete mode 100644 tests/split.out delete mode 100644 tests/split.txt delete mode 100644 tests/toml_roundtrip.out delete mode 100644 tests/toml_roundtrip.txt delete mode 100644 tests/unit.out delete mode 100644 tests/unit.txt diff --git a/tests/commands_test.rs b/tests/commands_test.rs new file mode 100644 index 0000000000..da7dc26ab8 --- /dev/null +++ b/tests/commands_test.rs @@ -0,0 +1,85 @@ +mod helpers; + +use helpers::in_directory as cwd; + +#[test] +fn enter() { + nu!(output, + cwd("tests/fixtures/formats"), + r#" + enter sgml_description.json + cd glossary + cd GlossDiv + cd GlossList + cd GlossEntry + cd GlossSee + ls | echo $it + exit + "#); + + assert_eq!(output, "markup"); +} + +#[test] +fn lines() { + nu!(output, + cwd("tests/fixtures/formats"), + "open cargo_sample.toml --raw | lines | skip-while $it != \"[dependencies]\" | skip 1 | first 1 | split-column \"=\" | get Column1 | trim | echo $it"); + + assert_eq!(output, "rustyline"); +} + +#[test] +fn open_toml() { + nu!(output, + cwd("tests/fixtures/formats"), + "open cargo_sample.toml | get package.edition | echo $it"); + + assert_eq!(output, "2018"); +} + +#[test] +fn open_json() { + nu!(output, + cwd("tests/fixtures/formats"), + "open sgml_description.json | get glossary.GlossDiv.GlossList.GlossEntry.GlossSee | echo $it"); + + assert_eq!(output, "markup") +} + +#[test] +fn open_xml() { + nu!(output, + cwd("tests/fixtures/formats"), + "open jonathan.xml | get rss.channel.item.link | echo $it"); + + assert_eq!(output, "http://www.jonathanturner.org/2015/10/off-to-new-adventures.html") +} + +#[test] +fn open_ini() { + nu!(output, + cwd("tests/fixtures/formats"), + "open sample.ini | get SectionOne.integer | echo $it"); + + assert_eq!(output, "1234") +} + +#[test] +fn open_unknown_format_as_raw_single_value() { + nu!(output, + cwd("tests/fixtures/formats"), + "open skinfolds.unsupported | echo $it"); + + assert_eq!(output, "ABS:3.0|PEC:3.0") +} + +#[test] +fn open_error_if_file_not_found() { + nu_error!(output, + cwd("tests/fixtures/formats"), + "open i_dont_exist.txt | echo $it"); + + assert!(output.contains("File cound not be opened")); +} + diff --git a/tests/enter.out b/tests/enter.out deleted file mode 100644 index 10a6a46d7a..0000000000 --- a/tests/enter.out +++ /dev/null @@ -1 +0,0 @@ -markup diff --git a/tests/enter.txt b/tests/enter.txt deleted file mode 100644 index 98dc1b2373..0000000000 --- a/tests/enter.txt +++ /dev/null @@ -1,10 +0,0 @@ -cd tests -enter test.json -cd glossary -cd GlossDiv -cd GlossList -cd GlossEntry -cd GlossSee -ls | echo $it -exit -exit diff --git a/tests/external_num.out b/tests/external_num.out deleted file mode 100644 index f599e28b8a..0000000000 --- a/tests/external_num.out +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/tests/external_num.txt b/tests/external_num.txt deleted file mode 100644 index b7a3d149dd..0000000000 --- a/tests/external_num.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.json | get glossary.GlossDiv.GlossList.GlossEntry.Height | echo $it -exit diff --git a/tests/filters_test.rs b/tests/filters_test.rs new file mode 100644 index 0000000000..a4f8d639c5 --- /dev/null +++ b/tests/filters_test.rs @@ -0,0 +1,48 @@ +mod helpers; + +use helpers::in_directory as cwd; + +#[test] +fn can_convert_table_to_json_text_and_from_json_text_back_into_table() { + nu!(output, + cwd("tests/fixtures/formats"), + "open sgml_description.json | to-json | from-json | get glossary.GlossDiv.GlossList.GlossEntry.GlossSee | echo $it"); + + assert_eq!(output, "markup"); +} + +#[test] +fn can_convert_table_to_toml_text_and_from_toml_text_back_into_table() { + nu!(output, + cwd("tests/fixtures/formats"), + "open cargo_sample.toml | to-toml | from-toml | get package.name | echo $it"); + + assert_eq!(output, "nu"); +} + +#[test] +fn can_sort_by_column() { + nu!(output, + cwd("tests/fixtures/formats"), + "open cargo_sample.toml --raw | lines | skip 1 | first 4 | split-column \"=\" | sort-by Column1 | skip 1 | first 1 | get Column1 | trim | echo $it"); + + assert_eq!(output, "description"); +} + +#[test] +fn can_split_by_column() { + nu!(output, + cwd("tests/fixtures/formats"), + "open cargo_sample.toml --raw | lines | skip 1 | first 1 | split-column \"=\" | get Column1 | trim | echo $it"); + + assert_eq!(output, "name"); +} + +#[test] +fn can_filter_by_unit_size_comparison() { + nu!(output, + cwd("tests/fixtures/formats"), + "ls | where size > 1kb | get name | trim | echo $it"); + + assert_eq!(output, "cargo_sample.toml"); +} diff --git a/tests/test.toml b/tests/fixtures/formats/cargo_sample.toml similarity index 100% rename from tests/test.toml rename to tests/fixtures/formats/cargo_sample.toml diff --git a/tests/test.xml b/tests/fixtures/formats/jonathan.xml similarity index 100% rename from tests/test.xml rename to tests/fixtures/formats/jonathan.xml diff --git a/tests/test.ini b/tests/fixtures/formats/sample.ini similarity index 100% rename from tests/test.ini rename to tests/fixtures/formats/sample.ini diff --git a/tests/test.json b/tests/fixtures/formats/sgml_description.json similarity index 100% rename from tests/test.json rename to tests/fixtures/formats/sgml_description.json diff --git a/tests/fixtures/formats/skinfolds.unsupported b/tests/fixtures/formats/skinfolds.unsupported new file mode 100644 index 0000000000..b3c63b6bf5 --- /dev/null +++ b/tests/fixtures/formats/skinfolds.unsupported @@ -0,0 +1 @@ +"ABS:3.0|PEC:3.0" diff --git a/tests/helpers/mod.rs b/tests/helpers/mod.rs new file mode 100644 index 0000000000..827d92b7c3 --- /dev/null +++ b/tests/helpers/mod.rs @@ -0,0 +1,82 @@ +use std::path::PathBuf; + +#[macro_export] +macro_rules! nu { + ($out:ident, $cwd:expr, $commands:expr) => { + use std::error::Error; + use std::io::prelude::*; + use std::process::{Command, Stdio}; + + let commands = &*format!(" + cd {} + {} + exit", + $cwd, + $commands); + + let process = match Command::new(helpers::executable_path()) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() { + Ok(child) => child, + Err(why) => panic!("Can't run test {}", why.description()), + }; + + match process.stdin.unwrap().write_all(commands.as_bytes()) { + Err(why) => panic!("couldn't write to wc stdin: {}", why.description()), + Ok(_) => {} + } + + let mut _s = String::new(); + + match process.stdout.unwrap().read_to_string(&mut _s) { + Err(why) => panic!("couldn't read stdout: {}", why.description()), + Ok(_) => { + let _s = _s.replace("\r\n", "\n"); + } + } + + let $out = _s.replace("\n", ""); + }; +} + +#[macro_export] +macro_rules! nu_error { + ($out:ident, $cwd:expr, $commands:expr) => { + use std::error::Error; + use std::io::prelude::*; + use std::process::{Command, Stdio}; + + let commands = &*format!(" + cd {} + {} + exit", + $cwd, + $commands); + + let mut process = Command::new(helpers::executable_path()) + .stdin(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .expect("couldn't run test"); + + let stdin = process.stdin.as_mut().expect("couldn't open stdin"); + stdin.write_all(commands.as_bytes()).expect("couldn't write to stdin"); + + + let output = process.wait_with_output().expect("couldn't read from stderr"); + let $out = String::from_utf8_lossy(&output.stderr); + }; +} + +pub fn executable_path() -> PathBuf { + let mut buf = PathBuf::new(); + buf.push("target"); + buf.push("debug"); + buf.push("nu"); + buf +} + +pub fn in_directory(str: &str) -> &str { + str +} \ No newline at end of file diff --git a/tests/inc_plugin.out b/tests/inc_plugin.out deleted file mode 100644 index b4de394767..0000000000 --- a/tests/inc_plugin.out +++ /dev/null @@ -1 +0,0 @@ -11 diff --git a/tests/inc_plugin.txt b/tests/inc_plugin.txt deleted file mode 100644 index 111eb6e42f..0000000000 --- a/tests/inc_plugin.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.json | get glossary.GlossDiv.GlossList.GlossEntry.Height | inc | echo $it -exit \ No newline at end of file diff --git a/tests/json_roundtrip.out b/tests/json_roundtrip.out deleted file mode 100644 index 10a6a46d7a..0000000000 --- a/tests/json_roundtrip.out +++ /dev/null @@ -1 +0,0 @@ -markup diff --git a/tests/json_roundtrip.txt b/tests/json_roundtrip.txt deleted file mode 100644 index 505c2a98db..0000000000 --- a/tests/json_roundtrip.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.json | get glossary.GlossDiv.GlossList.GlossEntry.GlossSee | echo $it -exit diff --git a/tests/lines.out b/tests/lines.out deleted file mode 100644 index 9abbdf551d..0000000000 --- a/tests/lines.out +++ /dev/null @@ -1 +0,0 @@ -rustyline diff --git a/tests/lines.txt b/tests/lines.txt deleted file mode 100644 index 0fbcac891c..0000000000 --- a/tests/lines.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.toml --raw | lines | skip-while $it != "[dependencies]" | skip 1 | first 1 | split-column "=" | get Column1 | trim | echo $it -exit diff --git a/tests/open_ini.out b/tests/open_ini.out deleted file mode 100644 index 81c545efeb..0000000000 --- a/tests/open_ini.out +++ /dev/null @@ -1 +0,0 @@ -1234 diff --git a/tests/open_ini.txt b/tests/open_ini.txt deleted file mode 100644 index ebb8dd5b4c..0000000000 --- a/tests/open_ini.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.ini | get SectionOne.integer | echo $it -exit diff --git a/tests/open_json.out b/tests/open_json.out deleted file mode 100644 index 10a6a46d7a..0000000000 --- a/tests/open_json.out +++ /dev/null @@ -1 +0,0 @@ -markup diff --git a/tests/open_json.txt b/tests/open_json.txt deleted file mode 100644 index 505c2a98db..0000000000 --- a/tests/open_json.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.json | get glossary.GlossDiv.GlossList.GlossEntry.GlossSee | echo $it -exit diff --git a/tests/open_toml.out b/tests/open_toml.out deleted file mode 100644 index b39a36a7c1..0000000000 --- a/tests/open_toml.out +++ /dev/null @@ -1 +0,0 @@ -2018 diff --git a/tests/open_toml.txt b/tests/open_toml.txt deleted file mode 100644 index 4e0345a61e..0000000000 --- a/tests/open_toml.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.toml | get package.edition | echo $it -exit diff --git a/tests/open_xml.out b/tests/open_xml.out deleted file mode 100644 index 3cfcfc2e62..0000000000 --- a/tests/open_xml.out +++ /dev/null @@ -1 +0,0 @@ -http://www.jonathanturner.org/2015/10/off-to-new-adventures.html diff --git a/tests/open_xml.txt b/tests/open_xml.txt deleted file mode 100644 index e3d0fa78e9..0000000000 --- a/tests/open_xml.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.xml | get rss.channel.item.link | echo $it -exit diff --git a/tests/sort_by.out b/tests/sort_by.out deleted file mode 100644 index e1b39b006c..0000000000 --- a/tests/sort_by.out +++ /dev/null @@ -1 +0,0 @@ -description diff --git a/tests/sort_by.txt b/tests/sort_by.txt deleted file mode 100644 index aa933f8a2d..0000000000 --- a/tests/sort_by.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.toml --raw | lines | skip 1 | first 4 | split-column "=" | sort-by Column1 | skip 1 | first 1 | get Column1 | trim | echo $it -exit diff --git a/tests/split.out b/tests/split.out deleted file mode 100644 index f121bdbff4..0000000000 --- a/tests/split.out +++ /dev/null @@ -1 +0,0 @@ -name diff --git a/tests/split.txt b/tests/split.txt deleted file mode 100644 index 68713c675f..0000000000 --- a/tests/split.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.toml --raw | lines | skip 1 | first 1 | split-column "=" | get Column1 | trim | echo $it -exit diff --git a/tests/tests.rs b/tests/tests.rs index 011fdffb3b..8fd540088e 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -1,120 +1,21 @@ -#[cfg(test)] -mod tests { - use std::error::Error; - use std::io::prelude::*; - use std::path::PathBuf; - use std::process::{Command, Stdio}; +mod helpers; - fn test_helper(test_name: &str) { - let mut baseline_path = PathBuf::new(); - baseline_path.push("tests"); - baseline_path.push(test_name); - baseline_path.set_extension("out"); +use helpers::in_directory as cwd; - let mut txt_path = PathBuf::new(); - txt_path.push("tests"); - txt_path.push(test_name); - txt_path.set_extension("txt"); - - let executable = { - let mut buf = PathBuf::new(); - buf.push("target"); - buf.push("debug"); - buf.push("nu"); - buf - }; - - let process = match Command::new(executable) - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .spawn() - { - Ok(process) => process, - Err(why) => panic!("Can't run test {}", why.description()), - }; - - let baseline_out = std::fs::read_to_string(baseline_path).unwrap(); - let baseline_out = baseline_out.replace("\r\n", "\n"); - let input_commands = std::fs::read_to_string(txt_path).unwrap(); - - match process.stdin.unwrap().write_all(input_commands.as_bytes()) { - Err(why) => panic!("couldn't write to wc stdin: {}", why.description()), - Ok(_) => {} - } - - let mut s = String::new(); - match process.stdout.unwrap().read_to_string(&mut s) { - Err(why) => panic!("couldn't read stdout: {}", why.description()), - Ok(_) => { - let s = s.replace("\r\n", "\n"); - assert_eq!(s, baseline_out); - } - } - } - - #[test] - fn open_toml() { - test_helper("open_toml"); - } - - #[test] - fn open_json() { - test_helper("open_json"); - } - - #[test] - fn open_xml() { - test_helper("open_xml"); - } - - #[test] - fn open_ini() { - test_helper("open_ini"); - } - - #[test] - fn json_roundtrip() { - test_helper("json_roundtrip"); - } - - #[test] - fn toml_roundtrip() { - test_helper("toml_roundtrip"); - } - - #[test] - fn sort_by() { - test_helper("sort_by"); - } - - #[test] - fn split() { - test_helper("split"); - } - - #[test] - fn enter() { - test_helper("enter"); - } - - #[test] - fn lines() { - test_helper("lines"); - } - - - #[test] - fn external_num() { - test_helper("external_num"); - } - - #[test] - fn unit() { - test_helper("unit"); - } - - #[test] - fn inc_plugin() { - test_helper("inc_plugin"); - } +#[test] +fn external_num() { + nu!(output, + cwd("tests/fixtures/formats"), + "open sgml_description.json | get glossary.GlossDiv.GlossList.GlossEntry.Height | echo $it"); + + assert_eq!(output, "10"); +} + +#[test] +fn inc_plugin() { + nu!(output, + cwd("tests/fixtures/formats"), + "open sgml_description.json | get glossary.GlossDiv.GlossList.GlossEntry.Height | inc | echo $it"); + + assert_eq!(output, "11"); } diff --git a/tests/toml_roundtrip.out b/tests/toml_roundtrip.out deleted file mode 100644 index f5f171aac7..0000000000 --- a/tests/toml_roundtrip.out +++ /dev/null @@ -1 +0,0 @@ -nu diff --git a/tests/toml_roundtrip.txt b/tests/toml_roundtrip.txt deleted file mode 100644 index 959483fc27..0000000000 --- a/tests/toml_roundtrip.txt +++ /dev/null @@ -1,3 +0,0 @@ -cd tests -open test.toml | to-toml | from-toml | get package.name | echo $it -exit diff --git a/tests/unit.out b/tests/unit.out deleted file mode 100644 index cacefde74f..0000000000 --- a/tests/unit.out +++ /dev/null @@ -1 +0,0 @@ -test.toml diff --git a/tests/unit.txt b/tests/unit.txt deleted file mode 100644 index e4b9829114..0000000000 --- a/tests/unit.txt +++ /dev/null @@ -1,4 +0,0 @@ -cd tests -cd dirtest -ls | where size > 1kb | get name | trim | echo $it -exit \ No newline at end of file