#!perl
use warnings FATAL => 'all';
use strict;
use Test::More tests => 36;
BEGIN{
require_ok('Ruby');
}
cmp_ok($Ruby::Version, 'ge', '1.8.0', 'version check');
Ruby->import('rb_eval');
ok not defined(&nil);
ok defined(&rb_eval), "core function ('-function' is default)";
Ruby->import('Integer');
ok not defined(&nil);
ok defined(&Integer), "ruby function ('-function' is default)";
Ruby->import(':DEFAULT');
ok defined(&nil);
ok defined(&true);
ok defined(&false);
ok defined(&rb_require), "import :DEFAULT";
Ruby->import(-function => 'String');
ok defined(&String), "-function => 'String'";
ok not Object->isa('Ruby::Object');
Ruby->import(-class => 'Object');
ok Object->isa('Ruby::Object'), "-class => 'Object'";
ok !eval{ Ruby->import(-class => 'Not_a_class'); 1 }, "-class => 'Not_a_class'";
ok not Kernel->isa('Ruby::Object');
Ruby->import(-module => 'Kernel');
ok Kernel->isa('Ruby::Object'), "-module => 'Kernel'";
Ruby->import(-require => 'rbconfig');
Ruby->import(-module => 'Config');
ok(Config->isa('Ruby::Object'), "-require => 'rbconfig'");
Ruby->import(-module => ['Config' => 'RubyConfig']);
ok(RubyConfig->isa('Ruby::Object'), "-module => [ruby => perl]");
Ruby->import(-function => [qw(Integer Int)]);
is(Int(10.5), 10, "-function => [ruby => perl]");
Ruby->import(-function => 'lambda(&)');
ok defined(&lambda);
is prototype(\&lambda), '&', 'import with prototype';
Ruby->import(-function => [lambda => 'lmd(&)']);
ok defined(&lmd), "import r() as p()";
is prototype(\&lmd), '&', "with prototype";
Ruby->import(['lambda(&)' => 'lm']);
is prototype(\&lm), '&', "with prototype (2)";
Ruby->import(["binding"]);
ok defined(&binding);
ok !eval{ Ruby->import(-function => ['lambda($)' => 'lambda(&)']); 1 }, 'prototype mismatch';
ok !eval{ Ruby->import(-function => 'nil()'); 1 }, "doesn't set prototype to core function";
ok not defined(&T::nil);
Ruby->import([nil => 'T::nil']);
ok defined(&T::nil), 'export to another package';
ok !eval{ Ruby->import(-foo); 1}, "undefined import command";
ok(Ruby->import(-variable => '$stdout'), "import global variable");
ok(Ruby->import(-variable => ['$stdin', '$rubyin']), "import \$r as \$p");
ok !eval{ Ruby->import(-base); 1}, "too few arguments";
ok !eval{ Ruby->import(-base => qw(a b)); 1}, "too many arguments";
ok !eval{ Ruby->import(-all => qw(foo)); 1}, "too many arguments";
END{
pass "test end";
}