[libdatetime-timezone-perl] 06/23: Use Module::Runtime and Try::Tiny
gregor herrmann
gregoa at debian.org
Wed Apr 15 19:03:21 UTC 2015
This is an automated email from the git hooks/post-receive script.
gregoa pushed a commit to annotated tag v1.77
in repository libdatetime-timezone-perl.
commit a53f35945f6e08a75cea77412bd88cefef3fb71e
Author: Dave Rolsky <autarch at urth.org>
Date: Tue Nov 4 13:27:43 2014 -0600
Use Module::Runtime and Try::Tiny
---
Changes | 2 +
lib/DateTime/TimeZone.pm | 49 +++++++++---------
lib/DateTime/TimeZone/Local.pm | 23 ++++----
lib/DateTime/TimeZone/Local/Android.pm | 20 ++++---
lib/DateTime/TimeZone/Local/Unix.pm | 56 ++++++++++----------
lib/DateTime/TimeZone/Local/Win32.pm | 12 +++--
t/02basic.t | 46 +++++++++++-----
t/04local.t | 84 ++++++++++++++++++++----------
t/06no-dst.t | 21 +++++---
t/07offset-only.t | 15 ++++--
t/09changes.t | 95 ++++++++++++++++++++--------------
t/14invalid-name.t | 25 +++++----
t/17special-names.t | 6 ++-
t/18olson-version-check.t | 13 ++---
14 files changed, 283 insertions(+), 184 deletions(-)
diff --git a/Changes b/Changes
index a1dc533..0db3e2f 100644
--- a/Changes
+++ b/Changes
@@ -3,6 +3,8 @@
- Updated the mapping of Windows -> IANA time zones. Patch by David
Pinkowitz. RT #10025.
+- Replaced Class::Load with Module::Runtime, and replaced eval with Try::Tiny.
+
1.76 2014-10-26
diff --git a/lib/DateTime/TimeZone.pm b/lib/DateTime/TimeZone.pm
index 0d2fac6..f2d7208 100644
--- a/lib/DateTime/TimeZone.pm
+++ b/lib/DateTime/TimeZone.pm
@@ -10,7 +10,9 @@ use DateTime::TimeZone::Floating;
use DateTime::TimeZone::Local;
use DateTime::TimeZone::OffsetOnly;
use DateTime::TimeZone::UTC;
+use Module::Runtime qw( require_module );
use Params::Validate 0.72 qw( validate validate_pos SCALAR ARRAYREF BOOLEAN );
+use Try::Tiny;
use constant INFINITY => 100**1000;
use constant NEG_INFINITY => -1 * ( 100**1000 );
@@ -66,17 +68,19 @@ sub new {
my $real_class = "DateTime::TimeZone::$subclass";
- die "The timezone '$p{name}' in an invalid name.\n"
+ die "The timezone '$p{name}' is an invalid name.\n"
unless $real_class =~ /^\w+(::\w+)*$/;
unless ( $real_class->can('instance') ) {
($real_class) = $real_class =~ m{\A([a-zA-Z0-9_]+(?:::[a-zA-Z0-9_]+)*)\z};
- my $e = do {
- local $@;
- local $SIG{__DIE__};
- eval "require $real_class";
- $@;
+ my $e;
+ try {
+ local $SIG{__DIE__} = undef;
+ require_module($real_class);
+ }
+ catch {
+ $e = $_;
};
if ($e) {
@@ -394,12 +398,13 @@ sub name { $_[0]->{name} }
sub category { ( split /\//, $_[0]->{name}, 2 )[0] }
sub is_valid_name {
- my $tz;
- {
- local $@;
- local $SIG{__DIE__};
- $tz = eval { $_[0]->new( name => $_[1] ) };
- }
+ my $class = shift;
+ my $name = shift;
+
+ my $tz = try {
+ local $SIG{__DIE__} = undef;
+ $class->new( name => $name );
+ };
return $tz && $tz->isa('DateTime::TimeZone') ? 1 : 0;
}
@@ -434,13 +439,11 @@ sub STORABLE_thaw {
# Functions
#
sub offset_as_seconds {
- {
- local $@;
- local $SIG{__DIE__};
- shift if eval { $_[0]->isa('DateTime::TimeZone') };
- }
-
my $offset = shift;
+ $offset = shift if try {
+ local $SIG{__DIE__} = undef;
+ $offset->isa('DateTime::TimeZone');
+ };
return undef unless defined $offset;
@@ -471,13 +474,11 @@ sub offset_as_seconds {
}
sub offset_as_string {
- {
- local $@;
- local $SIG{__DIE__};
- shift if eval { $_[0]->isa('DateTime::TimeZone') };
- }
-
my $offset = shift;
+ $offset = shift if try {
+ local $SIG{__DIE__} = undef;
+ $offset->isa('DateTime::TimeZone');
+ };
return undef unless defined $offset;
return undef unless $offset >= -359999 && $offset <= 359999;
diff --git a/lib/DateTime/TimeZone/Local.pm b/lib/DateTime/TimeZone/Local.pm
index e61d3b5..62e8b87 100644
--- a/lib/DateTime/TimeZone/Local.pm
+++ b/lib/DateTime/TimeZone/Local.pm
@@ -3,9 +3,10 @@ package DateTime::TimeZone::Local;
use strict;
use warnings;
-use Class::Load qw( is_class_loaded load_class try_load_class );
use DateTime::TimeZone;
use File::Spec;
+use Module::Runtime qw( require_module );
+use Try::Tiny;
sub TimeZone {
my $class = shift;
@@ -44,13 +45,16 @@ sub TimeZone {
my $os_name = $subclass{$^O} || $^O;
my $subclass = $class . '::' . $os_name;
- return $subclass if is_class_loaded($subclass);
+ return $subclass if $subclass->can('Methods');
- return $subclass if try_load_class($subclass);
+ return $subclass if try {
+ local $SIG{__DIE__} = undef;
+ require_module($subclass);
+ };
$subclass = $class . '::Unix';
- load_class($subclass);
+ require_module($subclass);
return $subclass;
}
@@ -61,12 +65,11 @@ sub FromEnv {
foreach my $var ( $class->EnvVars() ) {
if ( $class->_IsValidName( $ENV{$var} ) ) {
- my $tz;
- {
- local $@;
- local $SIG{__DIE__};
- $tz = eval { DateTime::TimeZone->new( name => $ENV{$var} ) };
- }
+ my $tz = try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $ENV{$var} );
+ };
+
return $tz if $tz;
}
}
diff --git a/lib/DateTime/TimeZone/Local/Android.pm b/lib/DateTime/TimeZone/Local/Android.pm
index 0365712..5e6bd0b 100644
--- a/lib/DateTime/TimeZone/Local/Android.pm
+++ b/lib/DateTime/TimeZone/Local/Android.pm
@@ -3,6 +3,8 @@ package DateTime::TimeZone::Local::Android;
use strict;
use warnings;
+use Try::Tiny;
+
use parent 'DateTime::TimeZone::Local';
sub Methods {
@@ -19,23 +21,19 @@ sub EnvVars { return 'TZ' }
sub FromGetProp {
my $name = `getprop persist.sys.timezone`;
chomp $name;
- my $tz;
- {
- local $@;
- local $SIG{__DIE__};
- $tz = eval { DateTime::TimeZone->new( name => $name ) };
- }
+ my $tz = try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
return $tz if $tz;
}
# See the link above. Android always defaults to UTC
sub FromDefault {
- my $tz;
- {
- local $@;
- local $SIG{__DIE__};
- $tz = eval { DateTime::TimeZone->new( name => 'UTC' ) };
+ my $tz = try {
+ local $SIG{__DIE__} = undef;
+ $tz = DateTime::TimeZone->new( name => 'UTC' );
}
return $tz if $tz;
diff --git a/lib/DateTime/TimeZone/Local/Unix.pm b/lib/DateTime/TimeZone/Local/Unix.pm
index 0f9beb1..e86a016 100644
--- a/lib/DateTime/TimeZone/Local/Unix.pm
+++ b/lib/DateTime/TimeZone/Local/Unix.pm
@@ -4,6 +4,8 @@ use strict;
use warnings;
use Cwd 3;
+use Try::Tiny;
+
use parent 'DateTime::TimeZone::Local';
sub Methods {
@@ -54,12 +56,10 @@ sub FromEtcLocaltime {
: $parts[$x]
);
- my $tz;
- {
- local $@;
- local $SIG{__DIE__};
- $tz = eval { DateTime::TimeZone->new( name => $name ) };
- }
+ my $tz = try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
return $tz if $tz;
}
@@ -89,10 +89,10 @@ sub _FindMatchingZoneinfoFile {
my $size = -s $file_to_match;
my $real_name;
- local $@;
- local $SIG{__DIE__};
- local $_;
- eval {
+ try {
+ local $SIG{__DIE__} = undef;
+ local $_;
+
File::Find::find(
{
wanted => sub {
@@ -119,12 +119,12 @@ sub _FindMatchingZoneinfoFile {
},
$ZoneinfoDir,
);
+ }
+ catch {
+ die $_ unless ref $_ && $_->{found};
};
- if ($@) {
- return $real_name if ref $@ && $@->{found};
- die $@;
- }
+ return $real_name;
}
sub FromEtcTimezone {
@@ -142,9 +142,10 @@ sub FromEtcTimezone {
return unless $class->_IsValidName($name);
- local $@;
- local $SIG{__DIE__};
- return eval { DateTime::TimeZone->new( name => $name ) };
+ return try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
}
sub FromEtcTIMEZONE {
@@ -168,9 +169,10 @@ sub FromEtcTIMEZONE {
return unless $class->_IsValidName($name);
- local $@;
- local $SIG{__DIE__};
- return eval { DateTime::TimeZone->new( name => $name ) };
+ return try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
}
# RedHat uses this
@@ -184,9 +186,10 @@ sub FromEtcSysconfigClock {
return unless $class->_IsValidName($name);
- local $@;
- local $SIG{__DIE__};
- return eval { DateTime::TimeZone->new( name => $name ) };
+ return try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
}
# this is a separate function so that it can be overridden in the test suite
@@ -213,9 +216,10 @@ sub FromEtcDefaultInit {
return unless $class->_IsValidName($name);
- local $@;
- local $SIG{__DIE__};
- return eval { DateTime::TimeZone->new( name => $name ) };
+ return try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $name );
+ };
}
# this is a separate function so that it can be overridden in the test
diff --git a/lib/DateTime/TimeZone/Local/Win32.pm b/lib/DateTime/TimeZone/Local/Win32.pm
index 481ed60..10cba35 100644
--- a/lib/DateTime/TimeZone/Local/Win32.pm
+++ b/lib/DateTime/TimeZone/Local/Win32.pm
@@ -3,10 +3,11 @@ package DateTime::TimeZone::Local::Win32;
use strict;
use warnings;
-use parent 'DateTime::TimeZone::Local';
-
+use Try::Tiny;
use Win32::TieRegistry ( 'KEY_READ', Delimiter => q{/} );
+use parent 'DateTime::TimeZone::Local';
+
sub Methods { return qw( FromEnv FromRegistry ) }
sub EnvVars { return 'TZ' }
@@ -219,9 +220,10 @@ sub EnvVars { return 'TZ' }
return unless $class->_IsValidName($olson);
- local $@;
- local $SIG{__DIE__};
- return eval { DateTime::TimeZone->new( name => $olson ) };
+ return try {
+ local $SIG{__DIE__} = undef;
+ DateTime::TimeZone->new( name => $olson );
+ };
}
}
diff --git a/t/02basic.t b/t/02basic.t
index f025ced..da272f9 100644
--- a/t/02basic.t
+++ b/t/02basic.t
@@ -1,8 +1,11 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Fatal;
+
+use File::Spec;
+use Try::Tiny;
use lib File::Spec->catdir( File::Spec->curdir, 't' );
@@ -31,18 +34,31 @@ foreach my $name (@names) {
# finish, and it uses up lots of memory too.
if ($is_maintainer) {
my $dt;
- eval { $dt = DateTime->now( time_zone => $name ) };
- is( $@, '', "Can call DateTime->now with $name" );
- eval { $dt->add( years => 50 ) };
- is( $@, '', "Can add 50 years with $name" );
- eval { $dt->subtract( years => 400 ) };
- is( $@, '', "Can subtract 400 years with $name" );
- eval {
+ is(
+ exception { $dt = DateTime->now( time_zone => $name ) },
+ undef,
+ "Can call DateTime->now with $name"
+ );
+
+ is(
+ exception { $dt->add( years => 50 ) },
+ undef,
+ "Can add 50 years with $name"
+ );
+
+ is(
+ exception { $dt->subtract( years => 400 ) },
+ undef,
+ "Can subtract 400 years with $name"
+ );
+
+ try {
$dt = DateTime->new( year => 2000, month => 6, hour => 1,
time_zone => $name );
};
is( $dt->hour, 1, 'make sure that local time is always respected' );
- eval {
+
+ try {
$dt = DateTime->new( year => 2000, month => 12, hour => 1,
time_zone => $name );
};
@@ -123,7 +139,7 @@ my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );
# max year
my $tz = DateTime::TimeZone->new( name => 'America/Los_Angeles' );
- my $dt = eval {
+ my $dt = try {
DateTime->new(
year => $tz->{max_year} + 1,
month => 5,
@@ -189,8 +205,14 @@ my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );
# before the LOCAL_END.
my $dt = DateTime->from_object( object => TestHack->new );
- eval { $dt->set_time_zone('UTC')->set_time_zone('Australia/Sydney') };
- ok( !$@, 'should be able to set time zone' );
+ is(
+ exception {
+ $dt->set_time_zone('UTC')->set_time_zone('Australia/Sydney')
+ },
+ undef,
+ 'should be able to set time zone without error'
+ );
+
ok( $dt->is_dst, 'is_dst should be true' );
}
diff --git a/t/04local.t b/t/04local.t
index 53ffabc..ced590b 100644
--- a/t/04local.t
+++ b/t/04local.t
@@ -9,7 +9,10 @@ use File::Spec::Functions qw( catdir catfile curdir );
use File::Path qw( mkpath );
use File::Temp qw( tempdir );
use Sys::Hostname qw( hostname );
+use Try::Tiny;
+
use Test::More;
+use Test::Fatal;
use lib catdir( curdir(), 't' );
@@ -25,7 +28,7 @@ DateTime::TimeZone::Local->_load_subclass() =~ /Unix$/
my $IsMaintainer = hostname() =~ /houseabsolute|quasar/ && -d '.hg';
my $CanWriteEtcLocaltime = -w '/etc/localtime' && -l '/etc/localtime';
-my $CanSymlink = eval { symlink q{}, q{}; 1 };
+my $CanSymlink = try { symlink q{}, q{}; 1 };
my ($TestFile) = abs_path($0) =~ /(.+)/;
local $ENV{TZ} = undef;
@@ -35,7 +38,7 @@ local $ENV{TZ} = undef;
for my $alias ( sort keys %{ DateTime::TimeZone::links() } ) {
local $ENV{TZ} = $alias;
- my $tz = eval { DateTime::TimeZone::Local->TimeZone() };
+ my $tz = try { DateTime::TimeZone::Local->TimeZone() };
is(
$tz->name(), $links{$alias},
"$alias in \$ENV{TZ} for Local->TimeZone()"
@@ -46,7 +49,7 @@ local $ENV{TZ} = undef;
{
for my $name ( sort DateTime::TimeZone::all_names() ) {
local $ENV{TZ} = $name;
- my $tz = eval { DateTime::TimeZone::Local->TimeZone() };
+ my $tz = try { DateTime::TimeZone::Local->TimeZone() };
is(
$tz->name(), $name,
"$name in \$ENV{TZ} for Local->TimeZone()"
@@ -82,7 +85,7 @@ local $ENV{TZ} = undef;
);
local $ENV{TZ} = 0;
- $tz = eval { DateTime::TimeZone::Local->TimeZone() };
+ $tz = try { DateTime::TimeZone::Local->TimeZone() };
is(
$tz->name(), 'UTC',
"\$ENV{TZ} set to 0 returns UTC"
@@ -107,9 +110,10 @@ local $ENV{TZ} = undef;
{
local $^O = 'DoesNotExist';
my @err;
- local $SIG{__DIE__} = sub { push @err, shift };
-
- eval { DateTime::TimeZone::Local->_load_subclass() };
+ try {
+ local $SIG{__DIE__} = sub { push @err, shift };
+ DateTime::TimeZone::Local->_load_subclass();
+ };
is_deeply(
\@err, [],
@@ -134,9 +138,11 @@ SKIP:
= sub {'/usr/share/zoneinfo/US/Eastern'};
my $tz;
- eval { $tz = DateTime::TimeZone::Local::Unix->FromEtcLocaltime() };
is(
- $@, q{},
+ exception {
+ $tz = DateTime::TimeZone::Local::Unix->FromEtcLocaltime()
+ },
+ undef,
'valid time zone name in /etc/localtime symlink should not die'
);
is(
@@ -158,9 +164,11 @@ SKIP:
local *DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile
= sub {'America/Los_Angeles'};
- eval { $tz = DateTime::TimeZone::Local::Unix->FromEtcLocaltime() };
is(
- $@, q{},
+ exception {
+ $tz = DateTime::TimeZone::Local::Unix->FromEtcLocaltime()
+ },
+ undef,
'fall back to _FindMatchZoneinfoFile if _Readlink finds nothing'
);
is(
@@ -182,11 +190,14 @@ SKIP:
= sub {'US/Eastern'};
my $tz;
- eval { $tz = DateTime::TimeZone::Local::Unix->FromEtcSysconfigClock() };
is(
- $@, q{},
+ exception {
+ $tz = DateTime::TimeZone::Local::Unix->FromEtcSysconfigClock()
+ },
+ undef,
'valid time zone name in /etc/sysconfig/clock should not die'
);
+
is(
$tz->name(), 'America/New_York',
'FromEtcSysConfigClock() with _ReadEtcSysconfigClock returning US/Eastern'
@@ -206,8 +217,14 @@ SKIP:
= sub {'Asia/Tokyo'};
my $tz;
- eval { $tz = DateTime::TimeZone::Local::Unix->FromEtcDefaultInit() };
- is( $@, q{}, 'valid time zone name in /etc/default/init should not die' );
+ is(
+ exception {
+ $tz = DateTime::TimeZone::Local::Unix->FromEtcDefaultInit()
+ },
+ undef,
+ 'valid time zone name in /etc/default/init should not die'
+ );
+
is(
$tz->name(), 'Asia/Tokyo',
'FromEtcDefaultInit with _ReadEtcDefaultInit returning Asia/Tokyo'
@@ -240,9 +257,11 @@ SKIP:
symlink $tz_file => catfile( $etc_dir, 'localtime' );
my $tz;
- eval { $tz = DateTime::TimeZone::Local->TimeZone() };
- is( $@, q{},
- 'valid time zone name in /etc/localtime should not die' );
+ is(
+ exception { $tz = DateTime::TimeZone::Local->TimeZone() },
+ undef,
+ 'valid time zone name in /etc/localtime should not die'
+ );
is(
$tz->name(), 'America/Chicago',
'/etc/localtime should link to America/Chicago'
@@ -259,8 +278,11 @@ SKIP:
= sub {undef};
my $tz;
- eval { $tz = DateTime::TimeZone::Local->TimeZone() };
- is( $@, q{}, 'valid time zone name in /etc/timezone should not die' );
+ is(
+ exception { $tz = DateTime::TimeZone::Local->TimeZone() },
+ undef,
+ 'valid time zone name in /etc/timezone should not die'
+ );
is(
$tz->name(), 'America/Chicago',
'/etc/timezone should contain America/Chicago'
@@ -290,8 +312,11 @@ SKIP:
local *DateTime::TimeZone::Local::Unix::FromEtcTIMEZONE = sub {undef};
my $tz;
- eval { $tz = DateTime::TimeZone::Local->TimeZone() };
- is( $@, q{}, '/etc/default/init contains TZ=Australia/Melbourne' );
+ is(
+ exception { $tz = DateTime::TimeZone::Local->TimeZone() },
+ undef,
+ '/etc/default/init contains TZ=Australia/Melbourne'
+ );
is(
$tz->name(), 'Australia/Melbourne',
'/etc/default/init should contain Australia/Melbourne'
@@ -357,8 +382,11 @@ SKIP:
my $cwd = cwd();
my $tz;
- eval { $tz = DateTime::TimeZone::Local->TimeZone() };
- is( $@, q{}, 'copy of zoneinfo file at /etc/localtime' );
+ is(
+ exception { $tz = DateTime::TimeZone::Local->TimeZone() },
+ undef,
+ 'copy of zoneinfo file at /etc/localtime'
+ );
is(
$tz->name(), 'Asia/Kolkata',
'/etc/localtime should be a copy of Asia/Kolkata'
@@ -381,7 +409,11 @@ SKIP:
local $SIG{__DIE__} = sub { die 'haha'; };
my $tz;
- eval { $tz = DateTime::TimeZone::Local->TimeZone() };
+ is(
+ exception { $tz = DateTime::TimeZone::Local->TimeZone() },
+ undef,
+ 'no exception from DateTime::Time::Local->TimeZone'
+ );
is(
$tz->name(), 'Asia/Kolkata',
'a __DIE__ handler did not interfere with our use of File::Find'
@@ -391,7 +423,7 @@ SKIP:
{
local $ENV{TZ} = 'Australia/Melbourne';
- my $tz = eval { DateTime::TimeZone->new( name => 'local' ) };
+ my $tz = try { DateTime::TimeZone->new( name => 'local' ) };
is(
$tz->name(), 'Australia/Melbourne',
q|DT::TZ->new( name => 'local' )|
diff --git a/t/06no-dst.t b/t/06no-dst.t
index e89de74..dbf93f2 100644
--- a/t/06no-dst.t
+++ b/t/06no-dst.t
@@ -1,8 +1,11 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Fatal;
+
+use File::Spec;
+use Try::Tiny;
use lib File::Spec->catdir( File::Spec->curdir, 't' );
@@ -10,11 +13,17 @@ BEGIN { require 'check_datetime_version.pl' }
{
my $dt = DateTime->now;
- eval { $dt->set_time_zone('Pacific/Tarawa') };
- is( $@, '', "time zone without dst change works" );
+ is(
+ exception { $dt->set_time_zone('Pacific/Tarawa') },
+ undef,
+ 'time zone without dst change works'
+ );
- eval { $dt->set_time_zone('Asia/Dhaka') };
- is( $@, '', "time zone without dst change works (again)" );
+ is(
+ exception { $dt->set_time_zone('Asia/Dhaka') },
+ undef,
+ 'time zone without dst change works (again)'
+ );
}
# This tests a bug that happened when a time zone has a final rule
@@ -38,7 +47,7 @@ BEGIN { require 'check_datetime_version.pl' }
[ 11, 29 ],
[ 11, 30 ],
) {
- my $dt = eval {
+ my $dt = try {
DateTime->new(
year => 2007, month => 12, day => 9,
hour => $hm->[0], minute => $hm->[1],
diff --git a/t/07offset-only.t b/t/07offset-only.t
index 41d16b1..f74f37f 100644
--- a/t/07offset-only.t
+++ b/t/07offset-only.t
@@ -1,16 +1,18 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Fatal;
+
+use File::Spec;
use lib File::Spec->catdir( File::Spec->curdir, 't' );
BEGIN { require 'check_datetime_version.pl' }
-eval { DateTime::TimeZone::OffsetOnly->new( offset => 'bad' ) };
is(
- $@, "Invalid offset: bad\n",
+ exception { DateTime::TimeZone::OffsetOnly->new( offset => 'bad' ) },
+ "Invalid offset: bad\n",
'test that OffsetOnly does not allow invalid offsets'
);
@@ -106,8 +108,11 @@ foreach (@good_offsets) {
}
foreach (@bad_offsets) {
- eval { DateTime::TimeZone::OffsetOnly->new( offset => $_ ) };
- like( $@, qr/Invalid offset/, "$_ is invalid" );
+ like(
+ exception { DateTime::TimeZone::OffsetOnly->new( offset => $_ ) },
+ qr/Invalid offset/,
+ "$_ is invalid"
+ );
}
done_testing();
diff --git a/t/09changes.t b/t/09changes.t
index 8168041..6e68fa4 100644
--- a/t/09changes.t
+++ b/t/09changes.t
@@ -1,8 +1,10 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Fatal;
+
+use File::Spec;
use lib File::Spec->catdir( File::Spec->curdir, 't' );
@@ -151,7 +153,6 @@ BEGIN { require 'check_datetime_version.pl' }
# same tests without using UTC as intermediate
{
- # wrapped in eval because if change data is buggy it can throw exception
my $dt = DateTime->new(
year => 1982, month => 3, day => 28,
hour => 1, minute => 59,
@@ -325,34 +326,42 @@ BEGIN { require 'check_datetime_version.pl' }
}
{
- eval {
- DateTime->new(
- year => 2003, month => 4, day => 6,
- hour => 2, time_zone => 'America/Chicago',
- );
- };
-
- like( $@, qr/Invalid local time .+/, 'exception for invalid time' );
+ like(
+ exception {
+ DateTime->new(
+ year => 2003, month => 4, day => 6,
+ hour => 2, time_zone => 'America/Chicago',
+ );
+ },
+ qr/Invalid local time .+/,
+ 'exception for invalid time'
+ );
- eval {
- DateTime->new(
- year => 2003, month => 4, day => 6,
- hour => 2, minute => 59, second => 59,
- time_zone => 'America/Chicago',
- );
- };
- like( $@, qr/Invalid local time .+/, 'exception for invalid time' );
+ like(
+ exception {
+ DateTime->new(
+ year => 2003, month => 4, day => 6,
+ hour => 2, minute => 59, second => 59,
+ time_zone => 'America/Chicago',
+ );
+ },
+ qr/Invalid local time .+/,
+ 'exception for invalid time'
+ );
}
{
- eval {
- DateTime->new(
- year => 2003, month => 4, day => 6,
- hour => 1, minute => 59, second => 59,
- time_zone => 'America/Chicago',
- );
- };
- ok( !$@, 'no exception for valid time' );
+ is(
+ exception {
+ DateTime->new(
+ year => 2003, month => 4, day => 6,
+ hour => 1, minute => 59, second => 59,
+ time_zone => 'America/Chicago',
+ );
+ },
+ undef,
+ 'no exception for valid time'
+ );
SKIP:
{
@@ -367,9 +376,11 @@ SKIP:
time_zone => 'America/Chicago',
);
- eval { $dt->add( days => 1 ) };
- like( $@, qr/Invalid local time .+/,
- 'exception for invalid time produced via add' );
+ like(
+ exception { $dt->add( days => 1 ) },
+ qr/Invalid local time .+/,
+ 'exception for invalid time produced via add'
+ );
}
}
@@ -379,8 +390,11 @@ SKIP:
hour => 2,
time_zone => 'America/Chicago',
);
- eval { $dt->add( hours => 24 ) };
- ok( !$@, 'add 24 hours should work even if add 1 day does not' );
+ is(
+ exception { $dt->add( hours => 24 ) },
+ undef,
+ 'add 24 hours should work even if add 1 day does not'
+ );
is( $dt->hour, 3, "hour should no be 3" );
}
@@ -429,14 +443,17 @@ SKIP:
}
{
- eval {
- DateTime->new(
- year => 2040, month => 3, day => 11,
- hour => 2, minute => 59, second => 59,
- time_zone => 'America/Chicago',
- );
- };
- like( $@, qr/Invalid local time .+/, 'exception for invalid time' );
+ like(
+ exception {
+ DateTime->new(
+ year => 2040, month => 3, day => 11,
+ hour => 2, minute => 59, second => 59,
+ time_zone => 'America/Chicago',
+ );
+ },
+ qr/Invalid local time .+/,
+ 'exception for invalid time'
+ );
}
{
diff --git a/t/14invalid-name.t b/t/14invalid-name.t
index b27cdfd..36a4d1a 100644
--- a/t/14invalid-name.t
+++ b/t/14invalid-name.t
@@ -1,25 +1,32 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Fatal;
+
+use File::Spec;
use lib File::Spec->catdir( File::Spec->curdir, 't' );
BEGIN { require 'check_datetime_version.pl' }
{
- my $tz = eval {
- DateTime::TimeZone->new(
- name => 'America/Chicago; print "hello, world\n";' );
- };
- like( $@, qr/invalid name/,
- 'make sure potentially malicious code cannot sneak into eval' );
+ like(
+ exception {
+ DateTime::TimeZone->new(
+ name => 'America/Chicago; print "hello, world\n";' );
+ },
+ qr/invalid name/,
+ 'make sure potentially malicious code cannot sneak into eval'
+ );
}
{
- my $tz = eval { DateTime::TimeZone->new( name => 'Bad/Name' ) };
- like( $@, qr/invalid name/, 'make sure bad names are reported' );
+ like(
+ exception { DateTime::TimeZone->new( name => 'Bad/Name' ) },
+ qr/invalid name/,
+ 'make sure bad names are reported'
+ );
}
done_testing();
diff --git a/t/17special-names.t b/t/17special-names.t
index c665489..d05dd3a 100644
--- a/t/17special-names.t
+++ b/t/17special-names.t
@@ -1,16 +1,18 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use File::Spec;
+use Try::Tiny;
+
use lib File::Spec->catdir( File::Spec->curdir, 't' );
BEGIN { require 'check_datetime_version.pl' }
for my $name (
qw( EST MST HST CET EET MET WET EST5EDT CST6CDT MST7MDT PST8PDT )) {
- my $tz = eval { DateTime::TimeZone->new( name => $name ) };
+ my $tz = try { DateTime::TimeZone->new( name => $name ) };
ok( $tz, "got a timezone for name => $name" );
}
diff --git a/t/18olson-version-check.t b/t/18olson-version-check.t
index 9bdf706..84386f1 100644
--- a/t/18olson-version-check.t
+++ b/t/18olson-version-check.t
@@ -1,19 +1,14 @@
use strict;
use warnings;
-use File::Spec;
use Test::More;
+use Test::Requires qw( Test::Output );
-use lib File::Spec->catdir( File::Spec->curdir, 't' );
+use File::Spec;
-BEGIN {
- require 'check_datetime_version.pl';
+use lib File::Spec->catdir( File::Spec->curdir, 't' );
- eval { require Test::Output };
- if ($@) {
- plan skip_all => 'These tests require Test::Output.';
- }
-}
+BEGIN { require 'check_datetime_version.pl' }
{
Test::Output::stderr_like(
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libdatetime-timezone-perl.git
More information about the Pkg-perl-cvs-commits
mailing list