summaryrefslogtreecommitdiff
path: root/dhall/src/tests.rs
diff options
context:
space:
mode:
authorNadrieril2019-11-11 12:43:09 +0000
committerNadrieril2019-11-11 13:50:36 +0000
commit330f063e80a51f8f399864f9d01412e1bff34fe9 (patch)
treed008005efc57222c0b33f5069c6ce8576cc7bd43 /dhall/src/tests.rs
parent5d5a356b8eb36e277c312e5550d1cb0a2f82e9fa (diff)
Display first pretty type error
Diffstat (limited to '')
-rw-r--r--dhall/src/tests.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/dhall/src/tests.rs b/dhall/src/tests.rs
index 9790b95..cde3b03 100644
--- a/dhall/src/tests.rs
+++ b/dhall/src/tests.rs
@@ -20,6 +20,29 @@ right: `{}`"#,
}};
}
+/// Wrapper around string slice that makes debug output `{:?}` to print string same way as `{}`.
+/// Used in different `assert*!` macros in combination with `pretty_assertions` crate to make
+/// test failures to show nice diffs.
+#[derive(PartialEq, Eq)]
+#[doc(hidden)]
+pub struct PrettyString(String);
+
+/// Make diff to display string as multi-line string
+impl std::fmt::Debug for PrettyString {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ f.write_str(&self.0)
+ }
+}
+
+macro_rules! assert_eq_pretty_str {
+ ($left:expr, $right:expr) => {
+ assert_eq_pretty!(
+ PrettyString($left.to_string()),
+ PrettyString($right.to_string())
+ );
+ };
+}
+
use std::fs::File;
use std::io::{Read, Write};
use std::path::PathBuf;
@@ -172,7 +195,7 @@ pub fn run_test(test: Test<'_>) -> Result<()> {
if error_file_path.is_file() {
let expected_msg = std::fs::read_to_string(error_file_path)?;
let msg = format!("{}\n", err);
- assert_eq_pretty!(msg, expected_msg);
+ assert_eq_pretty_str!(msg, expected_msg);
} else {
std::fs::create_dir_all(error_file_path.parent().unwrap())?;
let mut file = File::create(error_file_path)?;