summaryrefslogtreecommitdiffstats
path: root/src/tools/cargo/tests/testsuite/locate_project.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/cargo/tests/testsuite/locate_project.rs')
-rw-r--r--src/tools/cargo/tests/testsuite/locate_project.rs76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/locate_project.rs b/src/tools/cargo/tests/testsuite/locate_project.rs
new file mode 100644
index 000000000..7e8ceb4c6
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/locate_project.rs
@@ -0,0 +1,76 @@
+//! Tests for the `cargo locate-project` command.
+
+use cargo_test_support::project;
+
+#[cargo_test]
+fn simple() {
+ let p = project().build();
+
+ p.cargo("locate-project")
+ .with_json(r#"{"root": "[ROOT]/foo/Cargo.toml"}"#)
+ .run();
+}
+
+#[cargo_test]
+fn message_format() {
+ let p = project().build();
+
+ p.cargo("locate-project --message-format plain")
+ .with_stdout("[ROOT]/foo/Cargo.toml")
+ .run();
+
+ p.cargo("locate-project --message-format json")
+ .with_json(r#"{"root": "[ROOT]/foo/Cargo.toml"}"#)
+ .run();
+
+ p.cargo("locate-project --message-format cryptic")
+ .with_stderr("error: invalid message format specifier: `cryptic`")
+ .with_status(101)
+ .run();
+}
+
+#[cargo_test]
+fn workspace() {
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ [package]
+ name = "outer"
+ version = "0.0.0"
+
+ [workspace]
+ members = ["inner"]
+ "#,
+ )
+ .file("src/main.rs", "fn main() {}")
+ .file(
+ "inner/Cargo.toml",
+ r#"
+ [package]
+ name = "inner"
+ version = "0.0.0"
+ "#,
+ )
+ .file("inner/src/lib.rs", "")
+ .build();
+
+ let outer_manifest = r#"{"root": "[ROOT]/foo/Cargo.toml"}"#;
+ let inner_manifest = r#"{"root": "[ROOT]/foo/inner/Cargo.toml"}"#;
+
+ p.cargo("locate-project").with_json(outer_manifest).run();
+
+ p.cargo("locate-project")
+ .cwd("inner")
+ .with_json(inner_manifest)
+ .run();
+
+ p.cargo("locate-project --workspace")
+ .with_json(outer_manifest)
+ .run();
+
+ p.cargo("locate-project --workspace")
+ .cwd("inner")
+ .with_json(outer_manifest)
+ .run();
+}