aster 0.9.3

A libsyntax ast builder
use syntax::ast;
use aster::AstBuilder;

#[test]
fn test_unit_variant() {
    let builder = AstBuilder::new();

    assert_eq!(
        builder.variant_data().unit(),
        ast::VariantData::Unit(ast::DUMMY_NODE_ID)
    );
}

#[test]
fn test_empty_struct() {
    let builder = AstBuilder::new();

    assert_eq!(
        builder.variant_data().struct_().build(),
        ast::VariantData::Struct(
            vec![],
            ast::DUMMY_NODE_ID,
        )
    );
}

#[test]
fn test_struct_fields() {
    let builder = AstBuilder::new();

    assert_eq!(
        builder.variant_data().struct_()
            .field("x").ty().isize()
            .field("y").ty().isize()
            .build(),
        ast::VariantData::Struct(
            vec![
                builder.struct_field("x").ty().isize(),
                builder.struct_field("y").ty().isize(),
            ],
            ast::DUMMY_NODE_ID,
        )
    );
}

#[test]
fn test_tuple_fields() {
    let builder = AstBuilder::new();

    assert_eq!(
        builder.variant_data().tuple()
            .ty().isize()
            .ty().isize()
            .build(),
        ast::VariantData::Tuple(
            vec![
                builder.tuple_field().ty().isize(),
                builder.tuple_field().ty().isize(),
            ],
            ast::DUMMY_NODE_ID,
        )
    );
}

#[test]
fn test_with_fields() {
    let builder = AstBuilder::new();
    let variant_data = builder.variant_data().struct_()
        .field("x").ty().isize()
        .field("y").ty().isize()
        .build();

    let variant_data2 = builder.variant_data().struct_()
        .with_fields(
            ["x", "y"].iter()
                .map(|f| builder.struct_field(f).ty().isize())
            )
        .build();

    assert_eq!(
        variant_data,
        variant_data2
    );
}