Commit | Line | Data |
16433e2b |
1 | #!perl |
2 | use strict; |
3 | use 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 | |
8 | use Test::More 'no_plan'; |
9 | |
10 | BEGIN { use_ok('Time::Piece'); } |
11 | |
12 | my $class = 'Time::Piece::Twin'; |
13 | |
14 | for my $method (qw(new localtime gmtime)) { |
15 | my $piece = $class->$method; |
16 | isa_ok($piece, $class, "timepiece made via $method"); |
17 | } |
18 | |
19 | { |
20 | my $piece = $class->strptime("2005-01-01", "%Y-%m-%d"); |
21 | isa_ok($piece, $class, "timepiece made via strptime"); |
22 | } |
23 | |
24 | { |
25 | my $piece = $class->new; |
26 | isa_ok($piece, $class, "timepiece made via new (again)"); |
27 | |
28 | my $sum = $piece + 86_400; |
29 | isa_ok($sum, $class, "tomorrow via addition operator"); |
30 | |
31 | my $diff = $piece - 86_400; |
32 | isa_ok($diff, $class, "yesterday via subtraction operator"); |
33 | } |
34 | |
35 | { |
36 | # let's verify that we can use gmtime from T::P without the export magic |
37 | my $piece = Time::Piece::gmtime; |
38 | isa_ok($piece, "Time::Piece", "object created via full-qualified gmtime"); |
39 | isnt(ref $piece, 'Time::Piece::Twin', "it's not a Twin"); |
40 | } |
41 | |
42 | ## below is our doppelgaenger package |
43 | { |
44 | package Time::Piece::Twin; |
45 | use base qw(Time::Piece); |
46 | # this package is identical, but will be ->isa('Time::Piece::Twin'); |
47 | } |
e3db0d81 |
48 | |
49 | { |
50 | my $class = "Time::Piece::NumString"; |
51 | my $piece = $class->strptime ("2006", "%Y"); |
52 | is (2007 - $piece, 1, |
53 | "subtract attempts stringify for unrecognized objects."); |
54 | } |
55 | |
56 | ## Below is a package which only changes the stringify function. |
57 | { |
58 | package Time::Piece::NumString; |
59 | use base qw(Time::Piece); |
60 | use overload '""' => \&_stringify; |
61 | sub _stringify |
62 | { |
63 | my $self = shift; |
64 | return $self->strftime ("%Y"); |
65 | } |
66 | } |