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

=head1 TEST PURPOSE

These tests check export group expansion, specifically the expansion of groups
that use group generators, more specifically when actually imported.

=cut

use Test::More tests => 8;

use lib 't/lib';

use Carp;

BEGIN {
  local $SIG{__DIE__} = sub { Carp::confess @_ };
  use_ok('Test::SubExporter::GroupGen');
  Test::SubExporter::GroupGen->import(
    col1 => { value => 2 },
    -generated => { xyz => 1 },
    -generated => { xyz => 5, -prefix => 'five_' },
    -symbolic  => { xyz => 2 },
  );

  use_ok('Test::SubExporter::GroupGenSubclass');
  Test::SubExporter::GroupGenSubclass->import(
    col1 => { value => 3 },
    -symbolic  => { -prefix => 'subclass_', xyz => 4 },
  );
}

for my $routine (qw(foo bar)) {
  is_deeply(
    main->$routine(),
    {
      name  => $routine,
      class => 'Test::SubExporter::GroupGen',
      group => 'generated',
      arg   => { xyz => 1 }, 
      collection => { col1 => { value => 2 } },
    },
    "generated $routine does what we expect",
  );

  my $five = "five_$routine";
  is_deeply(
    main->$five(),
    {
      name  => $routine,
      class => 'Test::SubExporter::GroupGen',
      group => 'generated',
      arg   => { xyz => 5 }, 
      collection => { col1 => { value => 2 } },
    },
    "generated $five does what we expect",
  );
}

is_deeply(
  main->baz(),
  {
    name  => 'baz',
    class => 'Test::SubExporter::GroupGen',
    group => 'symbolic',
    arg   => { xyz => 2 }, 
    collection => { col1 => { value => 2 } },
  },
  "parent class's generated baz does what we expect",
);

is_deeply(
  main->subclass_baz(),
  {
    name  => 'baz-sc',
    class => 'Test::SubExporter::GroupGenSubclass',
    group => 'symbolic',
    arg   => { xyz => 4 }, 
    collection => { col1 => { value => 3 } },
  },
  "inheriting class's generated baz does what we expect",
);