blob: de9abfc7b3cf84aef3443cbfac5c657d82b27e71 [file] [log] [blame]
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +09001// Copyright 2018 Syn Developers
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8
9#![cfg(all(feature = "extra-traits", feature = "full"))]
10
11extern crate proc_macro2;
12extern crate syn;
13
14use proc_macro2::Span;
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090015use syn::{Block, Expr, ExprBlock, ExprClosure, FnDecl, Ident, ItemFn, ReturnType, Visibility};
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +090016use syn::punctuated::Punctuated;
17
18#[test]
19fn test_async_fn() {
20 let raw = "async fn process() {}";
21
22 let expected = ItemFn {
23 attrs: vec![],
24 vis: Visibility::Inherited,
25 constness: None,
26 unsafety: None,
27 asyncness: Some(Default::default()),
28 abi: None,
29 ident: Ident::new("process", Span::call_site()),
30 decl: Box::new(FnDecl {
31 fn_token: Default::default(),
32 generics: Default::default(),
33 paren_token: Default::default(),
34 inputs: Punctuated::new(),
35 variadic: None,
36 output: ReturnType::Default,
37 }),
38 block: Box::new(Block {
39 brace_token: Default::default(),
40 stmts: vec![],
41 }),
42 };
43
44 assert_eq!(expected, syn::parse_str(raw).unwrap());
45}
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090046
47#[test]
48fn test_async_closure() {
49 let raw = "async || {}";
50
51 let expected = Expr::Closure(ExprClosure {
52 attrs: vec![],
53 movability: None,
54 asyncness: Some(Default::default()),
55 capture: None,
56 or1_token: Default::default(),
57 inputs: Punctuated::new(),
58 or2_token:Default::default(),
59 output: ReturnType::Default,
60 body: Box::new(Expr::Block(ExprBlock {
61 attrs: vec![],
62 block: Block {
63 brace_token: Default::default(),
64 stmts: vec![],
65 }
66 })),
67 });
68
69 assert_eq!(expected, syn::parse_str(raw).unwrap());
70}