1#!perl 2use strict; 3use warnings; 4 5# This test file exists to show that Time::Piece can be subclassed and that its 6# methods will return objects of the class on which they're called. 7 8use Test::More 'no_plan'; 9 10use lib "t/lib"; 11use Time::Piece::Twin; 12 13BEGIN { use_ok('Time::Piece'); } 14 15my $class = 'Time::Piece::Twin'; 16 17for my $method (qw(new localtime gmtime)) { 18 my $piece = $class->$method; 19 isa_ok($piece, $class, "timepiece made via $method"); 20} 21 22{ 23 my $piece = $class->strptime("2005-01-01", "%Y-%m-%d"); 24 isa_ok($piece, $class, "timepiece made via strptime"); 25} 26 27{ 28 my $piece = $class->new; 29 isa_ok($piece, $class, "timepiece made via new (again)"); 30 31 my $sum = $piece + 86_400; 32 isa_ok($sum, $class, "tomorrow via addition operator"); 33 34 my $diff = $piece - 86_400; 35 isa_ok($diff, $class, "yesterday via subtraction operator"); 36} 37 38{ 39 my $g = $class->gmtime; 40 my $l = $class->localtime; 41 42 #via clone 43 my $l_clone = $class->new($l); 44 isa_ok($l_clone, $class, 'custom localtime via clone'); 45 cmp_ok("$l_clone", 'eq', "$l", 'Clones match'); 46 47 #via clone with gmtime 48 my $g_clone = $class->new($g); 49 isa_ok($g_clone, $class, 'custom gmtime via clone'); 50 cmp_ok("$g_clone", 'eq', "$g", 'Clones match'); 51} 52 53{ 54 # let's verify that we can use gmtime from T::P without the export magic 55 my $piece = Time::Piece::gmtime; 56 isa_ok($piece, "Time::Piece", "object created via full-qualified gmtime"); 57 isnt(ref $piece, 'Time::Piece::Twin', "it's not a Twin"); 58} 59 60 61 62{ 63 my $class = "Time::Piece::NumString"; 64 my $piece = $class->strptime ("2006", "%Y"); 65 is (2007 - $piece, 1, 66 "subtract attempts stringify for unrecognized objects."); 67} 68 69## Below is a package which only changes the stringify function. 70{ 71 package Time::Piece::NumString; 72 use base qw(Time::Piece); 73 use overload '""' => \&_stringify; 74 sub _stringify 75 { 76 my $self = shift; 77 return $self->strftime ("%Y"); 78 } 79} 80