The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More 'tests' => 6;

package Foo; {
    use Object::InsideOut;

use Data::Dumper;
    my @foo :Field :Acc(foo);
    my @bar :Field :Acc(bar);

    my %init_args :InitArgs = (
        foo => {
            field => \@foo,
            def   => 1,
        },
    );

    sub add_to_init_args
    {
        $init_args{bar} = {
            field => \@bar,
            def   => 'bar',
        };
    }

    sub renormalize
    {
        Object::InsideOut::normalize(\%init_args);
    }
}


package main;

my $obj = Foo->new();
is($obj->foo(), 1       => q/Default for 'foo'/);
ok(! $obj->bar()        => q/'bar' not set/);

Foo::add_to_init_args();

$obj = Foo->new();
is($obj->foo(), 1       => q/Default for 'foo'/);
ok(! $obj->bar()        => q/'bar' not set/);

Foo::renormalize();

$obj = Foo->new();
is($obj->foo(), 1       => q/Default for 'foo'/);
is($obj->bar(), 'bar'   => q/Default for 'bar'/);

exit(0);

# EOF