diff options
Diffstat (limited to 'syn/tests/test_round_trip.rs')
-rw-r--r-- | syn/tests/test_round_trip.rs | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/syn/tests/test_round_trip.rs b/syn/tests/test_round_trip.rs deleted file mode 100644 index 435bd6a..0000000 --- a/syn/tests/test_round_trip.rs +++ /dev/null @@ -1,151 +0,0 @@ -#![cfg(not(syn_disable_nightly_tests))] -#![recursion_limit = "1024"] -#![feature(rustc_private)] - -extern crate rustc_expand; -extern crate rustc_parse as parse; -extern crate rustc_span; -extern crate syntax; - -mod features; - -use quote::quote; -use rayon::iter::{IntoParallelIterator, ParallelIterator}; -use rustc_span::edition::Edition; -use rustc_span::FileName; -use syntax::ast; -use syntax::errors::PResult; -use syntax::sess::ParseSess; -use syntax::source_map::FilePathMapping; -use walkdir::{DirEntry, WalkDir}; - -use std::fs::File; -use std::io::Read; -use std::panic; -use std::process; -use std::sync::atomic::{AtomicUsize, Ordering}; -use std::time::Instant; - -#[macro_use] -mod macros; - -#[allow(dead_code)] -mod common; - -mod repo; - -use common::eq::SpanlessEq; - -#[test] -fn test_round_trip() { - repo::clone_rust(); - let abort_after = common::abort_after(); - if abort_after == 0 { - panic!("Skipping all round_trip tests"); - } - - let failed = AtomicUsize::new(0); - - WalkDir::new("tests/rust") - .sort_by(|a, b| a.file_name().cmp(b.file_name())) - .into_iter() - .filter_entry(repo::base_dir_filter) - .collect::<Result<Vec<DirEntry>, walkdir::Error>>() - .unwrap() - .into_par_iter() - .for_each(|entry| { - let path = entry.path(); - if path.is_dir() { - return; - } - - let mut file = File::open(path).unwrap(); - let mut content = String::new(); - file.read_to_string(&mut content).unwrap(); - - let start = Instant::now(); - let (krate, elapsed) = match syn::parse_file(&content) { - Ok(krate) => (krate, start.elapsed()), - Err(msg) => { - errorf!("=== {}: syn failed to parse\n{:?}\n", path.display(), msg); - let prev_failed = failed.fetch_add(1, Ordering::SeqCst); - if prev_failed + 1 >= abort_after { - process::exit(1); - } - return; - } - }; - let back = quote!(#krate).to_string(); - - let equal = panic::catch_unwind(|| { - syntax::with_globals(Edition::Edition2018, || { - let sess = ParseSess::new(FilePathMapping::empty()); - let before = match libsyntax_parse(content, &sess) { - Ok(before) => before, - Err(mut diagnostic) => { - diagnostic.cancel(); - if diagnostic - .message() - .starts_with("file not found for module") - { - errorf!("=== {}: ignore\n", path.display()); - } else { - errorf!( - "=== {}: ignore - libsyntax failed to parse original content: {}\n", - path.display(), - diagnostic.message() - ); - } - return true; - } - }; - let after = match libsyntax_parse(back, &sess) { - Ok(after) => after, - Err(mut diagnostic) => { - errorf!("=== {}: libsyntax failed to parse", path.display()); - diagnostic.emit(); - return false; - } - }; - - if SpanlessEq::eq(&before, &after) { - errorf!( - "=== {}: pass in {}ms\n", - path.display(), - elapsed.as_secs() * 1000 - + u64::from(elapsed.subsec_nanos()) / 1_000_000 - ); - true - } else { - errorf!( - "=== {}: FAIL\nbefore: {:#?}\nafter: {:#?}\n", - path.display(), - before, - after, - ); - false - } - }) - }); - match equal { - Err(_) => errorf!("=== {}: ignoring libsyntax panic\n", path.display()), - Ok(true) => {} - Ok(false) => { - let prev_failed = failed.fetch_add(1, Ordering::SeqCst); - if prev_failed + 1 >= abort_after { - process::exit(1); - } - } - } - }); - - let failed = failed.load(Ordering::SeqCst); - if failed > 0 { - panic!("{} failures", failed); - } -} - -fn libsyntax_parse(content: String, sess: &ParseSess) -> PResult<ast::Crate> { - let name = FileName::Custom("test_round_trip".to_string()); - parse::parse_crate_from_source_str(name, content, sess) -} |