UnicodeTests.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. namespace Jint.Tests.Runtime;
  2. public class UnicodeTests
  3. {
  4. private readonly Engine _engine;
  5. public UnicodeTests()
  6. {
  7. _engine = new Engine()
  8. .SetValue("log", new Action<object>(Console.WriteLine))
  9. .SetValue("assert", new Action<bool>(Assert.True))
  10. .SetValue("equal", new Action<object, object>(Assert.Equal));
  11. }
  12. private void RunTest(string source)
  13. {
  14. _engine.Execute(source);
  15. }
  16. [Fact]
  17. public void EscapeUnicodeUnits()
  18. {
  19. var value = _engine.Evaluate(@"var a = '\uD83D\uDE80'; return a;").AsString();
  20. Assert.Equal("🚀", value);
  21. }
  22. [Fact]
  23. public void EscapeUnicodeEscaped()
  24. {
  25. var value = _engine.Evaluate(@"var a = '\u{1F680}'; return a;").AsString();
  26. Assert.Equal("🚀", value);
  27. }
  28. [Fact]
  29. public void UnicodeIdentifiers()
  30. {
  31. var value = _engine.Evaluate(@"const hello = 123; return hell\u{6F}").AsNumber();
  32. Assert.Equal(123, value);
  33. }
  34. [Fact]
  35. public void RegexDontParseUnicodeEscapesWithoutFlag()
  36. {
  37. var value = _engine.Evaluate(@"return /^\u{3}$/.test('uuu')").AsBoolean();
  38. Assert.True(value);
  39. }
  40. [Fact]
  41. public void RegexParseUnicodeEscapesWithFlag()
  42. {
  43. var value = _engine.Evaluate(@"return /^\u{3}$/u.test('uuu')").AsBoolean();
  44. Assert.False(value);
  45. }
  46. [Fact]
  47. public void RegexParseUnicodeDoesntChangeSource()
  48. {
  49. var value = _engine.Evaluate(@"return /a\u0041/.source").AsString();
  50. Assert.Equal("a\\u0041", value);
  51. }
  52. }