#! /usr/bin/env perl # -*- perl -*-
Qgoda->new({
quiet
=> 1,
log_stderr
=> 1});
my
$env
= Qgoda::JavaScript::Environment->new(
global
=>
'lib'
);
my
$stdout
=
tie
*STDOUT
,
'MyConsole'
;
my
$stderr
=
tie
*STDERR
,
'MyConsole'
;
eval
{
$env
->run(
"console.log('log')"
);
is
$stdout
->buffer,
"log\n"
;
$env
->run(
"console.error('error')"
);
is
$stderr
->buffer,
"error\n"
;
$env
->run(
"console.warn('warn')"
);
is
$stderr
->buffer,
"warn\n"
;
$env
->run(
"console.log({number: 2304})"
);
is
$stdout
->buffer,
"{number: 2304}\n"
;
$env
->run(
"console.log('this and that')"
);
is
$stdout
->buffer,
"this and that\n"
;
$env
->run(
"console.log('this', 'and', 'that')"
);
is
$stdout
->buffer,
"this and that\n"
;
my
$obj
=
<<EOF;
{abc: 1, cde: 2, nested1: [1, 2, 3, {foo: 'bar'}]}
EOF
$env
->run(
"console.log($obj)"
);
is
$stdout
->buffer,
$obj
;
};
untie
*STDOUT
;
untie
*STDERR
;
if
($@) {
die
$@;
}
done_testing;
sub
TIEHANDLE {
bless
{
__buffer
=>
''
},
shift
;
}
sub
WRITE {
my
(
$self
,
$buffer
,
$length
,
$offset
) =
@_
;
$length
||=
length
$buffer
;
$offset
||= 0;
my
$chunk
=
substr
$buffer
,
$offset
,
$length
;
$self
->{__buffer} .=
$chunk
;
return
length
$chunk
;
}
sub
PRINT {
my
(
$self
,
@chunks
) =
@_
;
return
$self
->WRITE (
join
$,,
@chunks
);
}
sub
CLOSE {
shift
;
}
sub
UNTIE {
shift
->CLOSE;
}
sub
buffer {
my
(
$self
) =
@_
;
my
$buffer
=
$self
->{__buffer};
$self
->{__buffer} =
''
;
return
$buffer
;
}