The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# Copyright 2007, 2008, 2009, 2010, 2011 Kevin Ryde

# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3, or (at your option) any later version.
#
# Chart is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Chart.  If not, see <http://www.gnu.org/licenses/>.


use strict;
use warnings;
use Test::More 0.82 tests => 20;

use lib 't';
use MyTestHelpers;
BEGIN { MyTestHelpers::nowarnings() }

my $have_test_mocktime;
BEGIN {
  # 0.03 for date specified as string
  $have_test_mocktime = eval 'use Test::MockTime 0.03; 1';
  if (! $have_test_mocktime) {
    diag "Test::MockTime not available -- $@";
  }
}

BEGIN {
  if ($have_test_mocktime) {
    # Test::MockTime::DateCalc was with MockTime in version 0.11, now
    # separate.  Either way must load before anything else brings in
    # Date::Calc.
    $have_test_mocktime = eval { require Test::MockTime::DateCalc; 1 };
    if (! $have_test_mocktime) {
      diag "Test::MockTime::DateCalc not available -- $@";
    }
  }
}

use Locale::TextDomain 'App-Chart';

require App::Chart::Suffix::NZ;

if ($have_test_mocktime) {
  diag "Test::MockTime version ", Test::MockTime->VERSION;
  diag "Test::MockTime::DateCalc version ", Test::MockTime::DateCalc->VERSION;
}

#------------------------------------------------------------------------------
{
  require App::Chart::Weblink;
  my $symbol = 'FOO.NZ';
  my @weblink_list = App::Chart::Weblink->links_for_symbol ($symbol);
  ok (@weblink_list >= 1);
  my $good = 1;
  foreach my $weblink (@weblink_list) {
    if (! $weblink->url ($symbol)) { $good = 0; }
  }
  ok ($good);
}

#------------------------------------------------------------------------------
is (App::Chart::TZ->for_symbol ('FOO.NZ'),
    $App::Chart::Suffix::NZ::timezone_newzealand);
is (App::Chart::TZ->for_symbol ('^NZ50'),
    $App::Chart::Suffix::NZ::timezone_newzealand);

#------------------------------------------------------------------------------
is (App::Chart::symbol_source_help ('FOO.NZ'),
    __p('manual-node','New Zealand Stock Exchange'));
is (App::Chart::symbol_source_help ('^NZ50'),
    __p('manual-node','New Zealand Stock Exchange'));


#------------------------------------------------------------------------------
# dm_str_to_nearest_iso()

SKIP: {
  $have_test_mocktime or skip 'due to Test::MockTime not available', 2;

  Test::MockTime::set_fixed_time ('1981-01-01T00:00:00Z');
  ok (App::Chart::Suffix::NZ::dm_str_to_nearest_iso ('1 Nov'),  '1980-11-01');
  ok (App::Chart::Suffix::NZ::dm_str_to_nearest_iso ('20 Jan'), '1981-01-20');
}


#------------------------------------------------------------------------------
# dividend_parse

foreach my $elem ([ [ 'FOO.NZ','5 Dec','5 Jan',
                      '0.55c', 'NZD', '0.0000'],
                    '0.0055', '0.00', undef ],

                  [ [ 'FOO.NZ','5 Dec','5 Jan',
                      '15.000c', 'NZD', '7.3881c'],
                    '0.15', '0.073881', undef ],

                  [ [ 'FOO.NZ','5 Dec','5 Jan',
                      '15.00c', 'GBP', '7.3881c'],
                    undef, undef, '0.15 + 0.073881 GBP' ],

                  [ [ 'FOO.NZ','5 Dec','5 Jan',
                      '15.00c', 'GBP', ''],
                    undef, undef, '0.15 GBP' ],

                 ) {
  my ($args, $want_amount, $want_imputation, $want_note) = @$elem;
  # diag explain $args;

  my $div = App::Chart::Suffix::NZ::dividend_parse(@$args);
  is ($div->{'amount'}, $want_amount, "amount");
  is ($div->{'imputation'}, $want_imputation, "imputation");
  is ($div->{'note'}, $want_note, "note");
}

exit 0;