2
0

ConstructorSignature.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Jint.Runtime.Interop;
  2. namespace Jint.Tests.Runtime
  3. {
  4. public class ConstructorSignature
  5. {
  6. [Fact]
  7. public void OptionalConstructorParameters()
  8. {
  9. var engine = new Engine();
  10. engine.SetValue("A", TypeReference.CreateTypeReference(engine, typeof(A)));
  11. // ParamArray tests
  12. Assert.Equal("3", engine.Evaluate("new A(1, 2).Result").AsString());
  13. Assert.Equal("3", engine.Evaluate("new A(1, 2, null).Result").AsString());
  14. Assert.Equal("3", engine.Evaluate("new A(1, 2, undefined).Result").AsString());
  15. Assert.Equal("5", engine.Evaluate("new A(1, 2, null, undefined).Result").AsString());
  16. Assert.Equal("9", engine.Evaluate("new A(1, 2, ...'packed').Result").AsString());
  17. Assert.Equal("3", engine.Evaluate("new A(1, 2, []).Result").AsString());
  18. Assert.Equal("7", engine.Evaluate("new A(1, 2, [...'abcd']).Result").AsString());
  19. // Optional parameter tests
  20. Assert.Equal("3", engine.Evaluate("new A(1, 2).Result").AsString());
  21. Assert.Equal("6", engine.Evaluate("new A(1).Result").AsString());
  22. Assert.Equal("7", engine.Evaluate("new A(2, undefined).Result").AsString());
  23. Assert.Equal("8", engine.Evaluate("new A(3, undefined).Result").AsString());
  24. Assert.Equal("ab", engine.Evaluate("new A('a').Result").AsString());
  25. Assert.Equal("ab", engine.Evaluate("new A('a', undefined).Result").AsString());
  26. Assert.Equal("ac", engine.Evaluate("new A('a', 'c').Result").AsString());
  27. Assert.Equal("adc", engine.Evaluate("new A('a', 'd', undefined).Result").AsString());
  28. Assert.Equal("ade", engine.Evaluate("new A('a', 'd', 'e').Result").AsString());
  29. }
  30. public class A
  31. {
  32. public A(int param1, int param2 = 5) => Result = (param1 + param2).ToString();
  33. public A(string param1, string param2 = "b") => Result = string.Concat(param1, param2);
  34. public A(string param1, string param2 = "b", string param3 = "c") => Result = string.Concat(param1, param2, param3);
  35. public A(int param1, int param2, params object[] param3) => Result = (param1 + param2 + param3?.Length).ToString();
  36. public string Result { get; }
  37. }
  38. }
  39. }