[go: up one dir, main page]

aster 0.17.0

A libsyntax ast builder
use syntax::ast;
use syntax::codemap::DUMMY_SP;
use syntax::ptr::P;

use aster::AstBuilder;

#[test]
fn test_no_args_return_isize() {
    let builder = AstBuilder::new();
    let fn_decl = builder.fn_decl().return_().isize();

    assert_eq!(
        fn_decl,
        P(ast::FnDecl {
            inputs: vec![],
            output: ast::FunctionRetTy::Ty(builder.ty().isize()),
            variadic: false,
        })
    );
}

#[test]
fn test_args_return_isize() {
    let builder = AstBuilder::new();
    let fn_decl = builder.fn_decl()
        .arg_id("x").ty().isize()
        .arg_id("y").ty().isize()
        .return_().isize();

    assert_eq!(
        fn_decl,
        P(ast::FnDecl {
            inputs: vec![
                ast::Arg {
                    ty: builder.ty().isize(),
                    pat: builder.pat().id("x"),
                    id: ast::DUMMY_NODE_ID,
                },
                ast::Arg {
                    ty: builder.ty().isize(),
                    pat: builder.pat().id("y"),
                    id: ast::DUMMY_NODE_ID,
                },
            ],
            output: ast::FunctionRetTy::Ty(builder.ty().isize()),
            variadic: false,
        })
    );
}

#[test]
fn test_no_return() {
    let builder = AstBuilder::new();
    let fn_decl = builder.fn_decl().no_return();

    assert_eq!(
        fn_decl,
        P(ast::FnDecl {
            inputs: vec![],
            output: ast::FunctionRetTy::None(DUMMY_SP),
            variadic: false,
        })
    );
}

#[test]
fn test_default_return() {
    let builder = AstBuilder::new();
    let fn_decl = builder.fn_decl().default_return();

    assert_eq!(
        fn_decl,
        P(ast::FnDecl {
            inputs: vec![],
            output: ast::FunctionRetTy::Default(DUMMY_SP),
            variadic: false,
        })
    );
}