about summary refs log tree commit diff
path: root/tests/ui/fmt/fmt_debug
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2024-04-14 13:52:58 +0100
committerKornel <kornel@geekhood.net>2024-08-28 23:32:40 +0100
commit88b9edc9dbbaca19b37a132793f1e172150af0f0 (patch)
tree8c067aad200384e889d3b9cbb76b905e050a26ee /tests/ui/fmt/fmt_debug
parent100fde5246bf56f22fb5cc85374dd841296fce0e (diff)
downloadrust-88b9edc9dbbaca19b37a132793f1e172150af0f0.tar.gz
rust-88b9edc9dbbaca19b37a132793f1e172150af0f0.zip
fmt-debug option
Allows disabling `fmt::Debug` derive and debug formatting.
Diffstat (limited to 'tests/ui/fmt/fmt_debug')
-rw-r--r--tests/ui/fmt/fmt_debug/full.rs15
-rw-r--r--tests/ui/fmt/fmt_debug/invalid.rs4
-rw-r--r--tests/ui/fmt/fmt_debug/invalid.stderr2
-rw-r--r--tests/ui/fmt/fmt_debug/none.rs37
-rw-r--r--tests/ui/fmt/fmt_debug/shallow.rs33
5 files changed, 91 insertions, 0 deletions
diff --git a/tests/ui/fmt/fmt_debug/full.rs b/tests/ui/fmt/fmt_debug/full.rs
new file mode 100644
index 00000000000..4e9384d2c52
--- /dev/null
+++ b/tests/ui/fmt/fmt_debug/full.rs
@@ -0,0 +1,15 @@
+//@ compile-flags: -Zfmt-debug=full
+//@ run-pass
+#![feature(fmt_debug)]
+#![allow(dead_code)]
+#![allow(unused)]
+
+#[derive(Debug)]
+struct Foo {
+    bar: u32,
+}
+
+fn main() {
+    let s = format!("Still works: {:?} '{:?}'", cfg!(fmt_debug = "full"), Foo { bar: 1 });
+    assert_eq!("Still works: true 'Foo { bar: 1 }'", s);
+}
diff --git a/tests/ui/fmt/fmt_debug/invalid.rs b/tests/ui/fmt/fmt_debug/invalid.rs
new file mode 100644
index 00000000000..09cb46f1ea6
--- /dev/null
+++ b/tests/ui/fmt/fmt_debug/invalid.rs
@@ -0,0 +1,4 @@
+//@ compile-flags: -Zfmt-debug=invalid-value
+//@ failure-status: 1
+fn main() {
+}
diff --git a/tests/ui/fmt/fmt_debug/invalid.stderr b/tests/ui/fmt/fmt_debug/invalid.stderr
new file mode 100644
index 00000000000..fa6c9380744
--- /dev/null
+++ b/tests/ui/fmt/fmt_debug/invalid.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `invalid-value` for unstable option `fmt-debug` - either `full`, `shallow`, or `none` was expected
+
diff --git a/tests/ui/fmt/fmt_debug/none.rs b/tests/ui/fmt/fmt_debug/none.rs
new file mode 100644
index 00000000000..f45d37d9da2
--- /dev/null
+++ b/tests/ui/fmt/fmt_debug/none.rs
@@ -0,0 +1,37 @@
+//@ compile-flags: -Zfmt-debug=none
+//@ run-pass
+#![feature(fmt_debug)]
+#![allow(dead_code)]
+#![allow(unused)]
+
+#[derive(Debug)]
+struct Foo {
+    bar: u32,
+}
+
+#[derive(Debug)]
+enum Baz {
+    Quz,
+}
+
+#[cfg(fmt_debug = "full")]
+compile_error!("nope");
+
+#[cfg(fmt_debug = "none")]
+struct Custom;
+
+impl std::fmt::Debug for Custom {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        f.write_str("custom_fmt")
+    }
+}
+
+fn main() {
+    let c = Custom;
+    let s = format!("Debug is '{:?}', '{:#?}', and '{c:?}'", Foo { bar: 1 }, Baz::Quz);
+    assert_eq!("Debug is '', '', and ''", s);
+
+    let f = 3.0;
+    let s = format_args!("{:?}x{:#?}y{f:?}", 1234, "can't debug this").to_string();
+    assert_eq!("xy", s);
+}
diff --git a/tests/ui/fmt/fmt_debug/shallow.rs b/tests/ui/fmt/fmt_debug/shallow.rs
new file mode 100644
index 00000000000..479cd1b8875
--- /dev/null
+++ b/tests/ui/fmt/fmt_debug/shallow.rs
@@ -0,0 +1,33 @@
+//@ compile-flags: -Zfmt-debug=shallow
+//@ run-pass
+#![feature(fmt_debug)]
+#![allow(dead_code)]
+#![allow(unused)]
+
+#[derive(Debug)]
+struct Foo {
+    bar: u32,
+    bomb: Bomb,
+}
+
+#[derive(Debug)]
+enum Baz {
+    Quz,
+}
+
+struct Bomb;
+
+impl std::fmt::Debug for Bomb {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        panic!()
+    }
+}
+
+fn main() {
+    let s = format!("Debug is '{:?}' and '{:#?}'", Foo { bar: 1, bomb: Bomb }, Baz::Quz);
+    assert_eq!("Debug is 'Foo' and 'Quz'", s);
+
+    let f = 3.0;
+    let s = format_args!("{:?}{:#?}{f:?}", 1234, cfg!(fmt_debug = "shallow")).to_string();
+    assert_eq!("1234true3.0", s);
+}