issue29.t 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #! /usr/bin/env perl
  2. # http://code.google.com/p/perl-compiler/issues/detail?id=29
  3. use strict;
  4. BEGIN {
  5. if ($] < 5.008) {
  6. print "1..1\nok 1 #skip 5.6 has no IO discipline\n"; exit;
  7. }
  8. unshift @INC, 't';
  9. require TestBC;
  10. }
  11. use Test::More tests => 2;
  12. use Config;
  13. use B::C::Config;
  14. my $DEBUGGING = ($Config{ccflags} =~ m/-DDEBUGGING/);
  15. my $ITHREADS = ($Config{useithreads});
  16. my $name = "ccode29i";
  17. my $script = <<'EOF';
  18. use open qw(:std :utf8);
  19. $_ = <>;
  20. print unpack('U*', $_), " ";
  21. print $_ if /\w/;
  22. EOF
  23. open F, ">", "$name.pl";
  24. print F $script;
  25. close F;
  26. #$ENV{LC_ALL} = 'C.UTF-8'; $ENV{LANGUAGE} = $ENV{LANG} = 'en';
  27. my $expected = "24610 ö";
  28. my $Mblib = Mblib;
  29. my $X = $^X =~ m/\s/ ? qq{"$^X" $Mblib} : "$^X $Mblib";
  30. my $perlcc = "$X -Iblib/arch -Iblib/lib blib/script/perlcc";
  31. $perlcc = "$X script/perlcc -I../.. -L../.." if $ENV{PERL_CORE};
  32. system "$perlcc -o $name $name.pl";
  33. unless (-e $name or -e "$name.exe") {
  34. print "ok 1 #skip perlcc failed. Try -Bdynamic or -Bstatic or fix your ldopts.\n";
  35. print "ok 2 #skip\n";
  36. exit;
  37. }
  38. my $runexe = $^O eq 'MSWin32' ? "$name.exe" : "./$name";
  39. my $result = `echo "ö" | $runexe`;
  40. $result =~ s/\n$//;
  41. TODO: {
  42. local $TODO = "B::C issue 29 utf8 perlio";
  43. ok($result eq $expected, "C '$result' ne '$expected'");
  44. }
  45. if ($] < 5.008) {
  46. system "$X -MO=Bytecode56,-o$name.plc $name.pl";
  47. } else {
  48. system "$X -MO=-qq,Bytecode,-o$name.plc $name.pl";
  49. }
  50. unless (-e "$name.plc") {
  51. print "ok 2 #skip perlcc -B failed.\n";
  52. exit;
  53. }
  54. $runexe = "$X -MByteLoader $name.plc";
  55. $result = `echo "ö" | $runexe`;
  56. $result =~ s/\n$//;
  57. SKIP: { TODO: {
  58. local $TODO = "B::Bytecode issue 29 utf8 perlio: 5.12-5.16"
  59. if ($] >= 5.011004 and $] < 5.018 and $ITHREADS);
  60. skip "perl5.22 broke ByteLoader", 1
  61. if $] > 5.021006 and !$B::C::Config::have_byteloader;
  62. ok($result eq $expected, "BC '$result' eq '$expected'");
  63. }}
  64. END {
  65. unlink($name, "$name.plc", "$name.pl", "$name.exe")
  66. if $result eq $expected;
  67. }