xref: /openbsd-src/gnu/usr.bin/perl/t/lib/overload_fallback.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
1b39c5158Smillertuse warnings;
2b39c5158Smillertuse strict;
3*5759b3d2Safresh1
4*5759b3d2Safresh1BEGIN {
5*5759b3d2Safresh1    chdir 't' if -d 't';
6*5759b3d2Safresh1    @INC = '../lib';
7*5759b3d2Safresh1    require './test.pl';
8*5759b3d2Safresh1    plan(tests => 4);
9*5759b3d2Safresh1}
10b39c5158Smillert
11b39c5158Smillertuse overload '""' => sub { 'stringvalue' }, fallback => 1;
12b39c5158Smillert
13b39c5158SmillertBEGIN {
14b39c5158Smillertmy $x = bless {}, 'main';
15b39c5158Smillertok ($x eq 'stringvalue', 'fallback worked');
16b39c5158Smillert}
17b39c5158Smillert
18b39c5158Smillert
19b39c5158Smillert# NOTE: delete the next line and this test script will pass
20b39c5158Smillertuse overload '+' => sub { die "unused"; };
21b39c5158Smillert
22b39c5158Smillertmy $x = bless {}, 'main';
23b39c5158Smillertok (eval {$x eq 'stringvalue'}, 'fallback worked again');
24b39c5158Smillert
25*5759b3d2Safresh1TODO: {
26*5759b3d2Safresh1  local $::TODO = 'RT #43356: Autogeneration of ++ is incorrect';
27*5759b3d2Safresh1  fresh_perl_is(<<'EOC', '2', {}, 'RT #43356: Autogeneration of ++');
28*5759b3d2Safresh1use overload
29*5759b3d2Safresh1    "0+"     => sub { ${$_[0]} },
30*5759b3d2Safresh1    "="      => sub { ${$_[0]} },
31*5759b3d2Safresh1    fallback => 1;
32*5759b3d2Safresh1my $value = bless \(my $dummy = 1), __PACKAGE__;
33*5759b3d2Safresh1print ++$value;
34*5759b3d2Safresh1EOC
35*5759b3d2Safresh1}
36*5759b3d2Safresh1
37*5759b3d2Safresh1{
38*5759b3d2Safresh1    my $warned = 0;
39*5759b3d2Safresh1    local $SIG{__WARN__} = sub { $warned++; };
40*5759b3d2Safresh1
41*5759b3d2Safresh1    eval q{
42*5759b3d2Safresh1        use overload '${}', 'fallback';
43*5759b3d2Safresh1        no overload '${}', 'fallback';
44*5759b3d2Safresh1    };
45*5759b3d2Safresh1
46*5759b3d2Safresh1    ok($warned == 0, 'no overload should not warn');
47*5759b3d2Safresh1}
48*5759b3d2Safresh1
49