The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#Copyright 2007-8 Arthur S Goldstein
use Test::More tests => 4;
BEGIN { use_ok('Parse::Stallion') };
use Time::Local;
#use Data::Dumper;

my %rule;
$rule{start_rule} =
  A('white_space_word', 'end_of_string',
  E(sub {
    my $param = shift;
#use Data::Dumper;print STDERR "param in to start rule is ".Dumper($param)."\n";
    if ($param->{white_space_word} =~ /\s/) {
      return "found white space";
    }
    else {
      return "no white space";
    }
  })
);
$rule{white_space_word} =
  L(qr/\s+\w+\s+/
);
$rule{end_of_string} =
  L(qr/\z/
);
my ($result_1, $result_2);

my $after_parser = new Parse::Stallion(
  \%rule,
  {start_rule => 'start_rule',
});

$result_1 = $after_parser->parse_and_evaluate(' jj ');



my $during_parser = new Parse::Stallion(
  \%rule,
  {do_evaluation_in_parsing => 1,
  start_rule => 'start_rule',
});

#print STDERR "getting result 2\n";

$result_2 = $during_parser->parse_and_evaluate(' jj ');

#print STDERR "result 1 is $result_1 and r2 is $result_2\n";
is ($result_1, $result_2, "with spaces match");



my $ks_after_parser = new Parse::Stallion(
  \%rule,
  {keep_white_space => 0,
  start_rule => 'start_rule',
});

$result_1 = $ks_after_parser->parse_and_evaluate(' jj ');

my $ks_during_parser = new Parse::Stallion(
  \%rule,
  {do_evaluation_in_parsing => 1,
  keep_white_space => 0,
  start_rule => 'start_rule',
});

$result_2 = $ks_during_parser->parse_and_evaluate(' jj ');

is ($result_1, $result_2, "with forced keep white spaces match");


my $kws_after_parser = new Parse::Stallion(
  \%rule,
  {keep_white_space => 1,
  start_rule => 'start_rule',
});

$result_1 = $kws_after_parser->parse_and_evaluate(' jj ');

my $kws_during_parser = new Parse::Stallion(
  \%rule,
  {do_evaluation_in_parsing => 1,
  keep_white_space => 1,
  start_rule => 'start_rule',
});

$result_2 = $kws_during_parser->parse_and_evaluate(' jj ');

is ($result_1, $result_2, "with forced not to keep white spaces match");