File: export_ref.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 (90 lines) | stat: -rw-r--r-- 1,658 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
#!/usr/bin/env perl

use strict;
use warnings;

use Test::More;
use Test::Deep;
use Test::FailWarnings;
use Data::Dumper;
use Config;

use Types::Serialiser;

use JavaScript::QuickJS;

{
    my $js = JavaScript::QuickJS->new();
    $js->set_globals( foo => sub { } );
}

{
    my $ret;

    {
        my $js = JavaScript::QuickJS->new()->set_globals(
            __return => sub { $ret = shift; () },
        );

        $js->eval('__return( function add1(a) { return 1 + a } )');

        $js->set_globals( __return => undef );
    }

    is(
        $ret->(1),
        2,
        'add1 called without QuickJS instance',
    );

    undef $ret;
}

{
    my $js = JavaScript::QuickJS->new();

    my $struct = $js->eval('[[[]]]');

    is_deeply($struct, [[[]]], 'nested arrays');

    my $gives_deep = $js->eval('a => [[[a]]]');
    my $got = $gives_deep->([]);
    is_deeply($got, [[[[]]]], 'nested arrays from funcref') or diag explain $got;
}

{
    my $ret;

    JavaScript::QuickJS->new()->set_globals(
        __return => sub { $ret = shift; () },
    )->eval(qq/
        __return( {
            add1: a => 1 + a,
            deepen: a => [a],
        } );
    /);

    my @to_deepen = (
        123,
        [],
        [123],
        {},
        { foo => 234 },
    );

    for my $specimen (@to_deepen) {
        my $out = $ret->{'deepen'}->($specimen);

        my $render = do {
            local $Data::Dumper::Terse = 1;
            local $Data::Dumper::Indent = 0;
            Data::Dumper::Dumper($specimen);
        };

        cmp_deeply( $out, [$specimen], "deepen: $render" ) or diag explain $out;
    }

    undef $ret;
}

done_testing;