This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ef21e886f56a90f631f77c82de8f88cceb2cfa14
[perl5.git] / t / op / concat2.t
1 #!./perl
2
3 # This file is for concatenation tests that require test.pl.
4 #
5 # concat.t cannot use test.pl as it needs to avoid using concatenation in
6 # its ok() function.
7
8 BEGIN {
9     chdir 't' if -d 't';
10     @INC = '../lib';
11     require './test.pl';
12 }
13
14 plan 3;
15
16 SKIP: {
17 skip("no encoding pragma in EBCDIC", 1) if $::IS_EBCDIC;
18 skip_if_miniperl("no dynamic loading on miniperl, no Encode", 1);
19 fresh_perl_is <<'end', "ok\n", {},
20     no warnings 'deprecated';
21     use encoding 'utf8';
22     map { "a" . $a } ((1)x5000);
23     print "ok\n";
24 end
25  "concat does not lose its stack pointer after utf8 upgrade [perl #78674]";
26 }
27
28 # This test is in the file because overload.pm uses concatenation.
29 { package o; use overload '""' => sub { $_[0][0] } }
30 $x = bless[chr 256],o::;
31 "$x";
32 $x->[0] = "\xff";
33 $x.= chr 257;
34 $x.= chr 257;
35 is $x, "\xff\x{101}\x{101}", '.= is not confused by changing utf8ness';
36
37 # Ops should not share the same TARG between recursion levels.  This may
38 # affect other ops, too, but concat seems more susceptible to this than
39 # others, since it can call itself recursively.  (Where else would I put
40 # this test, anyway?)
41 fresh_perl_is <<'end', "tmp\ntmp\n", {},
42  sub canonpath {
43      my ($path) = @_;
44      my $node = '';
45      $path =~ s|/\z||;
46      return "$node$path";
47  }
48  
49  {
50   package Path::Class::Dir;
51   use overload q[""] => sub { ::canonpath("tmp") };
52  }
53  
54  print canonpath("tmp"), "\n";
55  print canonpath(bless {},"Path::Class::Dir"), "\n";
56 end
57  "recursive concat does not share TARGs";