summaryrefslogtreecommitdiffstats
path: root/src/tools/cargo/tests/testsuite/read_manifest.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/cargo/tests/testsuite/read_manifest.rs')
-rw-r--r--src/tools/cargo/tests/testsuite/read_manifest.rs206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/read_manifest.rs b/src/tools/cargo/tests/testsuite/read_manifest.rs
new file mode 100644
index 000000000..b5e9f05a3
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/read_manifest.rs
@@ -0,0 +1,206 @@
+//! Tests for the `cargo read-manifest` command.
+
+use cargo_test_support::{basic_bin_manifest, main_file, project};
+
+fn manifest_output(readme_value: &str) -> String {
+ format!(
+ r#"
+{{
+ "authors": [
+ "wycats@example.com"
+ ],
+ "categories": [],
+ "default_run": null,
+ "name":"foo",
+ "readme": {},
+ "homepage": null,
+ "documentation": null,
+ "repository": null,
+ "rust_version": null,
+ "version":"0.5.0",
+ "id":"foo[..]0.5.0[..](path+file://[..]/foo)",
+ "keywords": [],
+ "license": null,
+ "license_file": null,
+ "links": null,
+ "description": null,
+ "edition": "2015",
+ "source":null,
+ "dependencies":[],
+ "targets":[{{
+ "kind":["bin"],
+ "crate_types":["bin"],
+ "doc": true,
+ "doctest": false,
+ "test": true,
+ "edition": "2015",
+ "name":"foo",
+ "src_path":"[..]/foo/src/foo.rs"
+ }}],
+ "features":{{}},
+ "manifest_path":"[..]Cargo.toml",
+ "metadata": null,
+ "publish": null
+}}"#,
+ readme_value
+ )
+}
+
+fn manifest_output_no_readme() -> String {
+ manifest_output("null")
+}
+
+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_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())
+ .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(
+ "[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(
+ "[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_json(&manifest_output_no_readme())
+ .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_json(&manifest_output(&format!(r#""{}""#, "SomeReadme.txt")))
+ .run();
+}
+
+#[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();
+
+ p.cargo("read-manifest")
+ .with_json(&manifest_output(&format!(r#""{}""#, readme)))
+ .run();
+ }
+}
+
+#[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_json(&manifest_output_no_readme())
+ .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_json(&manifest_output(r#""README.md""#))
+ .run();
+}