WeakSetMapTests.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.Collections.Generic;
  3. using Jint.Native;
  4. using Jint.Native.Object;
  5. using Jint.Native.WeakMap;
  6. using Jint.Native.WeakSet;
  7. using Jint.Runtime;
  8. using Xunit;
  9. namespace Jint.Tests.Runtime
  10. {
  11. public class WeakSetMapTests
  12. {
  13. private static readonly Engine _engine = new Engine();
  14. [Fact]
  15. public void WeakMapShouldThrowWhenCalledWithoutNew()
  16. {
  17. var e = Assert.Throws<JavaScriptException>(() => _engine.Execute("{ const m = new WeakMap(); WeakMap.call(m,[]); }"));
  18. Assert.Equal("Constructor WeakMap requires 'new'", e.Message);
  19. }
  20. [Fact]
  21. public void WeakSetShouldThrowWhenCalledWithoutNew()
  22. {
  23. var e = Assert.Throws<JavaScriptException>(() => _engine.Execute("{ const s = new WeakSet(); WeakSet.call(s,[]); }"));
  24. Assert.Equal("Constructor WeakSet requires 'new'", e.Message);
  25. }
  26. public static IEnumerable<object[]> PrimitiveKeys = new TheoryData<JsValue>
  27. {
  28. JsValue.Null,
  29. JsValue.Undefined,
  30. 0,
  31. 100.04,
  32. double.NaN,
  33. "hello",
  34. true,
  35. new JsSymbol("hello")
  36. };
  37. [Theory]
  38. [MemberData(nameof(PrimitiveKeys))]
  39. public void WeakSetAddShouldThrowForPrimitiveKey(JsValue key) {
  40. var weakSet = new WeakSetInstance(_engine);
  41. var e = Assert.Throws<JavaScriptException>(() => weakSet.WeakSetAdd(key));
  42. Assert.StartsWith("WeakSet value must be an object, got ", e.Message);
  43. Assert.False(weakSet.WeakSetHas(key));
  44. }
  45. [Theory]
  46. [MemberData(nameof(PrimitiveKeys))]
  47. public void WeakMapSetShouldThrowForPrimitiveKey(JsValue key) {
  48. var weakMap = new WeakMapInstance(_engine);
  49. var e = Assert.Throws<JavaScriptException>(() => weakMap.WeakMapSet(key, new ObjectInstance(_engine)));
  50. Assert.StartsWith("WeakMap key must be an object, got ", e.Message);
  51. Assert.False(weakMap.WeakMapHas(key));
  52. }
  53. }
  54. }