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