UnicodeTests.cs 1.8 KB

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