blob: 3fbf6dfb380eb55d78a96ba556ed08f93ec81332 [file] [log] [blame]
//! Tests for the `cargo read-manifest` command.
use cargo_test_support::prelude::*;
use cargo_test_support::{basic_bin_manifest, main_file, project, str};
pub fn basic_bin_manifest_with_readme(name: &str, readme_filename: &str) -> String {
format!(
r#"
[package]
name = "{}"
version = "0.5.0"
authors = ["wycats@example.com"]
readme = {}
[[bin]]
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())
.with_stdout_data(
str![[r#"
{
"readme": null,
"...": "{...}"
}
"#]]
.is_json(),
)
.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())
.with_stdout_data(
str![[r#"
{
"readme": null,
"...": "{...}"
}
"#]]
.is_json(),
)
.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_data(str![[r#"
[ERROR] the manifest-path must be a path to a Cargo.toml file
"#]])
.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_data(str![[r#"
[ERROR] the manifest-path must be a path to a Cargo.toml file
"#]])
.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();
p.cargo("read-manifest")
.with_stdout_data(
str![[r#"
{
"readme": null,
"...": "{...}"
}
"#]]
.is_json(),
)
.run();
}
#[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_stdout_data(
str![[r#"
{
"readme": "SomeReadme.txt",
"...": "{...}"
}
"#]]
.is_json(),
)
.run();
}
#[cargo_test]
fn cargo_read_manifest_default_readme() {
let assert_output = |readme, expected| {
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();
p.cargo("read-manifest").with_stdout_data(expected).run();
};
assert_output(
"README.md",
str![[r#"
{
"readme": "README.md",
"...": "{...}"
}
"#]]
.is_json(),
);
assert_output(
"README.txt",
str![[r#"
{
"readme": "README.txt",
"...": "{...}"
}
"#]]
.is_json(),
);
assert_output(
"README",
str![[r#"
{
"readme": "README",
"...": "{...}"
}
"#]]
.is_json(),
);
}
#[cargo_test]
fn cargo_read_manifest_suppress_default_readme() {
let p = project()
.file(
"Cargo.toml",
&basic_bin_manifest_with_readme("foo", "false"),
)
.file("README.txt", "Sample project")
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest")
.with_stdout_data(
str![[r#"
{
"readme": null,
"...": "{...}"
}
"#]]
.is_json(),
)
.run();
}
// If a file named README.md exists, and `readme = true`, the value `README.md` should be defaulted in.
#[cargo_test]
fn cargo_read_manifest_defaults_readme_if_true() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest_with_readme("foo", "true"))
.file("README.md", "Sample project")
.file("src/foo.rs", &main_file(r#""i am foo""#, &[]))
.build();
p.cargo("read-manifest")
.with_stdout_data(
str![[r#"
{
"readme": "README.md",
"...": "{...}"
}
"#]]
.is_json(),
)
.run();
}