r12110 - in /branches/upstream/libtime-fake-perl: ./ current/ current/Changes current/MANIFEST current/META.yml current/Makefile.PL current/README current/lib/ current/lib/Time/ current/lib/Time/Fake.pm current/test.pl

mogaal-guest at users.alioth.debian.org mogaal-guest at users.alioth.debian.org
Sun Jan 6 07:24:31 UTC 2008


Author: mogaal-guest
Date: Sun Jan  6 07:24:31 2008
New Revision: 12110

URL: http://svn.debian.org/wsvn/?sc=1&rev=12110
Log:
[svn-inject] Installing original source of libtime-fake-perl

Added:
    branches/upstream/libtime-fake-perl/
    branches/upstream/libtime-fake-perl/current/
    branches/upstream/libtime-fake-perl/current/Changes
    branches/upstream/libtime-fake-perl/current/MANIFEST
    branches/upstream/libtime-fake-perl/current/META.yml
    branches/upstream/libtime-fake-perl/current/Makefile.PL
    branches/upstream/libtime-fake-perl/current/README
    branches/upstream/libtime-fake-perl/current/lib/
    branches/upstream/libtime-fake-perl/current/lib/Time/
    branches/upstream/libtime-fake-perl/current/lib/Time/Fake.pm
    branches/upstream/libtime-fake-perl/current/test.pl

Added: branches/upstream/libtime-fake-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/Changes?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/Changes (added)
+++ branches/upstream/libtime-fake-perl/current/Changes Sun Jan  6 07:24:31 2008
@@ -1,0 +1,5 @@
+Revision history for Perl extension Time::Fake:
+
+0.10	Fri Jan 04, 2008
+	- Initial release.
+	- see http://perlmonks.org/?node_id=660449 for inspiration

Added: branches/upstream/libtime-fake-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/MANIFEST?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/MANIFEST (added)
+++ branches/upstream/libtime-fake-perl/current/MANIFEST Sun Jan  6 07:24:31 2008
@@ -1,0 +1,7 @@
+Changes
+MANIFEST
+Makefile.PL
+README
+lib/Time/Fake.pm
+test.pl
+META.yml                                 Module meta-data (added by MakeMaker)

Added: branches/upstream/libtime-fake-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/META.yml?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/META.yml (added)
+++ branches/upstream/libtime-fake-perl/current/META.yml Sun Jan  6 07:24:31 2008
@@ -1,0 +1,11 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         Time-Fake
+version:      0.10
+version_from: lib/Time/Fake.pm
+installdirs:  site
+requires:
+    Carp:                          0
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.30_01

Added: branches/upstream/libtime-fake-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/Makefile.PL?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/Makefile.PL (added)
+++ branches/upstream/libtime-fake-perl/current/Makefile.PL Sun Jan  6 07:24:31 2008
@@ -1,0 +1,11 @@
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+    NAME          => 'Time::Fake',
+    VERSION_FROM  => 'lib/Time/Fake.pm',
+    PREREQ_PM     => { 
+                       Carp => 0,
+                     },
+    ABSTRACT_FROM => 'lib/Time/Fake.pm',
+    AUTHOR        => 'Mike Rosulek <mike at mikero.com>',
+);

Added: branches/upstream/libtime-fake-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/README?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/README (added)
+++ branches/upstream/libtime-fake-perl/current/README Sun Jan  6 07:24:31 2008
@@ -1,0 +1,25 @@
+Time::Fake
+==========
+
+INSTALLATION
+
+To install this module type the following:
+
+   perl Makefile.PL
+   make
+   make test
+   make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+   Carp
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2008 Mike Rosulek <mike at mikero.com>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself. 
+

Added: branches/upstream/libtime-fake-perl/current/lib/Time/Fake.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/lib/Time/Fake.pm?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/lib/Time/Fake.pm (added)
+++ branches/upstream/libtime-fake-perl/current/lib/Time/Fake.pm Sun Jan  6 07:24:31 2008
@@ -1,0 +1,235 @@
+package Time::Fake;
+use Carp;
+use strict;
+use vars '$VERSION';
+$VERSION = "0.10";
+
+#####################
+
+my $OFFSET = 0;
+
+*CORE::GLOBAL::time = sub() { CORE::time() + $OFFSET };
+
+*CORE::GLOBAL::localtime = sub(;$) {
+   @_ ? CORE::localtime(@_)
+      : CORE::localtime(CORE::time() + $OFFSET);
+};
+
+*CORE::GLOBAL::gmtime = sub(;$) {
+   @_ ? CORE::gmtime(@_)
+      : CORE::gmtime(CORE::time() + $OFFSET);
+};
+
+sub import {
+    my $pkg = shift;
+    $pkg->offset(shift);
+}
+
+sub offset {
+    my $pkg = shift;
+    return $OFFSET if !@_;
+    
+    my $old_offset = $OFFSET;
+    $OFFSET = _to_offset(shift);
+    return $old_offset;
+}
+
+sub reset {
+    shift->offset(0);
+}
+
+my %mult = (
+    s => 1,
+    m => 60,
+    h => 60*60,
+    d => 60*60*24,
+    M => 60*60*24*30,
+    y => 60*60*24*365,
+);
+
+sub _to_offset {
+    my $t = shift || return 0;
+    
+    if ($t =~ m/^([+-]\d+)([smhdMy]?)$/) {
+        $t = $1 * $mult{ $2 || "s" };
+        
+    } elsif ($t !~ m/\D/) {
+        $t = $t - CORE::time;
+        
+    } else {
+        croak "Invalid time offset: `$t'";
+    }
+    
+    return $t;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Time::Fake - Simulate different times without changing your system clock
+
+=head1 SYNOPSIS
+
+Pretend we are running 1 day in the future:
+
+  use Time::Fake '+1d';
+
+Pretend we are running 1 year in the past:
+
+  use Time::Fake '-1y';
+
+Pretend the script started at epoch time 1234567:
+
+  use Time::Fake 1234567;
+
+See what an existing script would do if run 20 years in the future:
+
+  % perl -MTime::Fake="+20y" test.pl
+
+Run a section of code in a time warp:
+
+  use Time::Fake;
+  
+  # do some setup
+  
+  Time::Fake->offset("+1y");
+  run_tests(); # thinks it's a year ahead
+
+  Time::Fake->reset; # back to the present
+
+=head1 DESCRIPTION
+
+Use this module to achieve the effect of changing your system clock, but
+without actually changing your system clock. It overrides the Perl builtin
+subs C<time>, C<localtime>, and C<gmtime>, causing them to return a
+"faked" time of your choice. From the script's point of view, time still
+flows at the normal rate, but it is just offset as if it were executing
+in the past or present.
+
+You may find this module useful in writing test scripts for code that has
+time-sensitive logic.
+
+=head1 USAGE
+
+=head2 Using and importing:
+
+  use Time::Fake $t;
+
+Is equivalent to:
+
+  use Time::Fake;
+  Time::Fake->offset($t);
+
+See below for arguments to C<offset>. This usage makes it easy to
+fake the time for existing scripts, as in:
+
+  % perl -MTime::Fake=+1y script.pl
+
+=head2 offset
+
+  Time::Fake->offset( [$t] );
+
+C<$t> is either an epoch time, or a relative offset of the following
+form:
+
+  +3    # 3 seconds in the future
+  -3s   # 3 seconds in the past
+  +1h   # 1 hour in the future
+  etc..
+
+Relative offsets must begin with a plus or minus symbol. The supported
+units are:
+
+  s second
+  m minute
+  h hour
+  d day (24 hours)
+  M month (30 days)
+  y year (365 days)
+
+If C<$t> is an epoch time, then C<time>, C<localtime>, and C<gmtime>
+will act as though the the current time (when C<offset> was called) was
+actually at C<$t> epoch seconds.
+Otherwise, the offset C<$t> will be added to the times returned by these
+builtin subs.
+
+When C<$t> is false, C<time>, C<localtime>, C<gmtime>
+remain overridden, but their behavior resets to reflect the actual
+system time.
+
+When C<$t> is omitted, nothing is changed, but C<offset> returns the
+current additive offset (in seconds). Otherwise, its return value is
+the I<previous> offset.
+
+C<offset> may be called several times. However, I<The effect of multiple
+calls is NOT CUMULATIVE.> That is:
+
+  Time::Fake->offset("+1h");
+  Time::Fake->offset("+1h");
+  
+  ## same as
+  # Time::Fake->offset("+1h");
+  
+  ## NOT the same as 
+  # Time::Fake->offset("+2h");
+
+Each call to C<offset> completely cancels out the effect of any
+previous calls. To make the effect cumulative, use the return value
+of calling C<offset> with no arguments:
+
+  Time::Fake->offset("+1h");
+  ...
+  Time::Fake->offset( Time::Fake->offset + 3600 ); # add another hour
+
+=head2 reset
+
+  Time::Fake->reset;
+
+Is the same as:
+
+  Time::Fake->offset(0);
+
+That is, it returns all the affected builtin subs to their
+default behavior -- reporing the actual system time.
+
+=head1 KNOWN CAVEATS
+
+Time::Fake must be loaded at C<BEGIN>-time (e.g., with a standard
+C<use> statement). It must be loaded before perl I<compiles> any code
+that uses C<time>, C<localtime>, or C<gmtime>. Due to inherent
+limitations in overriding builtin subs, any code that was compiled
+before loading Time::Fake will not be affected.
+
+Because the system clock is not being changed, only Perl code that
+uses C<time>, C<localtime>, or C<gmtime> will be fooled about the date.
+In particular, the operating system is not fooled,
+nor are other programs. If your Perl code modifies a file for example,
+the file's modification time will reflect the B<actual> (not faked) time.
+Along the same lines, if your Perl script obtains the time from somewhere
+other than the affected builtins subs (e.g., C<qx/date/>), the actual
+(not faked) time will be reflected.
+
+Time::Fake doesn't affect -M, -A, -C filetest operators in the way you'd
+probably want. These still report the B<actual> (not faked) script start
+time minus file access time.
+
+Time::Fake has not been tested with other modules that override the time
+builtins, e.g., Time::HiRes.
+
+=head1 SEE ALSO
+
+Time::Warp, which uses XS to fool more of Perl.
+
+=head1 AUTHOR
+
+Time::Fake is written by Mike Rosulek E<lt>mike at mikero.comE<gt>. Feel 
+free to contact me with comments, questions, patches, or whatever.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2008 Mike Rosulek. All rights reserved. This module is free 
+software; you can redistribute it and/or modify it under the same terms as Perl 
+itself.

Added: branches/upstream/libtime-fake-perl/current/test.pl
URL: http://svn.debian.org/wsvn/branches/upstream/libtime-fake-perl/current/test.pl?rev=12110&op=file
==============================================================================
--- branches/upstream/libtime-fake-perl/current/test.pl (added)
+++ branches/upstream/libtime-fake-perl/current/test.pl Sun Jan  6 07:24:31 2008
@@ -1,0 +1,27 @@
+use Time::Fake;
+use Test::More 'no_plan';
+use strict;
+
+my $mon = (localtime)[4];
+is(  Time::Fake->offset("+2M"),
+    0,
+    "original offset zero" );
+
+ok( $mon != (localtime)[4],
+    "changes localtime" );
+
+is( 3600*24*60,
+    Time::Fake->reset,
+    "reflects new offset" );
+
+is( (localtime)[4],
+    $mon,
+    "localtime reset" );
+
+my $epoch = 1199547498;
+Time::Fake->offset($epoch);
+is( time,
+    $epoch,
+    "epoch as argument" );
+
+




More information about the Pkg-perl-cvs-commits mailing list