Catch panics from syntex in test
diff --git a/tests/test_round_trip.rs b/tests/test_round_trip.rs
index 2d4250a..14bfeb5 100644
--- a/tests/test_round_trip.rs
+++ b/tests/test_round_trip.rs
@@ -13,9 +13,9 @@
use syntex_syntax::parse::{self, ParseSess, PResult};
use time::PreciseTime;
-
use std::fs::File;
use std::io::{self, Read, Write};
+use std::panic;
macro_rules! errorf {
($($tt:tt)*) => {
@@ -52,37 +52,44 @@
};
let back = quote!(#krate).to_string();
- let sess = ParseSess::new();
- let before = match syntex_parse(content, &sess) {
- Ok(before) => before,
- Err(mut diagnostic) => {
- diagnostic.cancel();
- if diagnostic.message.starts_with("file not found for module") ||
- diagnostic.message.starts_with("couldn't read") {
- errorf!("ignore\n");
- continue;
- } else {
- panic!(diagnostic.message.clone());
+ let equal = panic::catch_unwind(|| {
+ let sess = ParseSess::new();
+ let before = match syntex_parse(content, &sess) {
+ Ok(before) => before,
+ Err(mut diagnostic) => {
+ diagnostic.cancel();
+ if diagnostic.message.starts_with("file not found for module") {
+ errorf!("ignore\n");
+ return true;
+ } else {
+ errorf!("FAIL: {}\n", diagnostic.message);
+ return false;
+ }
}
- }
- };
- let after = match syntex_parse(back, &sess) {
- Ok(after) => after,
- Err(mut diagnostic) => {
- errorf!("syntex failed to parse");
- diagnostic.emit();
- failed += 1;
- continue;
- }
- };
+ };
+ let after = match syntex_parse(back, &sess) {
+ Ok(after) => after,
+ Err(mut diagnostic) => {
+ errorf!("syntex failed to parse");
+ diagnostic.emit();
+ return false;
+ }
+ };
- if before == after {
- errorf!("pass in {}ms\n", elapsed.num_milliseconds());
- } else {
- errorf!("FAIL\nbefore: {}\nafter: {}\n",
- format!("{:?}", before).replace("\n", ""),
- format!("{:?}", after).replace("\n", ""));
- failed += 1;
+ if before == after {
+ errorf!("pass in {}ms\n", elapsed.num_milliseconds());
+ true
+ } else {
+ errorf!("FAIL\nbefore: {}\nafter: {}\n",
+ format!("{:?}", before).replace("\n", ""),
+ format!("{:?}", after).replace("\n", ""));
+ false
+ }
+ });
+ match equal {
+ Err(_) => errorf!("syntex panic\n"),
+ Ok(true) => {},
+ Ok(false) => failed += 1,
}
}