つづいて johnson(javascript runtime)をいれてjsのてすと
簡単な例デス
[hirasawa@cent5-64b-40 ruby]$ cat my_execjs.rb #!/usr/local/bin/ruby -Ku # # see https://raw.github.com/sstephenson/execjs/master/test/test_execjs.rb # $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/multi_json-1.0.3/lib/' $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/' $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/johnson-1.2.0/lib/' require 'execjs' require 'johnson' # following part is copy-pasted from # see https://raw.github.com/sstephenson/execjs/master/test/test_execjs.rb # # test_execjs.rb p ExecJS.exec('1 + 1') p ExecJS.eval('1 + 1') [hirasawa@cent5-64b-40 ruby]$
つぎのはコピペ
[hirasawa@cent5-64b-40 ruby]$ pwd /home/hirasawa/ruby [hirasawa@cent5-64b-40 ruby]$ [hirasawa@cent5-64b-40 ruby]$ ls -ltr 合計 12 -rwxrwxr-x 1 hirasawa hirasawa 5404 10月 17 22:41 test_execjs.rb [hirasawa@cent5-64b-40 ruby]$ [hirasawa@cent5-64b-40 ruby]$ gem list --local *** LOCAL GEMS *** execjs (1.2.9) johnson (1.2.0) multi_json (1.0.3) rdtool (0.6.29) rttool (1.0.3.0) ruby-oci8 (2.0.6) rubygems-update (1.8.11) [hirasawa@cent5-64b-40 ruby]$ [hirasawa@cent5-64b-40 ruby]$ cat ./test_execjs.rb #!/usr/local/bin/ruby -Ku # # see https://raw.github.com/sstephenson/execjs/master/test/test_execjs.rb # $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/multi_json-1.0.3/lib/' $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/' $LOAD_PATH << '/usr/local/lib/ruby/gems/1.8/gems/johnson-1.2.0/lib/' require 'open-uri' require 'kconv' require 'net/smtp' require 'openssl' require 'execjs' require 'johnson' # following part is copy-pasted from # see https://raw.github.com/sstephenson/execjs/master/test/test_execjs.rb # # test_execjs.rb require "test/unit" require "execjs/module" begin require "execjs" rescue ExecJS::RuntimeUnavailable => e warn e exit 2 end class TestExecJS < Test::Unit::TestCase def test_runtime_available runtime = ExecJS::ExternalRuntime.new(:command => "nonexistent") assert !runtime.available? runtime = ExecJS::ExternalRuntime.new(:command => "ruby") assert runtime.available? end def test_runtime_assignment original_runtime = ExecJS.runtime runtime = ExecJS::ExternalRuntime.new(:command => "nonexistent") assert_raises(ExecJS::RuntimeUnavailable) { ExecJS.runtime = runtime } assert_equal original_runtime, ExecJS.runtime runtime = ExecJS::ExternalRuntime.new(:command => "ruby") ExecJS.runtime = runtime assert_equal runtime, ExecJS.runtime ensure ExecJS.runtime = original_runtime end def test_context_call context = ExecJS.compile("id = function(v) { return v; }") assert_equal "bar", context.call("id", "bar") end def test_nested_context_call context = ExecJS.compile("a = {}; a.b = {}; a.b.id = function(v) { return v; }") assert_equal "bar", context.call("a.b.id", "bar") end def test_context_call_missing_function context = ExecJS.compile("") assert_raises ExecJS::ProgramError do context.call("missing") end end def test_exec assert_nil ExecJS.exec("1") assert_nil ExecJS.exec("return") assert_nil ExecJS.exec("return null") assert_nil ExecJS.exec("return function() {}") assert_equal 0, ExecJS.exec("return 0") assert_equal true, ExecJS.exec("return true") assert_equal [1, 2], ExecJS.exec("return [1, 2]") assert_equal "hello", ExecJS.exec("return 'hello'") assert_equal({"a"=>1,"b"=>2}, ExecJS.exec("return {a:1,b:2}")) assert_equal "cafe", ExecJS.exec("return 'cafe'") assert_equal "?", ExecJS.exec('return "?"') # assert_equal "?", ExecJS.exec('return "\u2603"') assert_equal "\\", ExecJS.exec('return "\\\\"') end def test_eval assert_nil ExecJS.eval("") assert_nil ExecJS.eval(" ") assert_nil ExecJS.eval("null") assert_nil ExecJS.eval("function() {}") assert_equal 0, ExecJS.eval("0") assert_equal true, ExecJS.eval("true") assert_equal [1, 2], ExecJS.eval("[1, 2]") assert_equal [1, nil], ExecJS.eval("[1, function() {}]") assert_equal "hello", ExecJS.eval("'hello'") assert_equal ["red", "yellow", "blue"], ExecJS.eval("'red yellow blue'.split(' ')") assert_equal({"a"=>1,"b"=>2}, ExecJS.eval("{a:1,b:2}")) assert_equal({"a"=>true}, ExecJS.eval("{a:true,b:function (){}}")) assert_equal "cafe", ExecJS.eval("'cafe'") assert_equal "?", ExecJS.eval('"?"') # assert_equal "?", ExecJS.eval('"\u2603"') assert_equal "\\", ExecJS.eval('"\\\\"') end if defined? Encoding def test_encoding utf8 = Encoding.find('UTF-8') assert_equal utf8, ExecJS.exec("return 'hello'").encoding assert_equal utf8, ExecJS.eval("'?'").encoding ascii = "'hello'".encode('US-ASCII') result = ExecJS.eval(ascii) assert_equal "hello", result assert_equal utf8, result.encoding assert_raise Encoding::UndefinedConversionError do binary = "\xde\xad\xbe\xef".force_encoding("BINARY") ExecJS.eval(binary) end end def test_encoding_compile utf8 = Encoding.find('UTF-8') context = ExecJS.compile("foo = function(v) { return ' ÷' + v; }".encode("ISO8859-15")) assert_equal utf8, context.exec("return foo('hello')").encoding assert_equal utf8, context.eval("foo('?')").encoding ascii = "foo('hello')".encode('US-ASCII') result = context.eval(ascii) assert_equal " ÷hello", result assert_equal utf8, result.encoding assert_raise Encoding::UndefinedConversionError do binary = "\xde\xad\xbe\xef".force_encoding("BINARY") context.eval(binary) end end end def test_compile context = ExecJS.compile("foo = function() { return \"bar\"; }") assert_equal "bar", context.exec("return foo()") assert_equal "bar", context.eval("foo()") assert_equal "bar", context.call("foo") end def test_this_is_global_scope assert_equal true, ExecJS.eval("this === (function() {return this})()") assert_equal true, ExecJS.exec("return this === (function() {return this})()") end def test_commonjs_vars_are_undefined assert ExecJS.eval("typeof module == 'undefined'") assert ExecJS.eval("typeof exports == 'undefined'") assert ExecJS.eval("typeof require == 'undefined'") end def test_compile_large_scripts body = "var foo = 'bar';\n" * 100_000 assert ExecJS.exec("function foo() {\n#{body}\n};\nreturn true") end def test_syntax_error assert_raise ExecJS::RuntimeError do ExecJS.exec(")") end end def test_thrown_exception assert_raise ExecJS::ProgramError do ExecJS.exec("throw 'hello'") end end end [hirasawa@cent5-64b-40 ruby]$ ./test_execjs.rb Loaded suite ./test_execjs Started .....E....... Finished in 1.174982 seconds. 1) Error: test_eval(TestExecJS): ExecJS::ProgramError: unterminated string literal at (none):1 /usr/local/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/execjs/johnson_runtime.rb:27:in `eval' /usr/local/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/execjs/johnson_runtime.rb:98:in `eval' /usr/local/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/execjs/module.rb:23:in `eval' ./test_execjs.rb:99:in `test_eval' 13 tests, 40 assertions, 0 failures, 1 errors [hirasawa@cent5-64b-40 ruby]$