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;
my $nt;

BEGIN { $nt = 5 }
use Test::More tests=> 2*$nt;

SKIP: {
  skip "t/twolexers.eyp not found", $nt unless ($ENV{DEVELOPER} && -r "t/twolexers.eyp" && -x "./eyapp");

  unlink 't/twolexers.pl';

  my $r = system(q{perl -I./lib/ eyapp -TC -s -o t/twolexers.pl t/twolexers.eyp});
  
  ok(!$r, "standalone option");

  ok(-s "t/twolexers.pl", "modulino standalone exists");

  ok(-x "t/twolexers.pl", "modulino standalone has execution permits");

  local $ENV{PERL5LIB};
  my $eyapppath = shift @INC; # Supress ~/LEyapp/lib from search path
  eval {

    $r = qx{t/twolexers.pl -t -i -m 1 -c 'AA%%BB'};

  };

  ok(!$@,'t/twolexers.eyp executed as standalone modulino');

  my $expected = q{
In Lexer 1 
In Lexer 1 
In Lexer 1 
In Lexer 2 
In Lexer 2 
In Lexer 2 

s_is_first_second(
  first_is_A_first(
    TERMINAL[A],
    first_is_A(
      TERMINAL[A]
    )
  ),
  second_is_A_second(
    TERMINAL[B],
    second_is_A(
      TERMINAL[B]
    )
  )
)
};
  $expected =~ s/\s+//g;
  $expected = quotemeta($expected);
  $expected = qr{$expected};

  $r =~ s/\s+//g;


  like($r, $expected,'AST for "AA%%BB"');

  unlink 't/twolexers.pl';

}

SKIP: {
  skip "t/twolexers2.eyp not found", $nt unless ($ENV{DEVELOPER} && -r "t/twolexers2.eyp" && -x "./eyapp");

  unlink 't/twolexers2.pl';

  my $r = system(q{perl -I./lib/ eyapp -TC -s -o t/twolexers2.pl t/twolexers2.eyp});
  
  ok(!$r, "standalone option");

  ok(-s "t/twolexers2.pl", "modulino standalone exists");

  ok(-x "t/twolexers2.pl", "modulino standalone has execution permits");

  local $ENV{PERL5LIB};
  my $eyapppath = shift @INC; # Supress ~/LEyapp/lib from search path
  eval {

    $r = qx{t/twolexers2.pl -t -i -m 1 -c 'A  A  %%  x1 34 '};

  };

  ok(!$@,'t/twolexers2.eyp executed as standalone modulino');

  my $expected = q{
In Lexer 2 
In Lexer 2 
In Lexer 2 

s_is_first_second(
  first_is_A_first(
    TERMINAL[A],
    first_is_A(
      TERMINAL[A]
    )
  ),
  second_is_A_second(
    TERMINAL[x1],
    second_is_A(
      TERMINAL[34]
    )
  )
)
};
  $expected =~ s/\s+//g;
  $expected = quotemeta($expected);
  $expected = qr{$expected};

  $r =~ s/\s+//g;


  like($r, $expected,'AST for "A  A  %%  x1 34 "');

  unlink 't/twolexers2.pl';

}