UnicodeTests.cs 1.8 KB

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