blob: b73537b02884284633f4bf62b767e8971c0efba2 [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 Sasakif00a3ef2018-07-20 22:08:42 +090015use syn::punctuated::Punctuated;
David Tolnayd17b64f2018-08-24 16:46:10 -040016use syn::{Block, Expr, ExprBlock, ExprClosure, FnDecl, Ident, ItemFn, ReturnType, Visibility};
Yusuke Sasakif00a3ef2018-07-20 22:08:42 +090017
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(),
David Tolnayd17b64f2018-08-24 16:46:10 -040058 or2_token: Default::default(),
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090059 output: ReturnType::Default,
60 body: Box::new(Expr::Block(ExprBlock {
61 attrs: vec![],
David Tolnay1d8e9962018-08-24 19:04:20 -040062 label: None,
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090063 block: Block {
64 brace_token: Default::default(),
65 stmts: vec![],
David Tolnayd17b64f2018-08-24 16:46:10 -040066 },
Yusuke Sasaki4e5d9662018-07-21 02:49:47 +090067 })),
68 });
69
70 assert_eq!(expected, syn::parse_str(raw).unwrap());
71}