#!/usr/bin/env perl
use Data::Dumper;
use Data::Dx;
use Dios { accessors => 'unified' };
use Getopt::Long;
use Path::Tiny;
use Test::Expr;
use 5.014_00;
class Nada {
has Int $.number is rw;
};
class Yada {
has Int $.number is rw;
has Nada @.nadas is rw;
}; # class Yada:
BEGIN {
# Let's confirm that Dios uses Object::InsideOut so we can "dump" and "pump"
say $INC{'Object/InsideOut.pm'};
};
Getopt::Long::GetOptions(
"initialize" => \my $initialize,
"restore" => \my $restore,
"save" => \my $save,
);
say "";
Nada->new(), Yada->new(), say "initialized!"
if ($initialize);
sub test_our_yada {
my $self=shift;
ok $self->isa('Yada');
ok $self->number() == 0;
ok @{$self->nadas()} == 2;
Dx $self->nadas();
ok $self->nadas()->[0]->number() == 1;
ok $self->nadas()->[1]->number() == 2;
}
if ($save) {
# The "initial" Yada
my $yada=Yada->new(number=>0,nadas=>[Nada->new(number=>1),Nada->new(number=>2)]);
$yada->main::test_our_yada();
# $erialized and written to 'Yada.dat'
Path::Tiny::path('Yada.dat')->spew_raw($yada->dump(1));
done_testing;
}
elsif ($restore) {
# The restored from 'Yada.dat' Yada
my $yada=Object::InsideOut->pump(Path::Tiny::path('Yada.dat')->slurp_raw());
$yada->main::test_our_yada();
done_testing;
}
else {
warn "Needs a 'save' or a 'restore'.";
}
say "";
__END__
####
# Saved WITHOUT initial "Nada->new(), Yada->new()"
>perl test_01.t -save
ok 1 - $self->isa('Yada')
ok 2 - $self->number() == 0
ok 3 - @{$self->nadas()} == 2
#line 38 test_01.t
$self->nadas() = [
bless(do{\(my $o = 1)}, "Nada"),
bless(do{\(my $o = 2)}, "Nada"),
]
ok 4 - $self->nadas()->[0]->number() == 1
ok 5 - $self->nadas()->[1]->number() == 2
1..5
# Restored WITHOUT initial "Nada->new(), Yada->new()"
>perl test_01.t -restore
OIO::Args error: Unknown field name for class 'Yada': number
Package: main
File: test_01.t
Line: 52
Trace begun at test_01.t line 52
# Restored WITH initial "Nada->new(), Yada->new()"
>perl test_01.t -initialize -restore
initialized!
ok 1 - $self->isa('Yada')
ok 2 - $self->number() == 0
ok 3 - @{$self->nadas()} == 2
#line 38 test_01.t
$self->nadas() = [
bless(do{\(my $o = 1)}, "Nada"),
bless(do{\(my $o = 2)}, "Nada"),
]
not ok 4 - $self->nadas()->[0]->number() == 1
# Failed test '$self->nadas()->[0]->number() == 1'
# at test_01.t line 45.
#
# (do{$self->nadas()->[0]->number() == 1}) was false
# because:
# $self --> bless(do{\(my $o = 1)}, "Yada")
#
not ok 5 - $self->nadas()->[1]->number() == 2
# Failed test '$self->nadas()->[1]->number() == 2'
# at test_01.t line 46.
#
# (do{$self->nadas()->[1]->number() == 2}) was false
# because:
# $self --> bless(do{\(my $o = 1)}, "Yada")
#
1..5
ERROR: Duplicate reclaimed object ID (1) in class tree for Nada in thread 0
# Looks like you failed 2 tests of 5.
# Saved WITH initial "Nada->new(), Yada->new()"
>perl test_01.t -initialize -save
initialized!
ok 1 - $self->isa('Yada')
ok 2 - $self->number() == 0
ok 3 - @{$self->nadas()} == 2
#line 38 test_01.t
$self->nadas() = [
bless(do{\(my $o = 1)}, "Nada"),
bless(do{\(my $o = 2)}, "Nada"),
]
ok 4 - $self->nadas()->[0]->number() == 1
ok 5 - $self->nadas()->[1]->number() == 2
1..5
# Restored WITHOUT initial "Nada->new(), Yada->new()"
>perl test_01.t -restore
OIO::Args error: Unknown field name for class 'Yada': number
Package: main
File: test_01.t
Line: 52
Trace begun at test_01.t line 52
# Restored WITH initial "Nada->new(), Yada->new()"
>perl test_01.t -initialize -restore
initialized!
ok 1 - $self->isa('Yada')
ok 2 - $self->number() == 0
ok 3 - @{$self->nadas()} == 2
#line 38 test_01.t
$self->nadas() = [
bless(do{\(my $o = 1)}, "Nada"),
bless(do{\(my $o = 2)}, "Nada"),
]
not ok 4 - $self->nadas()->[0]->number() == 1
# Failed test '$self->nadas()->[0]->number() == 1'
# at test_01.t line 45.
#
# (do{$self->nadas()->[0]->number() == 1}) was false
# because:
# $self --> bless(do{\(my $o = 1)}, "Yada")
#
not ok 5 - $self->nadas()->[1]->number() == 2
# Failed test '$self->nadas()->[1]->number() == 2'
# at test_01.t line 46.
#
# (do{$self->nadas()->[1]->number() == 2}) was false
# because:
# $self --> bless(do{\(my $o = 1)}, "Yada")
#
1..5
ERROR: Duplicate reclaimed object ID (1) in class tree for Nada in thread 0
# Looks like you failed 2 tests of 5.