namespace Jint.Tests.Runtime; public class UnicodeTests { private readonly Engine _engine; public UnicodeTests() { _engine = new Engine() .SetValue("log", new Action(Console.WriteLine)) .SetValue("assert", new Action(Assert.True)) .SetValue("equal", new Action(Assert.Equal)); } private void RunTest(string source) { _engine.Execute(source); } [Fact] public void EscapeUnicodeUnits() { var value = _engine.Evaluate(@"var a = '\uD83D\uDE80'; return a;").AsString(); Assert.Equal("🚀", value); } [Fact] public void EscapeUnicodeEscaped() { var value = _engine.Evaluate(@"var a = '\u{1F680}'; return a;").AsString(); Assert.Equal("🚀", value); } [Fact] public void UnicodeIdentifiers() { var value = _engine.Evaluate(@"const hello = 123; return hell\u{6F}").AsNumber(); Assert.Equal(123, value); } [Fact] public void RegexDontParseUnicodeEscapesWithoutFlag() { var value = _engine.Evaluate(@"return /^\u{3}$/.test('uuu')").AsBoolean(); Assert.True(value); } [Fact] public void RegexParseUnicodeEscapesWithFlag() { var value = _engine.Evaluate(@"return /^\u{3}$/u.test('uuu')").AsBoolean(); Assert.False(value); } [Fact] public void RegexParseUnicodeDoesntChangeSource() { var value = _engine.Evaluate(@"return /a\u0041/.source").AsString(); Assert.Equal("a\\u0041", value); } }