Group
Extension

Quiq/t/bin/Quiq/Time.t

#!/usr/bin/env perl

package Quiq::Time::Test;
use base qw/Quiq::Test::Class/;

use v5.10;
use strict;
use warnings;
use utf8;

# -----------------------------------------------------------------------------

sub test_loadClass : Init(1) {
    shift->useOk('Quiq::Time');
}

# -----------------------------------------------------------------------------

sub test_unitTest : Test(59) {
    my $self = shift;

    my ($msg,$ti,$ti2,$obj,$str);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new;
    $msg = 'new(): Zeit-Objekt ohne Argument instantiiert';
    $self->is($ti->dump,'1970-01-01-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(utc=>-1);
    $msg = 'new(): Aufruf mit negativem Epoch-Wert';
    $self->is($ti->dump,'1969-12-31-23-59-59',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,12,28,22,56,37);
    $msg = 'new(): Zeit-Objekt instantiiert';
    $self->is($ti->dump,'2005-12-28-22-56-37',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti2 = $ti->copy;
    $msg = 'copy(): Referenzen sind verschieden';
    $self->isnt($ti2,$ti,$msg);

    $msg = 'copy(): Zeit-Objekte sind gleich';
    $self->is($ti->dump,$ti2->dump,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $obj = $ti->truncate('D');
    $self->is($ti,$obj,'truncate(): liefere Zeit-Objekt');

    $msg = 'truncate(): Zeit-Objekt auf Tag gekürzt';
    $self->is($ti->dump,'2005-12-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28,22,56,37);
    $obj = $ti->addYears(5);
    $msg = 'addYears(): liefere Zeit-Objekt';
    $self->is($ti,$obj,$msg);

    $msg = 'addYears(): 5 Jahre addiert';
    $self->is($ti->dump,'2010-12-28-22-56-37',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28,22,56,37);
    $obj = $ti->addYears(-6);
    $msg = 'addYears(): -6 Jahre addiert';
    $self->is($ti->dump,'1999-12-28-22-56-37',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $obj = $ti->addMonths(1);
    $msg = 'addMonths(): liefere Zeit-Objekt';
    $self->is($ti,$obj,$msg);

    $msg = 'addMonths(): 1 Monat addiert';
    $self->is($ti->dump,'2006-01-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $ti->addMonths(12);
    $msg = 'addMonths(): 12 Monate addiert';
    $self->is($ti->dump,'2006-12-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $ti->addMonths(13);
    $msg = 'addMonths(): 13 Monate addiert';
    $self->is($ti->dump,'2007-01-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $ti->addMonths(-1);
    $msg = 'addMonths(): -1 Monat addiert';
    $self->is($ti->dump,'2005-11-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $ti->addMonths(-12);
    $msg = 'addMonths(): -12 Monate addiert';
    $self->is($ti->dump,'2004-12-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28);
    $ti->addMonths(-24);
    $msg = 'addMonths(): -24 Monate addiert';
    $self->is($ti->dump,'2003-12-28-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28,22,56,37);
    $obj = $ti->addDays(1);
    $msg = 'addDays(): liefere Zeit-Objekt';
    $self->is($ti,$obj,$msg);

    $msg = 'addDays(): 1 Tag addiert';
    $self->is($ti->dump,'2005-12-29-22-56-37',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,28,22,56,37);
    $obj = $ti->add(3,'Y',5,'M',-1,'D');
    $msg = 'add(): liefere Zeit-Objekt';
    $self->is($ti,$obj,$msg);

    $msg = 'add()';
    $self->is($ti->dump,'2009-05-27-22-56-37',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,31);
    $msg = 'dayOfWeek()';
    $self->is($ti->dayOfWeek,6,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,31);
    $msg = 'dayName()';
    $self->is($ti->dayName,'Samstag',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,12,31);
    $msg = 'dayAbbr()';
    $self->is($ti->dayAbbr,'Sa',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2004);
    $msg = 'isLeapyear(): Schaltjahr';
    $self->is($ti->isLeapyear,1,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005);
    $msg = 'isLeapyear(): kein Schaltjahr';
    $self->is($ti->isLeapyear,0,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2004,12);
    $msg = 'daysOfMonth(): Dezember';
    $self->is($ti->daysOfMonth,31,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2004,2);
    $msg = 'daysOfMonth(): Februar, Schaltjahr';
    $self->is($ti->daysOfMonth,29,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti->set(2005,2);
    $msg = 'daysOfMonth(): Februar, kein Schaltjahr';
    $self->is($ti->daysOfMonth,28,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31);
    $msg = 'yyyymmdd(): mit Default-Trenner';
    $self->is($ti->yyyymmdd,'2005-01-31',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31);
    $msg = 'yyyymmdd(): ohne Trenner';
    $self->is($ti->yyyymmdd(''),'20050131',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31);
    $msg = 'yymmdd(): mit Default-Trenner';
    $self->is($ti->yymmdd,'05-01-31',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31);
    $msg = 'yymmdd(): ohne Trenner';
    $self->is($ti->yymmdd(''),'050131',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,1,7,2);
    $msg = 'hhmmss(): mit Default-Trenner';
    $self->is($ti->hhmmss,'01:07:02',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,1,7,2);
    $msg = 'hhmmss(): ohne Trenner';
    $self->is($ti->hhmmss(''),'010702',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,1,7,2);
    $msg = 'setTime(): Stunden';
    $ti->setTime(23);
    $self->is($ti->dump,'2005-01-31-23-07-02',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,1,7,2);
    $msg = 'setTime(): Stunden, Minuten';
    $ti->setTime(23,59);
    $self->is($ti->dump,'2005-01-31-23-59-02',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,1,7,2);
    $msg = 'setTime(): Stunden, Minuten, Sekunden';
    $ti->setTime(23,59,59);
    $self->is($ti->dump,'2005-01-31-23-59-59',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,1,1,0,1);
    $msg = 'addHours(): positives Argument';
    $ti->addHours(5);
    $self->is($ti->dump,'2005-01-01-06-00-01',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,1);
    $msg = 'addHours(): negatives Argument';
    $ti->addHours(-1);
    $self->is($ti->dump,'2004-12-31-23-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,1);
    $msg = 'addSeconds(): positives Argument';
    $ti->addSeconds(61);
    $self->is($ti->dump,'2005-01-01-00-01-01',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,1);
    $msg = 'addSeconds(): negatives Argument';
    $ti->addSeconds(-1);
    $self->is($ti->dump,'2004-12-31-23-59-59',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(dmyhms=>'27.7.2005 7:12:13');
    $msg = 'new(): dmyhms=>"D.M.YYYY H:M:S"';
    $self->is($ti->dump,'2005-07-27-07-12-13',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = eval { Quiq::Time->new(dmyhms=>'x') };
    $msg = 'new(): dmyhms=>"D.M.YYYY H:M:S" - ungültige Angabe';
    $self->like($@,qr/TIME-00002/,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(dmy=>'27.7.2005');
    $msg = 'new(): dmy=>"D.M.YYYY"';
    $self->is($ti->dump,'2005-07-27-00-00-00',$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = eval { Quiq::Time->new(dmyhms=>'39.4.2001') };
    $msg = 'new(): dmy=>"D.M.YYYY" - ungültige Angabe';
    $self->like($@,qr/TIME-00002/,$msg);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # parse
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'27.7.2005');
    $self->is($ti->dump,'2005-07-27-00-00-00','Quiq::Time: deutsches Datum');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'27.7.2005 17:23:56');
    $self->is($ti->dump,'2005-07-27-17-23-56','Quiq::Time: deutsche Zeit');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'7/27/2005');
    $self->is($ti->dump,'2005-07-27-00-00-00','Quiq::Time: amerikanisches Datum');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'7/27/2005 17:23:56');
    $self->is($ti->dump,'2005-07-27-17-23-56','Quiq::Time: amerikanische Zeit');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'2005-07-27');
    $self->is($ti->dump,'2005-07-27-00-00-00','Quiq::Time: ISO Datum');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(parse=>'2005-07-27 17:23:56');
    $self->is($ti->dump,'2005-07-27-17-23-56','Quiq::Time: ISO Zeit');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = eval { Quiq::Time->new(parse=>'1 4 2001') };
    $self->ok($@,'Quiq::Time: Datum kann nicht geparsed werden');

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    $ti = Quiq::Time->new(2005,1,31,12,27,9);
    my ($year,$month,$day,$hour,$minute,$second) = $ti->asArray;
    $self->is($year,2005);
    $self->is($month,1);
    $self->is($day,31);
    $self->is($hour,12);
    $self->is($minute,27);
    $self->is($second,9);
}

# -----------------------------------------------------------------------------

sub test_set : Test(1) {
    my $self = shift;

    my $ti = Quiq::Time->new;
    $ti->set(ymdhms=>'2008-12-5 14:26:11');
    my $val = $ti->yyyymmddhhmmss('+');
    $self->is($val,'2008-12-05+14:26:11','set: ymdhms');
}

# -----------------------------------------------------------------------------

sub test_year : Test(1) {
    my $self = shift;

    my $val = Quiq::Time->new(2005,1,1)->year;
    $self->is($val,2005,'year');
}

# -----------------------------------------------------------------------------

sub test_month : Test(1) {
    my $self = shift;

    my $val = Quiq::Time->new(2005,5,3)->month;
    $self->is($val,5,'month');
}

# -----------------------------------------------------------------------------

sub test_day : Test(1) {
    my $self = shift;

    my $val = Quiq::Time->new(2005,5,3)->day;
    $self->is($val,3,'day');
}

# -----------------------------------------------------------------------------

sub test_dayOfYear : Test(3) {
    my $self = shift;

    my $val = Quiq::Time->new(2005,1,1)->dayOfYear;
    $self->is($val,1);

    $val = Quiq::Time->new(2005,12,31)->dayOfYear;
    $self->is($val,365);

    $val = Quiq::Time->new(2004,12,31)->dayOfYear;
    $self->is($val,366);
}

# -----------------------------------------------------------------------------

sub test_weekOfYear : Test(16) {
    my $self = shift;

    my ($year,$week) = Quiq::Time->new(2017,1,1)->weekOfYear;
    $self->is($year,2016);
    $self->is($week,53);

    ($year,$week) = Quiq::Time->new(2017,1,2)->weekOfYear;
    $self->is($year,2017);
    $self->is($week,1);

    ($year,$week) = Quiq::Time->new(2017,1,11)->weekOfYear;
    $self->is($year,2017);
    $self->is($week,2);

    ($year,$week) = Quiq::Time->new(2016,1,1)->weekOfYear;
    $self->is($year,2015);
    $self->is($week,53);

    ($year,$week) = Quiq::Time->new(2016,1,4)->weekOfYear;
    $self->is($year,2016);
    $self->is($week,1);

    ($year,$week) = Quiq::Time->new(2016,1,11)->weekOfYear;
    $self->is($year,2016);
    $self->is($week,2);

    ($year,$week) = Quiq::Time->new(2015,1,1)->weekOfYear;
    $self->is($year,2015);
    $self->is($week,1);

    ($year,$week) = Quiq::Time->new(2015,1,5)->weekOfYear;
    $self->is($year,2015);
    $self->is($week,2);
}

# -----------------------------------------------------------------------------

sub test_strftime : Test(1) {
    my $self = shift;

    my $val = Quiq::Time->new(utc=>1)->strftime('%F %H:%M:%S');
    $self->is($val,'1970-01-01 00:00:01','strftime');
}

# -----------------------------------------------------------------------------

sub test_yyyymmddhhmmss : Test(2) {
    my $self = shift;

    my $val = Quiq::Time->new(utc=>0)->yyyymmddhhmmss;
    $self->is($val,'1970-01-01 00:00:00','yyyymmddhhmmss: ohne Trenner');

    $val = Quiq::Time->new(utc=>0)->yyyymmddhhmmss('+');
    $self->is($val,'1970-01-01+00:00:00','yyyymmddhhmmss: mit Trenner +');
}

# -----------------------------------------------------------------------------

sub test_yyyymmddxhhmmss : Test(1) {
    my $self = shift;

    my $val = Quiq::Time->new(utc=>1)->yyyymmddxhhmmss;
    $self->is($val,'1970-01-01+00:00:01','yyyymmddxhhmmss');
}

# -----------------------------------------------------------------------------

sub test_monthAbbrToNum : Test(3) {
    my $self = shift;

    my $n = Quiq::Time->monthAbbrToNum('May');
    $self->is($n,5);

    $n = eval{Quiq::Time->monthAbbrToNum('May','de')};
    $self->ok($@);

    $n = Quiq::Time->monthAbbrToNum('Mai','de');
    $self->is($n,5);

}

# -----------------------------------------------------------------------------

package main;
Quiq::Time::Test->runTests;

# eof


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.