test_parser.pl 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use autodie;
  5. use warnings FATAL => 'all';
  6. use Test::More;
  7. no warnings 'once';
  8. use File::Find qw(find);
  9. use List::Util qw(first);
  10. use File::Temp qw(tempfile);
  11. use File::Spec::Functions qw(catfile catdir updir);
  12. my $libdir;
  13. BEGIN {
  14. $libdir = catdir(updir(), 'lib');
  15. }
  16. use lib $libdir;
  17. require Sidef;
  18. my (undef, $tempfile) = tempfile();
  19. my $scripts_dir = catdir(updir(), 'scripts');
  20. my @scripts;
  21. find {
  22. no_chdir => 1,
  23. wanted => sub {
  24. if (/\.sf\z/) {
  25. push @scripts, $_;
  26. }
  27. },
  28. } => $scripts_dir;
  29. plan tests => (scalar(@scripts) * 3);
  30. foreach my $sidef_script (@scripts) {
  31. my $content = do {
  32. open my $fh, '<:utf8', $sidef_script;
  33. local $/;
  34. <$fh>;
  35. };
  36. my $sidef = Sidef->new(name => $sidef_script);
  37. my $ast = $sidef->parse_code($content);
  38. is(ref($ast), 'HASH', $sidef_script);
  39. my $optimizer = Sidef::Optimizer->new();
  40. my %oast = $optimizer->optimize($ast);
  41. my $code = $sidef->compile_ast(\%oast, 'Perl');
  42. ok($code ne '', $sidef_script);
  43. open my $fh, '>:utf8', $tempfile;
  44. print $fh $code;
  45. close $fh;
  46. ok(system($^X, '-Mlib=' . $libdir, '-MSidef', '-c', $tempfile) == 0, $sidef_script);
  47. $? && die "error for: $sidef_script";
  48. }