#!perl
use Test::More tests => 20;
use strict;
use warnings;
use JavaScript;
my $rt1 = JavaScript::Runtime->new();
my $cx1 = $rt1->create_context();
# Undefined and void.. kinda same thing
is($cx1->eval("undefined;"), undef, "Undefined");
is($cx1->eval("function foo() {} foo();"), undef, "Void");
# Integers
is($cx1->eval("-1;"), -1, "Negative integers");
is($cx1->eval("0;"), 0, "Zero integers");
is($cx1->eval("1;"), 1, "Positive integers");
is($cx1->eval("5000000000;"), 5_000_000_000, "Really big integers");
# Doubles
is($cx1->eval("-1.1;"), -1.1, "Negative doubles");
is($cx1->eval("0.0;"), 0.0, "Zero doubles");
is($cx1->eval("1.1;"), 1.1, "Positive doubles");
is($cx1->eval("5000000000.5;"), 5000000000.5, "Really big doubles");
# Strings
is($cx1->eval(q{"";}), "", "Empty string");
is($cx1->eval(q{"foobar";}), "foobar", "Short string");
my $str = "A" x 40000;
is($cx1->eval(qq{"$str";}), $str, "Long string > 32768 chars");
# Booleans
ok($cx1->eval("1 == 1;"), "True");
ok(!$cx1->eval("1 == 0;"), "False");
# Arrays
is_deeply($cx1->eval("v = []; v;"), [], "Empty array");
is_deeply($cx1->eval("v = [1, 2, 3]; v;"), [1, 2, 3], "Array");
# Anonymous objects
is_deeply($cx1->eval("v = {}; v;"), {}, "Empty hash");
is_deeply($cx1->eval("v = {a: 1, b: 2}; v;"), { a => 1, b => 2}, "Hash");
# Complex objects
is_deeply($cx1->eval("v = {a: [1,2,3], b: { c: 1 }}; v;"), { a => [1, 2, 3],
b => { c => 1 }
}, "Complex");