#!/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;

