#!/usr/bin/env perl use strict; use warnings; use utf8; use FindBin; use lib "$FindBin::Bin/../lib/"; use blib; use 5.10.0; use Test::Differences; use Data::Dumper; use Nana::Parser; use Nana::Translator::Perl; use Capture::Tiny qw(capture); use Test::More; use Getopt::Long; my $parser = Nana::Parser->new(); my $compiler = Nana::Translator::Perl->new(); GetOptions( 'c' => \my $compile, ); my $fname = shift @ARGV or die "Usage: $0 fname.egtra"; open my $fh, '<', $fname or die "Cannot open file $fname: $!"; my $src = do { local $/; <$fh> }; my $ast = $parser->parse($src); say(Dumper $ast) if $ENV{DUMP_AST}; my $perl = $compiler->compile($ast); say($perl) if $compile || $ENV{DUMP_PERL}; exit if $compile; my ($out, $err) = capture { eval $perl; print STDERR $@ if $@; }; my $expected = do { my $x = $src; $x =~ s/\A.*\n__END__\n(.+)\Z/$1/sm; $x; }; eq_or_diff($out, $expected, $fname); is($err, '', $fname); done_testing;