ExtensionMethodsTest.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Jint.Native;
  2. using Jint.Tests.Runtime.Domain;
  3. using Xunit;
  4. namespace Jint.Tests.Runtime.ExtensionMethods
  5. {
  6. public class ExtensionMethodsTest
  7. {
  8. [Fact]
  9. public void ShouldInvokeObjectExtensionMethod()
  10. {
  11. var person = new Person();
  12. person.Name = "Mickey Mouse";
  13. person.Age = 35;
  14. var options = new Options();
  15. options.AddExtensionMethods(typeof(PersonExtensions));
  16. var engine = new Engine(options);
  17. engine.SetValue("person", person);
  18. var age = engine.Execute("person.MultiplyAge(2)").GetCompletionValue().AsInteger();
  19. Assert.Equal(70, age);
  20. }
  21. [Fact]
  22. public void ShouldInvokeStringExtensionMethod()
  23. {
  24. var options = new Options();
  25. options.AddExtensionMethods(typeof(CustomStringExtensions));
  26. var engine = new Engine(options);
  27. var result = engine.Execute("\"Hello World!\".Backwards()").GetCompletionValue().AsString();
  28. Assert.Equal("!dlroW olleH", result);
  29. }
  30. [Fact]
  31. public void ShouldInvokeNumberExtensionMethod()
  32. {
  33. var options = new Options();
  34. options.AddExtensionMethods(typeof(DoubleExtensions));
  35. var engine = new Engine(options);
  36. var result = engine.Execute("let numb = 27; numb.Add(13)").GetCompletionValue().AsInteger();
  37. Assert.Equal(40, result);
  38. }
  39. [Fact]
  40. public void ShouldPrioritizingNonGenericMethod()
  41. {
  42. var options = new Options();
  43. options.AddExtensionMethods(typeof(CustomStringExtensions));
  44. var engine = new Engine(options);
  45. var result = engine.Execute("\"{'name':'Mickey'}\".DeserializeObject()").GetCompletionValue().ToObject() as dynamic;
  46. Assert.Equal("Mickey", result.name);
  47. }
  48. [Fact]
  49. public void PrototypeFunctionsShouldNotBeOverridden()
  50. {
  51. var engine = new Engine(opts =>
  52. {
  53. opts.AddExtensionMethods(typeof(CustomStringExtensions));
  54. });
  55. var arr = engine.Execute("'yes,no'.split(',')").GetCompletionValue().AsArray();
  56. Assert.Equal("yes", arr[0]);
  57. Assert.Equal("no", arr[1]);
  58. }
  59. [Fact]
  60. public void HasOwnPropertyShouldWorkCorrectlyInPresenceOfExtensionMethods()
  61. {
  62. var person = new Person();
  63. var options = new Options();
  64. options.AddExtensionMethods(typeof(PersonExtensions));
  65. var engine = new Engine(options);
  66. engine.SetValue("person", person);
  67. var isBogusInPerson = engine.Execute("'bogus' in person").GetCompletionValue().AsBoolean();
  68. Assert.False(isBogusInPerson);
  69. var propertyValue = engine.Execute("person.bogus").GetCompletionValue();
  70. Assert.Equal(JsValue.Undefined, propertyValue);
  71. }
  72. }
  73. }