1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::FailWarnings;
use Test::Fatal;
use JavaScript::QuickJS;
my $js = JavaScript::QuickJS->new();
my $date = $js->eval('let mydate = new Date(); mydate');
isa_ok($date, 'JavaScript::QuickJS::Date', 'JS Date() object');
my @settables = qw( Milliseconds Seconds Minutes Hours Date Month FullYear );
my @getters = (
( map { "get$_" }
( map { $_, "UTC$_" }
@settables, 'Day',
),
'TimezoneOffset',
'Time',
),
( map { "to$_" }
'String',
'JSON',
( map { "${_}String" }
qw( UTC GMT ISO Date Time Locale LocaleDate LocaleTime ),
),
),
);
for my $getter (@getters) {
my $perl_got = $date->$getter();
my $js_got = $js->eval("mydate.$getter()");
is($perl_got, $js_got, "$getter() is the same in Perl and JS");
}
my $time_num = (time - 100) * 1000;
my $time_str = $time_num;
$time_str .= '';
for my $time ($time_num, $time_str) {
my $settime_return = $date->setTime($time);
is(
$settime_return,
$date->getTime(),
"setTime() returns as expected",
);
is(
$js->eval("mydate.getTime()"),
$time,
"setTime() has the intended effect",
);
}
for my $settable (@settables) {
my $value_to_set = '' . (($settable eq 'FullYear') ? 1976 : 11);
for my $settable2 ( $settable, "UTC$settable" ) {
my $setter = "set$settable2";
my $getter = "get$settable2";
# print "calling $setter($value_to_set)\n";
my $setter_return = $date->$setter($value_to_set);
is(
$setter_return,
$date->getTime(),
"$setter() returns as expected",
);
is(
$js->eval("mydate.get$settable2()"),
$value_to_set,
"$setter($value_to_set)",
);
# Avoid this bug: https://github.com/bellard/quickjs/issues/238
if ($^O ne 'MSWin32' || $settable ne 'FullYear') {
$date->$setter(-$value_to_set);
is(
$js->eval("mydate.get$settable2()"),
$date->$getter(),
"$setter(-$value_to_set)",
);
}
}
}
done_testing;
1;
|