RavenApiUsageTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using Esprima.Ast;
  2. using Jint.Constraints;
  3. using Jint.Native;
  4. using Jint.Native.Array;
  5. using Jint.Native.Date;
  6. using Jint.Native.Function;
  7. using Jint.Native.Object;
  8. using Jint.Runtime.Descriptors;
  9. using Jint.Runtime.Interop;
  10. namespace Jint.Tests.PublicInterface;
  11. /// <summary>
  12. /// Tests related to functionality that RavenDB needs exposed.
  13. /// </summary>
  14. public class RavenApiUsageTests
  15. {
  16. [Fact]
  17. public void CanBuildCustomScriptFunctionInstance()
  18. {
  19. var engine = new Engine();
  20. var properties = new List<Node>
  21. {
  22. new Property(PropertyKind.Init, new Identifier("field"), false,
  23. new StaticMemberExpression(new Identifier("self"), new Identifier("field"), optional: false), false, false)
  24. };
  25. var functionExp = new FunctionExpression(
  26. new Identifier("functionId"),
  27. NodeList.Create<Node>(new List<Expression> { new Identifier("self") }),
  28. new BlockStatement(NodeList.Create(new List<Statement> { new ReturnStatement(new ObjectExpression(NodeList.Create(properties))) })),
  29. generator: false,
  30. strict: false,
  31. async: false);
  32. var functionObject = new ScriptFunctionInstance(
  33. engine,
  34. functionExp,
  35. engine.CreateNewDeclarativeEnvironment(),
  36. strict: false
  37. );
  38. Assert.NotNull(functionObject);
  39. }
  40. [Fact]
  41. public void CanChangeMaxStatementValue()
  42. {
  43. var engine = new Engine(options => options.MaxStatements(123));
  44. var constraint = engine.FindConstraint<MaxStatementsConstraint>();
  45. Assert.NotNull(constraint);
  46. var oldMaxStatements = constraint.MaxStatements;
  47. constraint.MaxStatements = 321;
  48. Assert.Equal(123, oldMaxStatements);
  49. Assert.Equal(321, constraint.MaxStatements);
  50. }
  51. [Fact]
  52. public void CanConstructArrayInstanceFromDescriptorArray()
  53. {
  54. var descriptors = new[]
  55. {
  56. new PropertyDescriptor(42, writable: false, enumerable: false, configurable: false),
  57. };
  58. var engine = new Engine();
  59. var array = new ArrayInstance(engine, descriptors);
  60. Assert.Equal(1L, array.Length);
  61. Assert.Equal(42, array[0]);
  62. }
  63. [Fact]
  64. public void CanGetPropertyDescriptor()
  65. {
  66. var engine = new Engine();
  67. var obj = new DirectoryInfo("the-path");
  68. var propertyDescriptor = ObjectWrapper.GetPropertyDescriptor(engine, obj, obj.GetType().GetProperty(nameof(DirectoryInfo.Name)));
  69. Assert.Equal("the-path", propertyDescriptor.Value);
  70. }
  71. [Fact]
  72. public void CanInjectConstructedObjects()
  73. {
  74. var engine = new Engine();
  75. var obj = new ObjectInstance(engine);
  76. obj.FastSetDataProperty("name", "test");
  77. var emptyArray = new ArrayInstance(engine);
  78. var array = new ArrayInstance(engine, new object[]
  79. {
  80. JsNumber.Create(1),
  81. JsNumber.Create(2),
  82. JsNumber.Create(3)
  83. });
  84. var date = new DateInstance(engine, new DateTime(2022, 10, 20));
  85. engine.SetValue("obj", obj);
  86. engine.SetValue("emptyArray", emptyArray);
  87. engine.SetValue("array", array);
  88. engine.SetValue("date", date);
  89. Assert.Equal("test", engine.Evaluate("obj.name"));
  90. Assert.Equal(0, engine.Evaluate("emptyArray.length"));
  91. Assert.Equal(1, engine.Evaluate("array.findIndex(x => x === 2)"));
  92. Assert.Equal(2022, engine.Evaluate("date.getFullYear()"));
  93. array.Push(4);
  94. array.Push(new JsValue[] { 5, 6 });
  95. Assert.Equal(4, array[3]);
  96. Assert.Equal(5, array[4]);
  97. Assert.Equal(6, array[5]);
  98. var i = 0;
  99. foreach (var entry in array.GetEntries())
  100. {
  101. Assert.Equal(i.ToString(), entry.Key);
  102. Assert.Equal(i + 1, entry.Value);
  103. i++;
  104. }
  105. Assert.Equal(6, i);
  106. }
  107. }