//! Tests for the `--message-format` flag for `cargo package`. use crate::prelude::*; use cargo_test_support::project; use cargo_test_support::str; #[cargo_test] fn gated() { let p = project() .file( "Cargo.toml", r#" [package] name = "foo" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("src/lib.rs", "") .build(); p.cargo("package --list --message-format json") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_status(101) .with_stderr_data(str![[r#" [ERROR] the `--message-format` flag is unstable, pass `-Z unstable-options` to enable it See https://github.com/rust-lang/cargo/issues/15353 for more information about the `--message-format` flag. "#]]) .run(); } #[cargo_test] fn requires_list() { let p = project() .file( "Cargo.toml", r#" [package] name = "foo" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("src/lib.rs", "") .build(); p.cargo("package --message-format json -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_status(1) .with_stderr_data(str![[r#" [ERROR] the following required arguments were not provided: --list Usage: cargo[EXE] package --list --message-format -Z For more information, try '--help'. "#]]) .run(); } #[cargo_test] fn human() { let p = project() .file( "Cargo.toml", r#" [package] name = "foo" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("src/lib.rs", "") .build(); p.cargo("package --list --message-format human -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_stderr_data(str![""]) .with_stdout_data(str![[r#" Cargo.lock Cargo.toml Cargo.toml.orig src/lib.rs "#]]) .run(); } #[cargo_test] fn single_package() { let p = project() .file( "Cargo.toml", r#" [package] name = "foo" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("src/lib.rs", "") .build(); p.cargo("package --list --message-format json -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_stderr_data(str![""]) .with_stdout_data( str![[r#" [ { "files": { "Cargo.lock": { "kind": "generate" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/src/lib.rs" } }, "id": "path+[ROOTURL]/foo#0.0.0" } ] "#]] .is_json() .against_jsonlines(), ) .run(); // has existing lockfile p.cargo("generate-lockfile").run(); p.cargo("package --list --message-format json -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_stderr_data(str![""]) .with_stdout_data( str![[r#" [ { "files": { "Cargo.lock": { "kind": "generate", "path": "[ROOT]/foo/Cargo.lock" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/src/lib.rs" } }, "id": "path+[ROOTURL]/foo#0.0.0" } ] "#]] .is_json() .against_jsonlines(), ) .run(); } #[cargo_test] fn workspace() { let p = project() .file( "Cargo.toml", r#" [workspace] members = ["gondor", "rohan"] "#, ) .file( "gondor/Cargo.toml", r#" [package] name = "gondor" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("gondor/src/lib.rs", "") .file( "rohan/Cargo.toml", r#" [package] name = "rohan" edition = "2015" license = "MIT" description = "foo" documentation = "foo" "#, ) .file("rohan/src/lib.rs", "") .build(); p.cargo("package --list --message-format json -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_stderr_data(str![""]) .with_stdout_data( str![[r#" [ { "files": { "Cargo.lock": { "kind": "generate" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/gondor/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/gondor/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/gondor/src/lib.rs" } }, "id": "path+[ROOTURL]/foo/gondor#0.0.0" }, { "files": { "Cargo.lock": { "kind": "generate" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/rohan/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/rohan/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/rohan/src/lib.rs" } }, "id": "path+[ROOTURL]/foo/rohan#0.0.0" } ] "#]] .is_json() .against_jsonlines(), ) .run(); // has existing lockfile p.cargo("generate-lockfile").run(); p.cargo("package --list --message-format json -Zunstable-options") .masquerade_as_nightly_cargo(&["package --message-format"]) .with_stderr_data(str![""]) .with_stdout_data( str![[r#" [ { "files": { "Cargo.lock": { "kind": "generate", "path": "[ROOT]/foo/Cargo.lock" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/gondor/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/gondor/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/gondor/src/lib.rs" } }, "id": "path+[ROOTURL]/foo/gondor#0.0.0" }, { "files": { "Cargo.lock": { "kind": "generate", "path": "[ROOT]/foo/Cargo.lock" }, "Cargo.toml": { "kind": "generate", "path": "[ROOT]/foo/rohan/Cargo.toml" }, "Cargo.toml.orig": { "kind": "copy", "path": "[ROOT]/foo/rohan/Cargo.toml" }, "src/lib.rs": { "kind": "copy", "path": "[ROOT]/foo/rohan/src/lib.rs" } }, "id": "path+[ROOTURL]/foo/rohan#0.0.0" } ] "#]] .is_json() .against_jsonlines(), ) .run(); }