This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
0a729d6c827ec17019a22283d54ac329e8bb8c49
[perl5.git] / ext / Time / Piece / t / 06subclass.t
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 }