public void JsCopyStringUtf16Test() { var str = "Hello, World!"; using (var runtimeHandle = Engine.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null)) { using (var contextHandle = Engine.JsCreateContext(runtimeHandle)) { Engine.JsSetCurrentContext(contextHandle); var stringHandle = Engine.JsCreateStringUtf16(str, (ulong)str.Length); //Get the size var size = Engine.JsCopyStringUtf16(stringHandle, 0, -1, null); if ((int)size * 2 > int.MaxValue) { throw new OutOfMemoryException("Exceeded maximum string length."); } byte[] result = new byte[(int)size * 2]; var written = Engine.JsCopyStringUtf16(stringHandle, 0, -1, result); string resultStr = Encoding.Unicode.GetString(result, 0, result.Length); Assert.True(str == resultStr); stringHandle.Dispose(); } } }