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

use strict;
use warnings;

use lib qw{ inc };

use Test::More 0.88;
use Astro::App::Satpass2::Test::App;

use Astro::App::Satpass2::Format;

class 'Astro::App::Satpass2::Format';

{
    no warnings qw{ uninitialized };	# Needed by 5.8.8.
    local $ENV{TZ} = undef;	# Tests explicitly assume no TZ.
    method 'new', INSTANTIATE, 'Instantiate';
}

method gmt => 1, TRUE, 'Set gmt to 1';

method 'gmt', 1, 'Confirm gmt set to 1';

method date_format => '%Y-%m-%d', q{Default date_format is '%Y-%m-%d'};

method desired_equinox_dynamical => 0,
    'Default desired_equinox_dynamical is 0';

method local_coord => 'azel_rng',
    q{Default local_coord is 'azel_rng'};

method provider => 'Test provider', TRUE, 'Set provider';

method 'provider', 'Test provider', 'Confirm provider set';

method time_format => '%H:%M:%S', q{Default time_format is '%H:%M:%S'};

method tz => undef, 'Default time zone is undefined';

method tz => 'est5edt', TRUE, 'Set time zone';

method tz => 'est5edt', 'Got back same time zone';

my $expect_time_formatter = eval {
    require DateTime;
    require DateTime::TimeZone;
    'Astro::App::Satpass2::FormatTime::DateTime::Strftime';
} || 'Astro::App::Satpass2::FormatTime::POSIX::Strftime';

method config => decode => 1,
    [
	[ date_format			=> '%Y-%m-%d' ],
	[ desired_equinox_dynamical	=> 0 ],
	[ gmt				=> 1 ],
	[ local_coord			=> 'azel_rng' ],
	[ provider			=> 'Test provider' ],
	[ round_time			=> 1 ],
	[ time_format			=> '%H:%M:%S' ],
	[ time_formatter		=> $expect_time_formatter ],
	[ tz				=> 'est5edt' ],
	[ value_formatter		=>
	    'Astro::App::Satpass2::FormatValue' ],
    ],
    'Dump configuration';

method config => decode => 1, changes => 1,
    [
	[ gmt				=> 1 ],
	[ provider			=> 'Test provider' ],
	[ time_formatter		=> $expect_time_formatter ],
	[ tz				=> 'est5edt' ],
    ],
    'Dump configuration changes';

done_testing;

1;

# ex: set textwidth=72 :