MapTests.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Jint.Runtime;
  2. namespace Jint.Tests.Runtime;
  3. public class MapTests
  4. {
  5. [Fact]
  6. public void ShouldThrowWhenCalledWithoutNew()
  7. {
  8. var e = Assert.Throws<JavaScriptException>(() => new Engine().Execute("const m = new Map(); Map.call(m,[]);"));
  9. Assert.Equal("Constructor Map requires 'new'", e.Message);
  10. }
  11. [Fact]
  12. public void NegativeZeroKeyConvertsToPositiveZero()
  13. {
  14. const string Script = @"
  15. var map = new Map();
  16. map.set(-0, ""foo"");
  17. var k;
  18. map.forEach(function (value, key) {
  19. k = 1 / key;
  20. });
  21. return k === Infinity && map.get(+0) === ""foo"";";
  22. Assert.True(new Engine().Evaluate(Script).AsBoolean());
  23. }
  24. [Fact]
  25. public void HasProperIteratorPrototypeChain()
  26. {
  27. const string Script = @"
  28. // Iterator instance
  29. var iterator = new Map()[Symbol.iterator]();
  30. // %MapIteratorPrototype%
  31. var proto1 = Object.getPrototypeOf(iterator);
  32. // %IteratorPrototype%
  33. var proto2 = Object.getPrototypeOf(proto1);";
  34. var engine = new Engine();
  35. engine.Execute(Script);
  36. Assert.True(engine.Evaluate("proto2.hasOwnProperty(Symbol.iterator)").AsBoolean());
  37. Assert.True(engine.Evaluate("!proto1.hasOwnProperty(Symbol.iterator)").AsBoolean());
  38. Assert.True(engine.Evaluate("!iterator.hasOwnProperty(Symbol.iterator)").AsBoolean());
  39. Assert.True(engine.Evaluate("iterator[Symbol.iterator]() === iterator").AsBoolean());
  40. }
  41. }