The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;

use Test::More tests => 1;

use Bigtop::Parser;

my $bigtop_string = <<"EO_Bigtop";
config {
    base_dir  `.`;
    SQL       Postgres {}
    HttpdConf Gantry   {}
}
app Apps::Checkbook {
    author `Phil Crow`;
    sequence payeepayor_seq {}
    table payeepayor {
        field id    { is int, primary_key, auto; }
    }
}
EO_Bigtop

Bigtop::Parser->add_valid_keywords( 'app',   { keyword => 'author' } );
Bigtop::Parser->add_valid_keywords(
    'field',
    { keyword => 'is' },
    { keyword => 'update_with' },
);

my $tree         = Bigtop::Parser->parse_string($bigtop_string);
my $correct_lookup = {
    tables => {
        payeepayor => {
            fields => {
                id => {
                    is => {
                        args => bless(
                            [ 'int', 'primary_key', 'auto' ],
                        'arg_list' )
                    },
                    __IDENT__ => 'ident_2',
                },
            },
            __IDENT__ => 'ident_3',
        },
    },
    app_statements => {
        author => bless( [ 'Phil Crow' ], 'arg_lst' ),
    },
    sequences => {
        payeepayor_seq => 'ident_1'
    }
};

is_deeply( $tree->{application}{lookup}, $correct_lookup, 'lookup hash' );

# use Data::Dumper; warn Dumper( $tree->{application}{lookup} );

# use Data::Dumper; warn Dumper( $tree );