Rewrite CLI tests using insta and test_case.
This commit is contained in:
parent
9db7f4f1b2
commit
243750ff5f
|
@ -44,6 +44,12 @@ dependencies = [
|
|||
"regex-automata",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.0.7"
|
||||
|
@ -81,6 +87,19 @@ dependencies = [
|
|||
"os_str_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console"
|
||||
version = "0.15.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
|
||||
dependencies = [
|
||||
"encode_unicode",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"terminal_size",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "difflib"
|
||||
version = "0.4.0"
|
||||
|
@ -99,6 +118,12 @@ version = "1.8.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||
|
||||
[[package]]
|
||||
name = "encode_unicode"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||
|
||||
[[package]]
|
||||
name = "hard-xml"
|
||||
version = "1.13.0"
|
||||
|
@ -138,6 +163,19 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "insta"
|
||||
version = "1.21.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "581d4e3314cae4536e5d22ffd23189d4a374696c5ef733eadafae0ed273fd303"
|
||||
dependencies = [
|
||||
"console",
|
||||
"lazy_static",
|
||||
"linked-hash-map",
|
||||
"similar",
|
||||
"yaml-rust",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.10.5"
|
||||
|
@ -171,6 +209,12 @@ version = "0.2.134"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
|
@ -198,9 +242,11 @@ version = "1.1.4"
|
|||
dependencies = [
|
||||
"assert_cmd",
|
||||
"clap",
|
||||
"insta",
|
||||
"opml",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"test-case",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -321,6 +367,12 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "similar"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62ac7f900db32bf3fd12e0117dd3dc4da74bc52ebaac97f39668446d89694803"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
|
@ -347,12 +399,44 @@ dependencies = [
|
|||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "terminal_size"
|
||||
version = "0.1.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termtree"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
|
||||
|
||||
[[package]]
|
||||
name = "test-case"
|
||||
version = "2.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07aea929e9488998b64adc414c29fe5620398f01c2e3f58164122b17e567a6d5"
|
||||
dependencies = [
|
||||
"test-case-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "test-case-macros"
|
||||
version = "2.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c95968eedc6fc4f5c21920e0f4264f78ec5e4c56bb394f319becc1a5830b3e54"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.37"
|
||||
|
@ -430,3 +514,12 @@ name = "xmlparser"
|
|||
version = "0.13.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||
dependencies = [
|
||||
"linked-hash-map",
|
||||
]
|
||||
|
|
|
@ -32,3 +32,5 @@ features = ["derive"]
|
|||
|
||||
[dev-dependencies]
|
||||
assert_cmd = "2.0.4"
|
||||
insta = "1.21.0"
|
||||
test-case = "2.2.1"
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
use {
|
||||
assert_cmd::Command, insta::assert_display_snapshot, test_case::test_case,
|
||||
};
|
||||
|
||||
const SAMPLE: &str = "tests/sample.opml";
|
||||
|
||||
#[test_case(&["--file", SAMPLE, "--json"], "json" ; "json")]
|
||||
#[test_case(&["--file", SAMPLE, "--json-pretty"], "json_pretty" ; "json_pretty")]
|
||||
#[test_case(&["--file", SAMPLE, "--rss"], "rss" ; "rss")]
|
||||
fn test_valid(args: &[&str], name: &str) {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(args).assert().success().code(0);
|
||||
let output = String::from_utf8(assert.get_output().stdout.clone()).unwrap();
|
||||
assert_display_snapshot!(name, output);
|
||||
}
|
||||
|
||||
#[test_case(&["--rss"], "missing_file" ; "missing_file")]
|
||||
#[test_case(&["--file", SAMPLE], "missing_format" ; "missing_format")]
|
||||
#[test_case(&["--rss", "--json"], "multiple_formats" ; "multiple_formats")]
|
||||
fn test_invalid(args: &[&'static str], name: &str) {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(args).assert().failure().code(2);
|
||||
let output = String::from_utf8(assert.get_output().stderr.clone()).unwrap();
|
||||
assert_display_snapshot!(name, output);
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
use std::fs::read_to_string;
|
||||
|
||||
use assert_cmd::Command;
|
||||
|
||||
const SAMPLE: &str = "tests/samples/youtube.opml";
|
||||
|
||||
#[test]
|
||||
fn test_missing_file() {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(&["--rss"]).assert();
|
||||
|
||||
assert
|
||||
.failure()
|
||||
.code(1)
|
||||
.stderr(read_to_string("tests/snapshots/missing-file.txt").unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_missing_format() {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(&["--file", SAMPLE]).assert();
|
||||
|
||||
assert
|
||||
.failure()
|
||||
.code(1)
|
||||
.stderr(read_to_string("tests/snapshots/missing-format.txt").unwrap());
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
<opml version="2.0">
|
||||
<head>
|
||||
<title>Rust Feeds</title>
|
||||
</head>
|
||||
<body>
|
||||
<outline text="Rust Blog" xmlUrl="https://blog.rust-lang.org/feed.xml" />
|
||||
<outline text="Inside Rust" xmlUrl="https://blog.rust-lang.org/inside-rust/feed.xml" />
|
||||
</body>
|
||||
</opml>
|
|
@ -1,15 +0,0 @@
|
|||
<opml version="1.1">
|
||||
<body>
|
||||
<outline text="YouTube Subscriptions"
|
||||
title="YouTube Subscriptions">
|
||||
<outline text="A YouTube Channel"
|
||||
title="A YouTube Channel"
|
||||
type="rss"
|
||||
xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz1" />
|
||||
<outline text="Another YouTube Channel"
|
||||
title="Another YouTube Channel"
|
||||
type="rss"
|
||||
xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz2" />
|
||||
</outline>
|
||||
</body>
|
||||
</opml>
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
{"version":"2.0","head":{"title":"Rust Feeds","date_created":null,"date_modified":null,"owner_name":null,"owner_email":null,"owner_id":null,"docs":null,"expansion_state":null,"vert_scroll_state":null,"window_top":null,"window_left":null,"window_bottom":null,"window_right":null},"body":{"outlines":[{"text":"Rust Blog","type":null,"is_comment":null,"is_breakpoint":null,"created":null,"category":null,"outlines":[],"xml_url":"https://blog.rust-lang.org/feed.xml","description":null,"html_url":null,"language":null,"title":null,"version":null,"url":null},{"text":"Inside Rust","type":null,"is_comment":null,"is_breakpoint":null,"created":null,"category":null,"outlines":[],"xml_url":"https://blog.rust-lang.org/inside-rust/feed.xml","description":null,"html_url":null,"language":null,"title":null,"version":null,"url":null}]}}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
{
|
||||
"version": "2.0",
|
||||
"head": {
|
||||
"title": "Rust Feeds",
|
||||
"date_created": null,
|
||||
"date_modified": null,
|
||||
"owner_name": null,
|
||||
"owner_email": null,
|
||||
"owner_id": null,
|
||||
"docs": null,
|
||||
"expansion_state": null,
|
||||
"vert_scroll_state": null,
|
||||
"window_top": null,
|
||||
"window_left": null,
|
||||
"window_bottom": null,
|
||||
"window_right": null
|
||||
},
|
||||
"body": {
|
||||
"outlines": [
|
||||
{
|
||||
"text": "Rust Blog",
|
||||
"type": null,
|
||||
"is_comment": null,
|
||||
"is_breakpoint": null,
|
||||
"created": null,
|
||||
"category": null,
|
||||
"outlines": [],
|
||||
"xml_url": "https://blog.rust-lang.org/feed.xml",
|
||||
"description": null,
|
||||
"html_url": null,
|
||||
"language": null,
|
||||
"title": null,
|
||||
"version": null,
|
||||
"url": null
|
||||
},
|
||||
{
|
||||
"text": "Inside Rust",
|
||||
"type": null,
|
||||
"is_comment": null,
|
||||
"is_breakpoint": null,
|
||||
"created": null,
|
||||
"category": null,
|
||||
"outlines": [],
|
||||
"xml_url": "https://blog.rust-lang.org/inside-rust/feed.xml",
|
||||
"description": null,
|
||||
"html_url": null,
|
||||
"language": null,
|
||||
"title": null,
|
||||
"version": null,
|
||||
"url": null
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
error: The following required arguments were not provided:
|
||||
--file <FILE>
|
||||
--json
|
||||
--json-pretty
|
||||
|
||||
Usage: opml --file <FILE> --json --json-pretty --rss
|
||||
|
||||
For more information try '--help'
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
error: The following required arguments were not provided:
|
||||
--json
|
||||
--json-pretty
|
||||
--rss
|
||||
|
||||
Usage: opml --file <FILE> --json --json-pretty --rss
|
||||
|
||||
For more information try '--help'
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
error: The argument '--rss' cannot be used with '--json'
|
||||
|
||||
Usage: opml --file <FILE> --json --json-pretty --rss
|
||||
|
||||
For more information try '--help'
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
source: opml_cli/tests/cli.rs
|
||||
expression: output
|
||||
---
|
||||
Rust Blog
|
||||
https://blog.rust-lang.org/feed.xml
|
||||
Inside Rust
|
||||
https://blog.rust-lang.org/inside-rust/feed.xml
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
{
|
||||
"version": "1.1",
|
||||
"head": null,
|
||||
"body": {
|
||||
"outlines": [
|
||||
{
|
||||
"text": "YouTube Subscriptions",
|
||||
"type": null,
|
||||
"is_comment": null,
|
||||
"is_breakpoint": null,
|
||||
"created": null,
|
||||
"category": null,
|
||||
"outlines": [
|
||||
{
|
||||
"text": "A YouTube Channel",
|
||||
"type": "rss",
|
||||
"is_comment": null,
|
||||
"is_breakpoint": null,
|
||||
"created": null,
|
||||
"category": null,
|
||||
"outlines": [],
|
||||
"xml_url": "https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz1",
|
||||
"description": null,
|
||||
"html_url": null,
|
||||
"language": null,
|
||||
"title": "A YouTube Channel",
|
||||
"version": null,
|
||||
"url": null
|
||||
},
|
||||
{
|
||||
"text": "Another YouTube Channel",
|
||||
"type": "rss",
|
||||
"is_comment": null,
|
||||
"is_breakpoint": null,
|
||||
"created": null,
|
||||
"category": null,
|
||||
"outlines": [],
|
||||
"xml_url": "https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz2",
|
||||
"description": null,
|
||||
"html_url": null,
|
||||
"language": null,
|
||||
"title": "Another YouTube Channel",
|
||||
"version": null,
|
||||
"url": null
|
||||
}
|
||||
],
|
||||
"xml_url": null,
|
||||
"description": null,
|
||||
"html_url": null,
|
||||
"language": null,
|
||||
"title": "YouTube Subscriptions",
|
||||
"version": null,
|
||||
"url": null
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
{"version":"1.1","head":null,"body":{"outlines":[{"text":"YouTube Subscriptions","type":null,"is_comment":null,"is_breakpoint":null,"created":null,"category":null,"outlines":[{"text":"A YouTube Channel","type":"rss","is_comment":null,"is_breakpoint":null,"created":null,"category":null,"outlines":[],"xml_url":"https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz1","description":null,"html_url":null,"language":null,"title":"A YouTube Channel","version":null,"url":null},{"text":"Another YouTube Channel","type":"rss","is_comment":null,"is_breakpoint":null,"created":null,"category":null,"outlines":[],"xml_url":"https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz2","description":null,"html_url":null,"language":null,"title":"Another YouTube Channel","version":null,"url":null}],"xml_url":null,"description":null,"html_url":null,"language":null,"title":"YouTube Subscriptions","version":null,"url":null}]}}
|
|
@ -1,7 +0,0 @@
|
|||
error: The following required arguments were not provided:
|
||||
--file <file>
|
||||
|
||||
USAGE:
|
||||
opml --file <file> <--json|--json-pretty|--rss>
|
||||
|
||||
For more information try --help
|
|
@ -1,7 +0,0 @@
|
|||
error: The following required arguments were not provided:
|
||||
<--json|--json-pretty|--rss>
|
||||
|
||||
USAGE:
|
||||
opml [FLAGS] --file <file> <--json|--json-pretty|--rss>
|
||||
|
||||
For more information try --help
|
|
@ -1,4 +0,0 @@
|
|||
A YouTube Channel
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz1
|
||||
Another YouTube Channel
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=abcdefghijklmnopqrstuvwxyz2
|
|
@ -1,38 +0,0 @@
|
|||
use std::fs::read_to_string;
|
||||
|
||||
use assert_cmd::Command;
|
||||
|
||||
const SAMPLE: &str = "tests/samples/youtube.opml";
|
||||
|
||||
#[test]
|
||||
fn test_valid_rss() {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(&["--file", SAMPLE, "--rss"]).assert();
|
||||
|
||||
assert
|
||||
.success()
|
||||
.code(0)
|
||||
.stdout(read_to_string("tests/snapshots/rss.txt").unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_valid_json() {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(&["--file", SAMPLE, "--json"]).assert();
|
||||
|
||||
assert
|
||||
.success()
|
||||
.code(0)
|
||||
.stdout(read_to_string("tests/snapshots/json.json").unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_valid_json_pretty() {
|
||||
let mut cmd = Command::cargo_bin("opml").unwrap();
|
||||
let assert = cmd.args(&["--file", SAMPLE, "--json-pretty"]).assert();
|
||||
|
||||
assert
|
||||
.success()
|
||||
.code(0)
|
||||
.stdout(read_to_string("tests/snapshots/json-pretty.json").unwrap());
|
||||
}
|
Loading…
Reference in New Issue