aboutsummaryrefslogtreecommitdiff
path: root/tests/test_display.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_display.rs')
-rw-r--r--tests/test_display.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/tests/test_display.rs b/tests/test_display.rs
index 949d9ed..99ce2fd 100644
--- a/tests/test_display.rs
+++ b/tests/test_display.rs
@@ -1,6 +1,4 @@
-#![deny(clippy::all, clippy::pedantic)]
-
-use std::fmt::Display;
+use std::fmt::{self, Display};
use thiserror::Error;
fn assert<T: Display>(expected: &str, value: T) {
@@ -144,6 +142,35 @@ fn test_match() {
}
#[test]
+fn test_nested_display() {
+ // Same behavior as the one in `test_match`, but without String allocations.
+ #[derive(Error, Debug)]
+ #[error("{}", {
+ struct Msg<'a>(&'a String, &'a Option<usize>);
+ impl<'a> Display for Msg<'a> {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ match self.1 {
+ Some(n) => write!(formatter, "error occurred with {}", n),
+ None => write!(formatter, "there was an empty error"),
+ }?;
+ write!(formatter, ": {}", self.0)
+ }
+ }
+ Msg(.0, .1)
+ })]
+ struct Error(String, Option<usize>);
+
+ assert(
+ "error occurred with 1: ...",
+ Error("...".to_owned(), Some(1)),
+ );
+ assert(
+ "there was an empty error: ...",
+ Error("...".to_owned(), None),
+ );
+}
+
+#[test]
fn test_void() {
#[allow(clippy::empty_enum)]
#[derive(Error, Debug)]