1#![allow(dead_code)]
2#![allow(unreachable_code)]
3#![allow(unused_imports)]
4#![feature(proc_macro_diagnostic)]
5#![allow(unused_variables)]
6extern crate proc_macro;
7
8#[macro_use] mod imports; use imports::*;
9#[macro_use] mod syn_imports; use syn_imports::*;
10
11xp!{async_should_fail}
12xp!{async_should_pass}
13xp!{attribute_kind}
14xp!{check_is_function_async}
15xp!{check_panic_message}
16xp!{ensure_item_has_no_test_attribute}
17xp!{errors}
18xp!{extract_all_attributes_except_test_attribute}
19xp!{generate_new_block}
20xp!{check_returns_result}
21xp!{return_type_tokens}
22xp!{write_token_stream}
23xp!{get_should_fail_attr}
24xp!{is_should_panic_attr}
25xp!{should_trace}
26xp!{is_test_attribute}
27xp!{original}
28xp!{panic_handler}
29xp!{parse_or_compile_error}
30xp!{result_handling}
31xp!{should_fail_attr}
32xp!{should_panic_attr}
33xp!{traced_test_attr}
34xp!{sync_should_fail}
35xp!{sync_should_pass}
36xp!{test_builder}
37xp!{traced_test}
38xp!{tracing_setup_tokens}
39xp!{use_statements}
40xp!{wrap_async_test}
41xp!{wrap_sync_test}
42xp!{wrap_the_original_block}
43xp!{backtrace_guard}
44xp!{flush_logs_if_needed}
45xp!{tracing_guard}
46xp!{end_of_test_guard}
47
48#[proc_macro_attribute]
49pub fn traced_test(attr: TokenStream, item: TokenStream) -> TokenStream {
50
51 let traced_test_attr = parse_macro_input!(attr as TracedTestAttr);
52 let item_fn = parse_macro_input!(item as ItemFn);
53
54 let generator = match TracedTestGenerator::from_item_fn(item_fn, traced_test_attr) {
55 Ok(test) => test,
56 Err(e) => panic!("traced_test generator error: {:#?}", e),
57 };
58
59 let output = match generator.write_token_stream() {
60 Ok(output_fn) => output_fn,
61 Err(e) => panic!("traced_test generator error: {:#?}", e),
62 };
63
64 output.into()
65}
66
67#[proc_macro_attribute]
69pub fn should_fail(_attr: TokenStream, item: TokenStream) -> TokenStream {
70 item
72}