cargo/tests/testsuite/read_manifest.rs

207 lines
5.4 KiB
Rust
Raw Normal View History

2019-11-25 02:42:45 +00:00
//! Tests for the `cargo read-manifest` command.
use cargo_test_support::{basic_bin_manifest, main_file, project};
2020-05-25 07:07:16 +00:00
fn manifest_output(readme_value: &str) -> String {
format!(
r#"
{{
"authors": [
"wycats@example.com"
],
"categories": [],
"default_run": null,
2015-12-16 22:04:19 +00:00
"name":"foo",
2020-05-25 07:07:16 +00:00
"readme": {},
2020-10-01 09:22:49 +00:00
"homepage": null,
"documentation": null,
"repository": null,
"rust_version": null,
2015-12-16 22:04:19 +00:00
"version":"0.5.0",
"id":"path+file://[..]/foo#0.5.0",
"keywords": [],
"license": null,
"license_file": null,
"links": null,
"description": null,
"edition": "2015",
2015-12-16 22:04:19 +00:00
"source":null,
"dependencies":[],
2020-05-25 07:07:16 +00:00
"targets":[{{
2015-12-16 22:04:19 +00:00
"kind":["bin"],
2017-02-09 18:20:56 +00:00
"crate_types":["bin"],
"doc": true,
"doctest": false,
"test": true,
"edition": "2015",
2015-12-16 22:04:19 +00:00
"name":"foo",
2018-08-02 09:18:48 +00:00
"src_path":"[..]/foo/src/foo.rs"
2020-05-25 07:07:16 +00:00
}}],
"features":{{}},
"manifest_path":"[..]Cargo.toml",
"metadata": null,
"publish": null
2020-05-25 07:09:12 +00:00
}}"#,
readme_value
2020-05-25 07:07:16 +00:00
)
}
fn manifest_output_no_readme() -> String {
manifest_output("null")
}
pub fn basic_bin_manifest_with_readme(name: &str, readme_filename: &str) -> String {
format!(
r#"
2020-09-27 00:59:58 +00:00
[package]
2020-09-27 00:59:58 +00:00
name = "{}"
version = "0.5.0"
authors = ["wycats@example.com"]
readme = {}
2020-09-27 00:59:58 +00:00
[[bin]]
2020-09-27 00:59:58 +00:00
name = "{}"
"#,
name, readme_filename, name
)
}
#[cargo_test]
fn cargo_read_manifest_path_to_cargo_toml_relative() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest --manifest-path foo/Cargo.toml")
.cwd(p.root().parent().unwrap())
2020-05-25 07:07:16 +00:00
.with_json(&manifest_output_no_readme())
.run();
}
#[cargo_test]
fn cargo_read_manifest_path_to_cargo_toml_absolute() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest --manifest-path")
.arg(p.root().join("Cargo.toml"))
.cwd(p.root().parent().unwrap())
2020-05-25 07:07:16 +00:00
.with_json(&manifest_output_no_readme())
.run();
}
#[cargo_test]
fn cargo_read_manifest_path_to_cargo_toml_parent_relative() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest --manifest-path foo")
.cwd(p.root().parent().unwrap())
.with_status(101)
.with_stderr(
2018-03-14 15:17:44 +00:00
"[ERROR] the manifest-path must be \
a path to a Cargo.toml file",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn cargo_read_manifest_path_to_cargo_toml_parent_absolute() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest --manifest-path")
.arg(p.root())
.cwd(p.root().parent().unwrap())
.with_status(101)
.with_stderr(
2018-03-14 15:17:44 +00:00
"[ERROR] the manifest-path must be \
a path to a Cargo.toml file",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn cargo_read_manifest_cwd() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
2020-05-25 07:09:12 +00:00
p.cargo("read-manifest")
.with_json(&manifest_output_no_readme())
.run();
2020-05-25 07:07:16 +00:00
}
2020-05-29 05:07:12 +00:00
#[cargo_test]
fn cargo_read_manifest_with_specified_readme() {
let p = project()
.file(
"Cargo.toml",
&basic_bin_manifest_with_readme("foo", r#""SomeReadme.txt""#),
)
.file("SomeReadme.txt", "Sample Project")
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest")
.with_json(&manifest_output(&format!(r#""{}""#, "SomeReadme.txt")))
.run();
}
2020-05-25 07:07:16 +00:00
#[cargo_test]
fn cargo_read_manifest_default_readme() {
let readme_filenames = ["README.md", "README.txt", "README"];
for readme in readme_filenames.iter() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file(readme, "Sample project")
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
2020-05-25 07:09:12 +00:00
p.cargo("read-manifest")
.with_json(&manifest_output(&format!(r#""{}""#, readme)))
.run();
2020-05-25 07:07:16 +00:00
}
}
#[cargo_test]
fn cargo_read_manifest_suppress_default_readme() {
let p = project()
2020-05-25 07:09:12 +00:00
.file(
"Cargo.toml",
&basic_bin_manifest_with_readme("foo", "false"),
)
2020-05-25 07:07:16 +00:00
.file("README.txt", "Sample project")
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
2020-05-25 07:09:12 +00:00
p.cargo("read-manifest")
.with_json(&manifest_output_no_readme())
.run();
}
2020-05-29 05:07:12 +00:00
2020-06-09 07:03:15 +00:00
// If a file named README.md exists, and `readme = true`, the value `README.md` should be defaulted in.
2020-05-29 05:07:12 +00:00
#[cargo_test]
fn cargo_read_manifest_defaults_readme_if_true() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest_with_readme("foo", "true"))
2020-06-09 07:03:15 +00:00
.file("README.md", "Sample project")
2020-05-29 05:07:12 +00:00
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest")
2020-06-11 21:55:33 +00:00
.with_json(&manifest_output(r#""README.md""#))
2020-05-29 05:07:12 +00:00
.run();
}