1
0
Fork 0
mirror of https://github.com/rails/execjs synced 2023-03-27 23:21:20 -04:00
execjs/test/test_runtimes.rb

122 lines
3.2 KiB
Ruby
Raw Normal View History

# -*- coding: utf-8 -*-
2011-02-06 19:59:37 -05:00
require "execjs"
require "test/unit"
2011-02-06 20:39:30 -05:00
module TestRuntime
2011-02-06 19:59:37 -05:00
def test_exec
assert_nil @runtime.exec("1")
assert_nil @runtime.exec("return")
assert_nil @runtime.exec("return null")
assert_nil @runtime.exec("return function() {}")
assert_equal 0, @runtime.exec("return 0")
assert_equal true, @runtime.exec("return true")
assert_equal [1, 2], @runtime.exec("return [1, 2]")
assert_equal "hello", @runtime.exec("return 'hello'")
assert_equal({"a"=>1,"b"=>2}, @runtime.exec("return {a:1,b:2}"))
2011-02-10 10:16:11 -05:00
assert_equal "café", @runtime.exec("return 'café'")
2011-05-12 11:24:21 -04:00
assert_equal "", @runtime.exec('return "☃"')
2011-03-10 18:19:18 -05:00
assert_equal "\\", @runtime.exec('return "\\\\"')
2011-02-06 19:59:37 -05:00
end
def test_eval
assert_nil @runtime.eval("")
assert_nil @runtime.eval(" ")
assert_nil @runtime.eval("null")
assert_nil @runtime.eval("function() {}")
assert_equal 0, @runtime.eval("0")
assert_equal true, @runtime.eval("true")
assert_equal [1, 2], @runtime.eval("[1, 2]")
assert_equal "hello", @runtime.eval("'hello'")
assert_equal({"a"=>1,"b"=>2}, @runtime.eval("{a:1,b:2}"))
2011-02-10 10:16:11 -05:00
assert_equal "café", @runtime.eval("'café'")
2011-05-12 11:24:21 -04:00
assert_equal "", @runtime.eval('"☃"')
2011-03-10 18:19:18 -05:00
assert_equal "\\", @runtime.eval('"\\\\"')
2011-02-06 19:59:37 -05:00
end
if defined? Encoding
def test_encoding
utf8 = Encoding.find('UTF-8')
2011-05-12 14:12:38 -04:00
assert_equal utf8, @runtime.exec("return 'hello'").encoding
assert_equal utf8, @runtime.eval("'☃'").encoding
2011-05-12 14:12:38 -04:00
ascii = "'hello'".encode('US-ASCII')
result = @runtime.eval(ascii)
assert_equal "hello", result
assert_equal utf8, result.encoding
assert_raise Encoding::UndefinedConversionError do
binary = "\xde\xad\xbe\xef".force_encoding("BINARY")
@runtime.eval(binary)
end
end
end
2011-02-11 12:39:06 -05:00
def test_compile
context = @runtime.compile("foo = function() { return \"bar\"; }")
assert_equal "bar", context.exec("return foo()")
assert_equal "bar", context.eval("foo()")
2011-02-12 13:27:08 -05:00
assert_equal "bar", context.call("foo")
2011-02-11 12:39:06 -05:00
end
def test_this_is_global_scope
assert_equal true, @runtime.eval("this === (function() {return this})()")
assert_equal true, @runtime.exec("return this === (function() {return this})()")
end
2011-02-06 19:59:37 -05:00
def test_syntax_error
assert_raise ExecJS::RuntimeError do
@runtime.exec(")")
end
end
def test_thrown_exception
assert_raise ExecJS::ProgramError do
@runtime.exec("throw 'hello'")
end
end
end
2011-02-06 20:39:30 -05:00
runtimes = [
"RubyRacer",
"RubyRhino",
2011-04-12 12:28:17 -04:00
"Mustang",
"Node",
"JavaScriptCore",
"Spidermonkey",
"JScript"]
2011-02-09 22:27:56 -05:00
warn "Runtime Support:"
runtimes.each do |name|
runtime = ExecJS::Runtimes.const_get(name)
ok = runtime.available?
2011-02-09 22:27:56 -05:00
warn " %s %-21s %s" %
if ok
2011-02-09 22:27:56 -05:00
["", runtime.name, "Found"]
else
2011-02-09 22:27:56 -05:00
[" ", runtime.name, "Not found"]
end
if ok
klass_name = "Test#{name}"
instance_eval "class ::#{klass_name} < Test::Unit::TestCase; end"
test_suite = Kernel.const_get(klass_name)
test_suite.instance_eval do
2011-02-06 21:35:37 -05:00
include TestRuntime
2011-02-06 20:39:30 -05:00
2011-02-09 22:27:56 -05:00
instance_exec do
define_method(:name) do
runtime.name
end
end
2011-02-06 21:35:37 -05:00
define_method(:setup) do
instance_variable_set(:@runtime, runtime)
end
end
2011-02-06 21:13:24 -05:00
end
end
warn ""