2
0

UnicodeTests.cs 1.8 KB

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