var unicode_strings = require("unicode_strings"); // This uses slightly different encoding than the Python test // but AFAIK, it is the V8 handling that is the correct one function check(s1, s2) { if (typeof version === 'undefined') { /* Fails for ENGINE=v8 with: * # Fatal error in v8::ToLocalChecked * # Empty MaybeLocal */ for (let i in s1) { if (s1[i] !== s2[i]) console.error(`Character number ${i}, ${s1.charCodeAt(i)} != ${s2.charCodeAt(i)}`); } } if (s1 != s2) { throw new Error(`'${s1}' != '${s2}'`); } } // The C++ string contains an invalid UTF-8 character // V8 transforms it to \ufffd // JSC silently refuses it test_string = "h\ufffdllo w\u00f6rld"; if (typeof print === 'undefined' || typeof version !== 'undefined') { // With ENGINE=v8 we have `print` and `version`. // With ENGINE=node or ENGINE=napi we don't have either. check(unicode_strings.non_utf8_c_str(), test_string); check(unicode_strings.non_utf8_std_string(), test_string); } else { // With ENGINE=jsc we have `print` but not `version`. check(unicode_strings.non_utf8_c_str(), ''); check(unicode_strings.non_utf8_std_string(), ''); }