File: date.t

package info (click to toggle)
libjavascript-quickjs-perl 0.21-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,180 kB
  • sloc: ansic: 72,822; javascript: 7,743; perl: 1,065; makefile: 353; sh: 108
file content (101 lines) | stat: -rw-r--r-- 2,269 bytes parent folder | download
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;