From 35064ed5e45fb00c211eaf9dd78f88eaadd5de1c Mon Sep 17 00:00:00 2001 From: Ville Lautanala Date: Sun, 5 Jun 2011 21:00:59 +0300 Subject: [PATCH] Encode initial source to UTF-8 when using external runtime --- lib/execjs/external_runtime.rb | 2 +- test/test_runtime.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/execjs/external_runtime.rb b/lib/execjs/external_runtime.rb index 99f359c..258bd34 100644 --- a/lib/execjs/external_runtime.rb +++ b/lib/execjs/external_runtime.rb @@ -5,7 +5,7 @@ module ExecJS class Context def initialize(runtime, source = "") @runtime = runtime - @source = source + @source = source.respond_to?(:encode) ? source.encode("UTF-8") : source end def eval(source, options = {}) diff --git a/test/test_runtime.rb b/test/test_runtime.rb index a983444..fa4052c 100644 --- a/test/test_runtime.rb +++ b/test/test_runtime.rb @@ -53,6 +53,25 @@ class TestRuntime < Test::Unit::TestCase @runtime.eval(binary) end end + + def test_encoding_compile + utf8 = Encoding.find('UTF-8') + + context = @runtime.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") + @runtime.eval(binary) + end + end end def test_compile