c_argv.t 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #! /usr/bin/env perl
  2. use strict;
  3. use Config;
  4. BEGIN {
  5. unshift @INC, 't';
  6. require TestBC;
  7. }
  8. use Test::More;
  9. # but works locally
  10. plan skip_all => "mingw on appveyor"
  11. if $^O eq 'MSWin32' and $Config{cc} eq 'gcc' and $ENV{APPVEYOR};
  12. plan tests => 4;
  13. my $runperl = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
  14. my $Mblib = Mblib();
  15. my $perlcc = perlcc();
  16. $perlcc .= " --Wc=-O1" if $ENV{PERL_CORE} and $Config{ccflags} =~ /-flto/;
  17. my $exe = $^O eq 'MSWin32' ? 'ccode_argv.exe' : 'ccode_argv';
  18. my $pl = $^O eq 'MSWin32' ? "t\\c_argv.pl" : "t/c_argv.pl";
  19. my $plc = $pl . "c";
  20. my $d = <DATA>;
  21. open F, ">", $pl;
  22. print F $d;
  23. close F;
  24. diag "$runperl $Mblib $perlcc -O3 -o $exe -r $pl ok 1" if $ENV{TEST_VERBOSE};
  25. is(`$runperl $Mblib $perlcc -O3 -o $exe -r $pl ok 1`, "ok 1\n", #1
  26. "perlcc -r file args");
  27. unlink($exe);
  28. open F, ">", $pl;
  29. my $d2 = $d;
  30. $d2 =~ s/ ok 1/ ok 2/;
  31. print F $d2;
  32. close F;
  33. {
  34. my $result = `$runperl $Mblib $perlcc -O -o $exe -r $pl ok 2`;
  35. my $expected = "ok 2\n";
  36. my $cmt = "perlcc -O -r file args";
  37. if ($result eq $expected) {
  38. is ($result, $expected, $cmt); #2
  39. } else {
  40. TODO: {
  41. local $TODO = "unreliable CC testcase";
  42. is($result, $expected, $cmt);
  43. }
  44. }
  45. }
  46. unlink($exe);
  47. open F, ">", $pl;
  48. my $d3 = $d;
  49. $d3 =~ s/ ok 1/ ok 3/;
  50. print F $d3;
  51. close F;
  52. if ($] < 5.022) {
  53. is(`$runperl $Mblib $perlcc -B -r $pl ok 3`, "ok 3\n", #3
  54. "perlcc -B -r file args");
  55. } else {
  56. ok(1, "SKIP BC 5.22");
  57. }
  58. # issue 30
  59. $d = '
  60. sub f1 {
  61. my($self) = @_;
  62. $self->f2;
  63. }
  64. sub f2 {}
  65. sub new {}
  66. print "@ARGV\n";';
  67. open F, ">", $pl;
  68. print F $d;
  69. close F;
  70. `$runperl $Mblib $perlcc -o $exe $pl`;
  71. $exe = "./$exe" unless $^O eq 'MSWin32';
  72. is (`$exe a b c`, "a b c\n",
  73. "issue 30: perlcc -o $exe; $exe args"); #4
  74. END {
  75. unlink($exe, $pl, $plc);
  76. }
  77. __DATA__
  78. print @ARGV?join(" ",@ARGV):"not ok 1 # empty \@ARGV","\n";