つづいて 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]$