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

use Test::More tests => 15; # last test to print
#use Test::More 'no_plan';    # substitute with previous line when done
use Test::Exception;
use Mac::CocoaDialog;

my $module = 'Mac::CocoaDialog';
my $runmod = $module . '::Runner';

my $cocoa;
lives_ok { $cocoa = $module->new(path => $^X) }
'factory constructor lives';
isa_ok($cocoa, $module);

my $bubble;
lives_ok { $bubble = $cocoa->bubble() } 'factory method lives';
isa_ok($bubble, $runmod);
is_deeply([$bubble->command_line()],
   ['bubble'], "runner's command line init");

my @params = (
   text               => 'whatever',
   something_isolated => undef,
   little_list        => [qw( what a mess )],
);
while (@params) {
   my ($k, $v) = splice @params, 0, 2;
   my $rval;
   lives_ok {
      no strict 'refs';
      $rval = $bubble->$k(!defined($v) ? () : ref($v) ? @$v : $v);
   }
   'runner method lives';
   is($rval, $bubble, 'runner method returns runner');
} ## end while (@params)

is_deeply(
   [$bubble->command_line()],
   [
      qw(
        bubble
        --text whatever
        --something-isolated
        --little-list what a mess
        )
   ],
   "runner's command line at the end"
);

is_deeply([$bubble->command_line(qw( ciao a tutti ))],
   [qw( ciao a tutti )], "runner's command line overriding");

is_deeply(
   [$bubble->command_line(ciao => {text => [qw( whatever it is )],})],
   [qw( ciao --text whatever it is )],
   "runner's command line overriding with hash"
);

is_deeply(
   [$bubble->command_line()],
   [
      qw(
        bubble
        --text whatever
        --something-isolated
        --little-list what a mess
        )
   ],
   "runner's internal command line still safe"
);