cargo/tests/testsuite/package_message_format.rs
2025-06-25 22:37:24 +09:00

330 lines
7.6 KiB
Rust

//! 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 <FMT> -Z <FLAG>
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();
}