mirror of
https://github.com/nushell/nushell.git
synced 2024-11-24 17:34:00 +01:00
Improve test coverage of command examples (#5650)
* Ignore `cargo tarpaulin` output files * Add expected result for `columns` example Examples without provided expected output will never be tested. The subset of commands available in `test_examples()` is limited thus excluding the tests depending on other commands * Add example test harness to `reject` * Test and fix `wrap` example * Test and fix `drop column` example * Update `from ods` examples * Update `from xlsx` examples * Run `to nuon` examples * Run `hash base64` examples * Add example output to `path parse` * Test and fix the `grid` examples
This commit is contained in:
parent
230c36f2fb
commit
507f24d029
4
.gitignore
vendored
4
.gitignore
vendored
@ -25,3 +25,7 @@ debian/nu/
|
|||||||
# Helix configuration folder
|
# Helix configuration folder
|
||||||
.helix/*
|
.helix/*
|
||||||
.helix
|
.helix
|
||||||
|
|
||||||
|
# Coverage tools
|
||||||
|
lcov.info
|
||||||
|
tarpaulin-report.html
|
||||||
|
@ -27,7 +27,14 @@ impl Command for Columns {
|
|||||||
Example {
|
Example {
|
||||||
example: "[[name,age,grade]; [bill,20,a]] | columns",
|
example: "[[name,age,grade]; [bill,20,a]] | columns",
|
||||||
description: "Get the columns from the table",
|
description: "Get the columns from the table",
|
||||||
result: None,
|
result: Some(Value::List {
|
||||||
|
vals: vec![
|
||||||
|
Value::test_string("name"),
|
||||||
|
Value::test_string("age"),
|
||||||
|
Value::test_string("grade"),
|
||||||
|
],
|
||||||
|
span: Span::test_data(),
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
example: "[[name,age,grade]; [bill,20,a]] | columns | first",
|
example: "[[name,age,grade]; [bill,20,a]] | columns | first",
|
||||||
|
@ -57,11 +57,18 @@ impl Command for DropColumn {
|
|||||||
description: "Remove the last column of a table",
|
description: "Remove the last column of a table",
|
||||||
example: "echo [[lib, extension]; [nu-lib, rs] [nu-core, rb]] | drop column",
|
example: "echo [[lib, extension]; [nu-lib, rs] [nu-core, rb]] | drop column",
|
||||||
result: Some(Value::List {
|
result: Some(Value::List {
|
||||||
vals: vec![Value::Record {
|
vals: vec![
|
||||||
cols: vec!["lib".into()],
|
Value::Record {
|
||||||
vals: vec![Value::test_string("nu-lib"), Value::test_string("nu-core")],
|
cols: vec!["lib".into()],
|
||||||
span: Span::test_data(),
|
vals: vec![Value::test_string("nu-lib")],
|
||||||
}],
|
span: Span::test_data(),
|
||||||
|
},
|
||||||
|
Value::Record {
|
||||||
|
cols: vec!["lib".into()],
|
||||||
|
vals: vec![Value::test_string("nu-core")],
|
||||||
|
span: Span::test_data(),
|
||||||
|
},
|
||||||
|
],
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
}]
|
}]
|
||||||
@ -180,3 +187,13 @@ fn get_keep_columns(input: Vec<String>, mut num_of_columns_to_drop: i64) -> Vec<
|
|||||||
let num_of_columns_to_keep = (vlen - num_of_columns_to_drop) as usize;
|
let num_of_columns_to_keep = (vlen - num_of_columns_to_drop) as usize;
|
||||||
input[0..num_of_columns_to_keep].to_vec()
|
input[0..num_of_columns_to_keep].to_vec()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use super::DropColumn;
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(DropColumn {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -205,3 +205,13 @@ fn reject_record_columns(cols: &mut Vec<String>, vals: &mut Vec<Value>, rejects:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use super::Reject;
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(Reject {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -70,13 +70,35 @@ impl Command for Wrap {
|
|||||||
description: "Wrap a list into a table with a given column name",
|
description: "Wrap a list into a table with a given column name",
|
||||||
example: "echo [1 2 3] | wrap num",
|
example: "echo [1 2 3] | wrap num",
|
||||||
result: Some(Value::List {
|
result: Some(Value::List {
|
||||||
vals: vec![Value::Record {
|
vals: vec![
|
||||||
cols: vec!["num".into()],
|
Value::Record {
|
||||||
vals: vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)],
|
cols: vec!["num".into()],
|
||||||
span: Span::test_data(),
|
vals: vec![Value::test_int(1)],
|
||||||
}],
|
span: Span::test_data(),
|
||||||
|
},
|
||||||
|
Value::Record {
|
||||||
|
cols: vec!["num".into()],
|
||||||
|
vals: vec![Value::test_int(2)],
|
||||||
|
span: Span::test_data(),
|
||||||
|
},
|
||||||
|
Value::Record {
|
||||||
|
cols: vec!["num".into()],
|
||||||
|
vals: vec![Value::test_int(3)],
|
||||||
|
span: Span::test_data(),
|
||||||
|
},
|
||||||
|
],
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use super::Wrap;
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(Wrap {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -55,12 +55,12 @@ impl Command for FromOds {
|
|||||||
vec![
|
vec![
|
||||||
Example {
|
Example {
|
||||||
description: "Convert binary .ods data to a table",
|
description: "Convert binary .ods data to a table",
|
||||||
example: "open test.txt | from ods",
|
example: "open --raw test.ods | from ods",
|
||||||
result: None,
|
result: None,
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Convert binary .ods data to a table, specifying the tables",
|
description: "Convert binary .ods data to a table, specifying the tables",
|
||||||
example: "open test.txt | from ods -s [Spreadsheet1]",
|
example: "open --raw test.ods | from ods -s [Spreadsheet1]",
|
||||||
result: None,
|
result: None,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -55,12 +55,12 @@ impl Command for FromXlsx {
|
|||||||
vec![
|
vec![
|
||||||
Example {
|
Example {
|
||||||
description: "Convert binary .xlsx data to a table",
|
description: "Convert binary .xlsx data to a table",
|
||||||
example: "open test.txt | from xlsx",
|
example: "open --raw test.xlsx | from xlsx",
|
||||||
result: None,
|
result: None,
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Convert binary .xlsx data to a table, specifying the tables",
|
description: "Convert binary .xlsx data to a table, specifying the tables",
|
||||||
example: "open test.txt | from xlsx -s [Spreadsheet1]",
|
example: "open --raw test.xlsx | from xlsx -s [Spreadsheet1]",
|
||||||
result: None,
|
result: None,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -39,7 +39,7 @@ impl Command for ToNuon {
|
|||||||
|
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
vec![Example {
|
vec![Example {
|
||||||
description: "Outputs a nuon string representing the contents of this table",
|
description: "Outputs a nuon string representing the contents of this list",
|
||||||
example: "[1 2 3] | to nuon",
|
example: "[1 2 3] | to nuon",
|
||||||
result: Some(Value::test_string("[1, 2, 3]")),
|
result: Some(Value::test_string("[1, 2, 3]")),
|
||||||
}]
|
}]
|
||||||
@ -147,3 +147,13 @@ fn to_nuon(call: &Call, input: PipelineData) -> Result<String, ShellError> {
|
|||||||
|
|
||||||
value_to_string(&v, call.head)
|
value_to_string(&v, call.head)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use super::ToNuon;
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(ToNuon {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -232,9 +232,15 @@ fn action(
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{action, ActionType, Base64Config};
|
use super::{action, ActionType, Base64, Base64Config};
|
||||||
use nu_protocol::{Span, Value};
|
use nu_protocol::{Span, Value};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(Base64 {})
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn base64_encode_standard() {
|
fn base64_encode_standard() {
|
||||||
let word = Value::string("username:password", Span::test_data());
|
let word = Value::string("username:password", Span::test_data());
|
||||||
|
@ -77,7 +77,21 @@ On Windows, an extra 'prefix' column is added."#
|
|||||||
Example {
|
Example {
|
||||||
description: "Parse a single path",
|
description: "Parse a single path",
|
||||||
example: r"'C:\Users\viking\spam.txt' | path parse",
|
example: r"'C:\Users\viking\spam.txt' | path parse",
|
||||||
result: None,
|
result: Some(Value::Record {
|
||||||
|
cols: vec![
|
||||||
|
"prefix".into(),
|
||||||
|
"parent".into(),
|
||||||
|
"stem".into(),
|
||||||
|
"extension".into(),
|
||||||
|
],
|
||||||
|
vals: vec![
|
||||||
|
Value::test_string("C:"),
|
||||||
|
Value::test_string(r"C:\Users\viking"),
|
||||||
|
Value::test_string("spam"),
|
||||||
|
Value::test_string("txt"),
|
||||||
|
],
|
||||||
|
span: Span::test_data(),
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Replace a complex extension",
|
description: "Replace a complex extension",
|
||||||
@ -87,7 +101,21 @@ On Windows, an extra 'prefix' column is added."#
|
|||||||
Example {
|
Example {
|
||||||
description: "Ignore the extension",
|
description: "Ignore the extension",
|
||||||
example: r"'C:\Users\viking.d' | path parse -e ''",
|
example: r"'C:\Users\viking.d' | path parse -e ''",
|
||||||
result: None,
|
result: Some(Value::Record {
|
||||||
|
cols: vec![
|
||||||
|
"prefix".into(),
|
||||||
|
"parent".into(),
|
||||||
|
"stem".into(),
|
||||||
|
"extension".into(),
|
||||||
|
],
|
||||||
|
vals: vec![
|
||||||
|
Value::test_string("C:"),
|
||||||
|
Value::test_string(r"C:\Users"),
|
||||||
|
Value::test_string("viking.d"),
|
||||||
|
Value::test_string(""),
|
||||||
|
],
|
||||||
|
span: Span::test_data(),
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Parse all paths under the 'name' column",
|
description: "Parse all paths under the 'name' column",
|
||||||
@ -103,7 +131,15 @@ On Windows, an extra 'prefix' column is added."#
|
|||||||
Example {
|
Example {
|
||||||
description: "Parse a path",
|
description: "Parse a path",
|
||||||
example: r"'/home/viking/spam.txt' | path parse",
|
example: r"'/home/viking/spam.txt' | path parse",
|
||||||
result: None,
|
result: Some(Value::Record {
|
||||||
|
cols: vec!["parent".into(), "stem".into(), "extension".into()],
|
||||||
|
vals: vec![
|
||||||
|
Value::test_string("/home/viking"),
|
||||||
|
Value::test_string("spam"),
|
||||||
|
Value::test_string("txt"),
|
||||||
|
],
|
||||||
|
span: Span::test_data(),
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Replace a complex extension",
|
description: "Replace a complex extension",
|
||||||
@ -113,7 +149,15 @@ On Windows, an extra 'prefix' column is added."#
|
|||||||
Example {
|
Example {
|
||||||
description: "Ignore the extension",
|
description: "Ignore the extension",
|
||||||
example: r"'/etc/conf.d' | path parse -e ''",
|
example: r"'/etc/conf.d' | path parse -e ''",
|
||||||
result: None,
|
result: Some(Value::Record {
|
||||||
|
cols: vec!["parent".into(), "stem".into(), "extension".into()],
|
||||||
|
vals: vec![
|
||||||
|
Value::test_string("/etc"),
|
||||||
|
Value::test_string("conf.d"),
|
||||||
|
Value::test_string(""),
|
||||||
|
],
|
||||||
|
span: Span::test_data(),
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
Example {
|
Example {
|
||||||
description: "Parse all paths under the 'name' column",
|
description: "Parse all paths under the 'name' column",
|
||||||
|
@ -139,7 +139,7 @@ prints out the list properly."#
|
|||||||
description: "Render a simple list to a grid",
|
description: "Render a simple list to a grid",
|
||||||
example: "[1 2 3 a b c] | grid",
|
example: "[1 2 3 a b c] | grid",
|
||||||
result: Some(Value::String {
|
result: Some(Value::String {
|
||||||
val: "1 │ 2 │ 3 │ a │ b │ c".to_string(),
|
val: "1 │ 2 │ 3 │ a │ b │ c\n".to_string(),
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -147,7 +147,7 @@ prints out the list properly."#
|
|||||||
description: "The above example is the same as:",
|
description: "The above example is the same as:",
|
||||||
example: "[1 2 3 a b c] | wrap name | grid",
|
example: "[1 2 3 a b c] | wrap name | grid",
|
||||||
result: Some(Value::String {
|
result: Some(Value::String {
|
||||||
val: "1 │ 2 │ 3 │ a │ b │ c".to_string(),
|
val: "1 │ 2 │ 3 │ a │ b │ c\n".to_string(),
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -155,7 +155,7 @@ prints out the list properly."#
|
|||||||
description: "Render a record to a grid",
|
description: "Render a record to a grid",
|
||||||
example: "{name: 'foo', b: 1, c: 2} | grid",
|
example: "{name: 'foo', b: 1, c: 2} | grid",
|
||||||
result: Some(Value::String {
|
result: Some(Value::String {
|
||||||
val: "foo".to_string(),
|
val: "foo\n".to_string(),
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -163,7 +163,7 @@ prints out the list properly."#
|
|||||||
description: "Render a list of records to a grid",
|
description: "Render a list of records to a grid",
|
||||||
example: "[{name: 'A', v: 1} {name: 'B', v: 2} {name: 'C', v: 3}] | grid",
|
example: "[{name: 'A', v: 1} {name: 'B', v: 2} {name: 'C', v: 3}] | grid",
|
||||||
result: Some(Value::String {
|
result: Some(Value::String {
|
||||||
val: "A │ B │ C".to_string(),
|
val: "A │ B │ C\n".to_string(),
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -171,7 +171,7 @@ prints out the list properly."#
|
|||||||
description: "Render a table with 'name' column in it to a grid",
|
description: "Render a table with 'name' column in it to a grid",
|
||||||
example: "[[name patch]; [0.1.0 false] [0.1.1 true] [0.2.0 false]] | grid",
|
example: "[[name patch]; [0.1.0 false] [0.1.1 true] [0.2.0 false]] | grid",
|
||||||
result: Some(Value::String {
|
result: Some(Value::String {
|
||||||
val: "0.1.0 │ 0.1.1 │ 0.2.0".to_string(),
|
val: "0.1.0 │ 0.1.1 │ 0.2.0\n".to_string(),
|
||||||
span: Span::test_data(),
|
span: Span::test_data(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -358,3 +358,13 @@ fn convert_to_list(
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#[test]
|
||||||
|
fn test_examples() {
|
||||||
|
use super::Griddle;
|
||||||
|
use crate::test_examples;
|
||||||
|
test_examples(Griddle {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user