# vim: set ft=perl :
use strict;
use warnings;
use Test::More tests => 977;
use_ok('Java::JCR');
use_ok('Java::JCR::Jackrabbit');
my $repository = Java::JCR::Jackrabbit->new;
ok($repository);
my $session = $repository->login(
Java::JCR::SimpleCredentials->new('username', 'password'));
ok($session);
my $root = $session->get_root_node;
ok($root);
my $node = $root->has_node('dates')
? $root->get_node('dates')
: $root->add_node('dates', 'nt:unstructured');
my $has_datetime;
my $has_class_date;
my @timezones = qw(
Africa/Cairo
America/Chicago
Asia/Bangkok
Atlantic/Bermuda
Australia/Sydney
Europe/Moscow
Indian/Mayotte
Pacific/Midway
UTC
);
my @hours = (0, 5, 10, 15, 20, 23);
SKIP: {
eval 'use DateTime';
skip 'DateTime is not installed.', scalar(@timezones)*scalar(@hours) if $@;
$has_datetime++;
for my $tz (@timezones) {
my $tzname = $tz;
$tzname =~ s/\W/_/;
for my $h (@hours) {
my $datetime = DateTime->new(
year => 1978,
month => 1,
day => 10,
hour => $h,
minute => 42,
second => 57,
time_zone => $tz,
);
my $property = $node->set_property(
"datetime_${tzname}_$h" => $datetime
);
ok($property, "DateTime $tz $h set");
}
}
}
SKIP: {
eval 'use Class::Date';
skip 'Class::Date is not installed.', scalar(@timezones)*scalar(@hours)
if $@;
$has_class_date++;
for my $tz (@timezones) {
my $tzname = $tz;
$tzname =~ s/\W/_/;
for my $h (@hours) {
my $class_date = Class::Date->new(
[ 1978, 1, 10, $h, 42, 57 ], $tz
);
my $property = $node->set_property(
"class_date_${tzname}_$h" => $class_date
);
ok($property, "Class::Date $tz $h set");
}
}
}
$session->save;
$node = $root->get_node('dates');
SKIP: {
skip 'DateTime is not installed.', 8*scalar(@timezones)*scalar(@hours)
if !$has_datetime;
for my $tz (@timezones) {
my $tzname = $tz;
$tzname =~ s/\W/_/;
for my $h (@hours) {
my $property = $node->get_property("datetime_${tzname}_$h");
my $datetime = $property->get_date('DateTime');
ok($datetime, "DateTime $tz $h get");
is($datetime->year, 1978, "DateTime $tz $h year");
is($datetime->month, 1, "DateTime $tz $h month");
is($datetime->day, 10, "DateTime $tz $h day");
is($datetime->hour, $h, "DateTime $tz $h hour");
is($datetime->minute, 42, "DateTime $tz $h minute");
is($datetime->second, 57, "DateTime $tz $h second");
is($datetime->time_zone->name, $tz, "DateTime $tz $h tz");
}
}
}
SKIP: {
skip 'Class::Date is not installed.', 8*scalar(@timezones)*scalar(@hours)
if !$has_class_date;
for my $tz (@timezones) {
my $tzname = $tz;
$tzname =~ s/\W/_/;
for my $h (@hours) {
my $property = $node->get_property("class_date_${tzname}_$h");
my $class_date = $property->get_date('Class::Date');
ok($class_date, "Class::Date $tz $h get");
is($class_date->year, 1978, "Class::Date $tz $h year");
is($class_date->month, 1, "Class::Date $tz $h month");
is($class_date->day, 10, "Class::Date $tz $h day");
is($class_date->hour, $h, "Class::Date $tz $h hour");
is($class_date->minute, 42, "Class::Date $tz $h minute");
is($class_date->second, 57, "Class::Date $tz $h second");
is($class_date->tz, $tz, "Class::Date $tz $h tz");
}
}
}
$node->remove;
$root->save;
$session->logout;