From 9ef1cd4a992087b1ba44fc58e5b61c8281f29b54 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 11 Dec 2014 10:53:11 -0800 Subject: [PATCH 1/4] Test surrogate pairs --- test/test_execjs.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test_execjs.rb b/test/test_execjs.rb index 957b7b2..b10e39b 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -160,6 +160,18 @@ class TestExecJS < Test end end + def test_surrogate_pairs + # Smiling emoji + str = ["0ff98948"].pack("h*").force_encoding("UTF-8") + assert_equal 2, ExecJS.eval("'#{str}'.length") + assert_equal str, ExecJS.eval("'#{str}'") + + # US flag emoji + str = ["0ff978ab0ff9788b"].pack("h*").force_encoding("UTF-8") + assert_equal 4, ExecJS.eval("'#{str}'.length") + assert_equal str, ExecJS.eval("'#{str}'") + end + def test_compile_anonymous_function context = ExecJS.compile("foo = function() { return \"bar\"; }") assert_equal "bar", context.exec("return foo()") From 64dcfcb070d5377137b366929d2ef1977eaae076 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 11 Dec 2014 11:11:18 -0800 Subject: [PATCH 2/4] Use hex literals --- test/test_execjs.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_execjs.rb b/test/test_execjs.rb index b10e39b..a9cac19 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -101,7 +101,7 @@ class TestExecJS < Test "\\", "café", "☃", - ["0ff98948"].pack("h*").force_encoding("UTF-8"), # Smiling emoji + "\xf0\x9f\x98\x84".force_encoding("UTF-8"), # Smiling emoji [1, 2, 3], [1, [2, 3]], [1, [2, [3]]], @@ -162,12 +162,12 @@ class TestExecJS < Test def test_surrogate_pairs # Smiling emoji - str = ["0ff98948"].pack("h*").force_encoding("UTF-8") + str = "\xf0\x9f\x98\x84".force_encoding("UTF-8") assert_equal 2, ExecJS.eval("'#{str}'.length") assert_equal str, ExecJS.eval("'#{str}'") # US flag emoji - str = ["0ff978ab0ff9788b"].pack("h*").force_encoding("UTF-8") + str = "\xf0\x9f\x87\xba\xf0\x9f\x87\xb8".force_encoding("UTF-8") assert_equal 4, ExecJS.eval("'#{str}'.length") assert_equal str, ExecJS.eval("'#{str}'") end From c09b116d84cddd674c37e7ed388fcc554a3ea015 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 11 Dec 2014 11:40:41 -0800 Subject: [PATCH 3/4] Use unicode notation --- test/test_execjs.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/test_execjs.rb b/test/test_execjs.rb index a9cac19..804179e 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -101,7 +101,8 @@ class TestExecJS < Test "\\", "café", "☃", - "\xf0\x9f\x98\x84".force_encoding("UTF-8"), # Smiling emoji + "\u{1f604}".force_encoding("UTF-8"), # Smiling emoji + "\u{1f1fa}\u{1f1f8}".force_encoding("UTF-8"), # US flag [1, 2, 3], [1, [2, 3]], [1, [2, [3]]], @@ -162,12 +163,12 @@ class TestExecJS < Test def test_surrogate_pairs # Smiling emoji - str = "\xf0\x9f\x98\x84".force_encoding("UTF-8") + str = "\u{1f604}".encode("UTF-8") assert_equal 2, ExecJS.eval("'#{str}'.length") assert_equal str, ExecJS.eval("'#{str}'") # US flag emoji - str = "\xf0\x9f\x87\xba\xf0\x9f\x87\xb8".force_encoding("UTF-8") + str = "\u{1f1fa}\u{1f1f8}".force_encoding("UTF-8") assert_equal 4, ExecJS.eval("'#{str}'.length") assert_equal str, ExecJS.eval("'#{str}'") end From 8bca9cf4c8b8f03012062373318bb0957b40d064 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 11 Dec 2014 12:03:10 -0800 Subject: [PATCH 4/4] Just encode --- test/test_execjs.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_execjs.rb b/test/test_execjs.rb index 804179e..2abb27c 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -101,8 +101,8 @@ class TestExecJS < Test "\\", "café", "☃", - "\u{1f604}".force_encoding("UTF-8"), # Smiling emoji - "\u{1f1fa}\u{1f1f8}".force_encoding("UTF-8"), # US flag + "\u{1f604}".encode("UTF-8"), # Smiling emoji + "\u{1f1fa}\u{1f1f8}".encode("UTF-8"), # US flag [1, 2, 3], [1, [2, 3]], [1, [2, [3]]], @@ -168,7 +168,7 @@ class TestExecJS < Test assert_equal str, ExecJS.eval("'#{str}'") # US flag emoji - str = "\u{1f1fa}\u{1f1f8}".force_encoding("UTF-8") + str = "\u{1f1fa}\u{1f1f8}".encode("UTF-8") assert_equal 4, ExecJS.eval("'#{str}'.length") assert_equal str, ExecJS.eval("'#{str}'") end