Importing rustc-1.38.0
diff --git a/src/tools/cargo/tests/testsuite/message_format.rs b/src/tools/cargo/tests/testsuite/message_format.rs
new file mode 100644
index 0000000..06969e7
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/message_format.rs
@@ -0,0 +1,126 @@
+use crate::support::{basic_manifest, project};
+
+#[cargo_test]
+fn cannot_specify_two() {
+ if !crate::support::is_nightly() {
+ return;
+ }
+
+ let p = project()
+ .file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
+ .file("src/main.rs", "fn main() {}")
+ .build();
+
+ let formats = ["human", "json", "short"];
+
+ let two_kinds = "error: cannot specify two kinds of `message-format` arguments\n";
+ for a in formats.iter() {
+ for b in formats.iter() {
+ p.cargo(&format!("build --message-format {},{}", a, b))
+ .with_status(101)
+ .with_stderr(two_kinds)
+ .run();
+ }
+ }
+}
+
+#[cargo_test]
+fn double_json_works() {
+ if !crate::support::is_nightly() {
+ return;
+ }
+
+ let p = project()
+ .file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
+ .file("src/main.rs", "fn main() {}")
+ .build();
+
+ p.cargo("build --message-format json,json-render-diagnostics")
+ .run();
+ p.cargo("build --message-format json,json-diagnostic-short")
+ .run();
+ p.cargo("build --message-format json,json-diagnostic-rendered-ansi")
+ .run();
+ p.cargo("build --message-format json --message-format json-diagnostic-rendered-ansi")
+ .run();
+ p.cargo("build --message-format json-diagnostic-rendered-ansi")
+ .run();
+ p.cargo("build --message-format json-diagnostic-short,json-diagnostic-rendered-ansi")
+ .run();
+}
+
+#[cargo_test]
+fn cargo_renders() {
+ if !crate::support::is_nightly() {
+ return;
+ }
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ [package]
+ name = 'foo'
+ version = '0.1.0'
+
+ [dependencies]
+ bar = { path = 'bar' }
+ "#,
+ )
+ .file("src/main.rs", "")
+ .file("bar/Cargo.toml", &basic_manifest("bar", "0.1.0"))
+ .file("bar/src/lib.rs", "")
+ .build();
+
+ p.cargo("build --message-format json-render-diagnostics")
+ .with_status(101)
+ .with_stdout("{\"reason\":\"compiler-artifact\",[..]")
+ .with_stderr_contains(
+ "\
+[COMPILING] bar [..]
+[COMPILING] foo [..]
+error[..]`main`[..]
+",
+ )
+ .run();
+}
+
+#[cargo_test]
+fn cargo_renders_short() {
+ if !crate::support::is_nightly() {
+ return;
+ }
+
+ let p = project()
+ .file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
+ .file("src/main.rs", "")
+ .build();
+
+ p.cargo("build --message-format json-render-diagnostics,json-diagnostic-short")
+ .with_status(101)
+ .with_stderr_contains(
+ "\
+[COMPILING] foo [..]
+error[..]`main`[..]
+",
+ )
+ .with_stderr_does_not_contain("note:")
+ .run();
+}
+
+#[cargo_test]
+fn cargo_renders_ansi() {
+ if !crate::support::is_nightly() {
+ return;
+ }
+
+ let p = project()
+ .file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
+ .file("src/main.rs", "")
+ .build();
+
+ p.cargo("build --message-format json-diagnostic-rendered-ansi")
+ .with_status(101)
+ .with_stdout_contains("[..]\\u001b[38;5;9merror[..]")
+ .run();
+}