diff options
Diffstat (limited to 'ext/Storable/t/blessed.t')
-rw-r--r-- | ext/Storable/t/blessed.t | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/ext/Storable/t/blessed.t b/ext/Storable/t/blessed.t new file mode 100644 index 0000000000..b1a18e62c3 --- /dev/null +++ b/ext/Storable/t/blessed.t @@ -0,0 +1,104 @@ +#!./perl + +# $Id: blessed.t,v 1.0 2000/09/01 19:40:41 ram Exp $ +# +# Copyright (c) 1995-2000, Raphael Manfredi +# +# You may redistribute only under the same terms as Perl 5, as specified +# in the README file that comes with the distribution. +# +# $Log: blessed.t,v $ +# Revision 1.0 2000/09/01 19:40:41 ram +# Baseline for first official release. +# + +sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; +} + +sub ok; + +use Storable qw(freeze thaw); + +print "1..10\n"; + +package SHORT_NAME; + +sub make { bless [], shift } + +package SHORT_NAME_WITH_HOOK; + +sub make { bless [], shift } + +sub STORABLE_freeze { + my $self = shift; + return ("", $self); +} + +sub STORABLE_thaw { + my $self = shift; + my $cloning = shift; + my ($x, $obj) = @_; + die "STORABLE_thaw" unless $obj eq $self; +} + +package main; + +# Still less than 256 bytes, so long classname logic not fully exercised +# Wait until Perl removes the restriction on identifier lengths. +my $name = "LONG_NAME_" . 'xxxxxxxxxxxxx::' x 14 . "final"; + +eval <<EOC; +package $name; + +\@ISA = ("SHORT_NAME"); +EOC +die $@ if $@; +ok 1, $@ eq ''; + +eval <<EOC; +package ${name}_WITH_HOOK; + +\@ISA = ("SHORT_NAME_WITH_HOOK"); +EOC +ok 2, $@ eq ''; + +# Construct a pool of objects +my @pool; + +for (my $i = 0; $i < 10; $i++) { + push(@pool, SHORT_NAME->make); + push(@pool, SHORT_NAME_WITH_HOOK->make); + push(@pool, $name->make); + push(@pool, "${name}_WITH_HOOK"->make); +} + +my $x = freeze \@pool; +ok 3, 1; + +my $y = thaw $x; +ok 4, ref $y eq 'ARRAY'; +ok 5, @{$y} == @pool; + +ok 6, ref $y->[0] eq 'SHORT_NAME'; +ok 7, ref $y->[1] eq 'SHORT_NAME_WITH_HOOK'; +ok 8, ref $y->[2] eq $name; +ok 9, ref $y->[3] eq "${name}_WITH_HOOK"; + +my $good = 1; +for (my $i = 0; $i < 10; $i++) { + do { $good = 0; last } unless ref $y->[4*$i] eq 'SHORT_NAME'; + do { $good = 0; last } unless ref $y->[4*$i+1] eq 'SHORT_NAME_WITH_HOOK'; + do { $good = 0; last } unless ref $y->[4*$i+2] eq $name; + do { $good = 0; last } unless ref $y->[4*$i+3] eq "${name}_WITH_HOOK"; +} +ok 10, $good; + |