blob: 3d59e6b099e51f3a495ede047de9a7a349ae9267 [file] [log] [blame]
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +09001extern crate proc_macro2;
2extern crate syn;
3
David Tolnayc3f98562018-11-02 08:55:05 -07004mod features;
5
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +09006use proc_macro2::Span;
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +09007use syn::punctuated::Punctuated;
David Tolnayd17b64f2018-08-24 16:46:10 -04008use syn::{Block, Expr, ExprBlock, ExprClosure, FnDecl, Ident, ItemFn, ReturnType, Visibility};
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +09009
10#[test]
11fn test_async_fn() {
12 let raw = "async fn process() {}";
13
14 let expected = ItemFn {
15 attrs: vec![],
16 vis: Visibility::Inherited,
17 constness: None,
18 unsafety: None,
19 asyncness: Some(Default::default()),
20 abi: None,
21 ident: Ident::new("process", Span::call_site()),
22 decl: Box::new(FnDecl {
23 fn_token: Default::default(),
24 generics: Default::default(),
25 paren_token: Default::default(),
26 inputs: Punctuated::new(),
27 variadic: None,
28 output: ReturnType::Default,
29 }),
30 block: Box::new(Block {
31 brace_token: Default::default(),
32 stmts: vec![],
33 }),
34 };
35
36 assert_eq!(expected, syn::parse_str(raw).unwrap());
37}
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090038
39#[test]
40fn test_async_closure() {
41 let raw = "async || {}";
42
43 let expected = Expr::Closure(ExprClosure {
44 attrs: vec![],
45 movability: None,
46 asyncness: Some(Default::default()),
47 capture: None,
48 or1_token: Default::default(),
49 inputs: Punctuated::new(),
David Tolnayd17b64f2018-08-24 16:46:10 -040050 or2_token: Default::default(),
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090051 output: ReturnType::Default,
52 body: Box::new(Expr::Block(ExprBlock {
53 attrs: vec![],
David Tolnay1d8e9962018-08-24 19:04:20 -040054 label: None,
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090055 block: Block {
56 brace_token: Default::default(),
57 stmts: vec![],
David Tolnayd17b64f2018-08-24 16:46:10 -040058 },
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090059 })),
60 });
61
62 assert_eq!(expected, syn::parse_str(raw).unwrap());
63}