App-Easer

 view release on metacpan or  search on metacpan

t/V2/24.hash-sources.t  view on Meta::CPAN

      {
         fcmd1 => 'FOOBAR',
         fcmd2 => 'BAR',
         fcmd3 => 'this!',
         fenv  => 'AHOY',
         ffile => 'this!',
         fdefault => 'this!',
      }
   );

test_run($app,
   [ qw< --fcmd1 FOO foo --fcmd2 BAR bar --fcmd1 FOOBAR --fcmd3 BAZ > ],
   { qw< FENV AHOY > }, 'bar')
   ->no_exceptions('second-level subcommand, one arg up, overriddine, one sub, one subsub env set')
   ->name_is('bar')
   ->conf_is(
      {
         fcmd1 => 'FOOBAR',
         fcmd2 => 'BAR',
         fcmd3 => 'BAZ',
         fenv  => 'AHOY',
         ffile => 'this!',
         fdefault => 'this!',
      }
   );

test_run($app,
   [ qw< --fcmd1 FOO foo --fcmd2 BAR --config >, "$file_prefix.1.json", qw< bar --fcmd1 FOOBAR --fcmd3 BAZ > ],
   { qw< FENV AHOY > }, 'bar')
   ->no_exceptions('second-level subcommand, one arg up, overridden, one sub plus config, one subsub env set, one from config file')
   ->name_is('bar')
   ->conf_is(
      {
         fcmd1 => 'FOOBAR',
         fcmd2 => 'BAR',
         fcmd3 => 'BAZ',
         fenv  => 'AHOY',
         ffile => 'from_general_configuration_file',
         fdefault => 'this!',
         config => "$file_prefix.1.json",
      }
   );

done_testing();

sub logger ($phase) {
   state $enc = JSON::PP->new->ascii->canonical->pretty;
   return sub ($self) {
      my $name = $self->name;
      LocalTester::command_execute($self) if $phase eq 'execute';
      my @stack;
      my $instance = $self;
      while (defined($instance)) {
         my @args = $instance->residual_args;
         my $ch   = $instance->config_hash;
         my $fch  = $instance->_rwn('config') // {};
         unshift @stack, 
            { args => \@args, config => $ch, full_config => $fch };
         $instance = $instance->parent;
      }
      say {*STDERR} "$phase $name " . $enc->encode(\@stack);
   };
}



( run in 1.675 second using v1.01-cache-2.11-cpan-b16cb0d3907 )