The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Test::More tests=>3;
use_ok qw(Parse::Eyapp::Node) or exit;

my $string = 'ASSIGN(VAR(TERMINAL), TIMES(NUM(TERMINAL),NUM(TERMINAL)))  ';
my @t = Parse::Eyapp::Node->new($string, sub { my $i = 0; $_->{n} = $i++ for @_ });

my $expected = [
  bless( {
    'n' => 0,
    'children' => [
      bless( {
        'n' => 1,
        'children' => [
          bless( {
            'n' => 2,
            'children' => []
          }, 'TERMINAL' )
        ]
      }, 'VAR' ),
      bless( {
        'n' => 3,
        'children' => [
          bless( {
            'n' => 4,
            'children' => [
              bless( {
                'n' => 5,
                'children' => []
              }, 'TERMINAL' )
            ]
          }, 'NUM' ),
          bless( {
            'n' => 6,
            'children' => [
              bless( {
                'n' => 7,
                'children' => []
              }, 'TERMINAL' )
            ]
          }, 'NUM' )
        ]
      }, 'TIMES' )
    ]
  }, 'ASSIGN' ),
  {},
  {},
  {},
  {},
  {},
  {},
  {}
];
$expected->[1] = $expected->[0]{'children'}[0];
$expected->[2] = $expected->[0]{'children'}[0]{'children'}[0];
$expected->[3] = $expected->[0]{'children'}[1];
$expected->[4] = $expected->[0]{'children'}[1]{'children'}[0];
$expected->[5] = $expected->[0]{'children'}[1]{'children'}[0]{'children'}[0];
$expected->[6] = $expected->[0]{'children'}[1]{'children'}[1];
$expected->[7] = $expected->[0]{'children'}[1]{'children'}[1]{'children'}[0];


is_deeply($expected, \@t, 'Parse::Eyapp::Node->new with blanks at the end');

$string = '         ASSIGN(   VAR(    TERMINAL), TIMES(   NUM(TERMINAL),   NUM(   TERMINAL) )   )  ';
@t = Parse::Eyapp::Node->new($string, sub { my $i = 0; $_->{n} = $i++ for @_ });

is_deeply($expected, \@t, 'Parse::Eyapp::Node->new with blanks in the middle');