123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using Jint.Native;
- using Jint.Tests.Runtime.Domain;
- using Xunit;
- namespace Jint.Tests.Runtime.ExtensionMethods
- {
- public class ExtensionMethodsTest
- {
- [Fact]
- public void ShouldInvokeObjectExtensionMethod()
- {
- var person = new Person();
- person.Name = "Mickey Mouse";
- person.Age = 35;
- var options = new Options();
- options.AddExtensionMethods(typeof(PersonExtensions));
- var engine = new Engine(options);
- engine.SetValue("person", person);
- var age = engine.Execute("person.MultiplyAge(2)").GetCompletionValue().AsInteger();
- Assert.Equal(70, age);
- }
- [Fact]
- public void ShouldInvokeStringExtensionMethod()
- {
- var options = new Options();
- options.AddExtensionMethods(typeof(CustomStringExtensions));
- var engine = new Engine(options);
- var result = engine.Execute("\"Hello World!\".Backwards()").GetCompletionValue().AsString();
- Assert.Equal("!dlroW olleH", result);
- }
- [Fact]
- public void ShouldInvokeNumberExtensionMethod()
- {
- var options = new Options();
- options.AddExtensionMethods(typeof(DoubleExtensions));
- var engine = new Engine(options);
- var result = engine.Execute("let numb = 27; numb.Add(13)").GetCompletionValue().AsInteger();
- Assert.Equal(40, result);
- }
- [Fact]
- public void ShouldPrioritizingNonGenericMethod()
- {
- var options = new Options();
- options.AddExtensionMethods(typeof(CustomStringExtensions));
- var engine = new Engine(options);
- var result = engine.Execute("\"{'name':'Mickey'}\".DeserializeObject()").GetCompletionValue().ToObject() as dynamic;
- Assert.Equal("Mickey", result.name);
- }
- [Fact]
- public void PrototypeFunctionsShouldNotBeOverridden()
- {
- var engine = new Engine(opts =>
- {
- opts.AddExtensionMethods(typeof(CustomStringExtensions));
- });
- //uses split function from StringPrototype
- var arr = engine.Execute("'yes,no'.split(',')").GetCompletionValue().AsArray();
- Assert.Equal("yes", arr[0]);
- Assert.Equal("no", arr[1]);
- //uses split function from CustomStringExtensions
- var arr2 = engine.Execute("'yes,no'.split(2)").GetCompletionValue().AsArray();
- Assert.Equal("ye", arr2[0]);
- Assert.Equal("s,no", arr2[1]);
- }
- [Fact]
- public void OverridePrototypeFunctions()
- {
- var engine = new Engine(opts =>
- {
- opts.AddExtensionMethods(typeof(OverrideStringPrototypeExtensions));
- });
- //uses the overridden split function from OverrideStringPrototypeExtensions
- var arr = engine.Execute("'yes,no'.split(',')").GetCompletionValue().AsArray();
- Assert.Equal("YES", arr[0]);
- Assert.Equal("NO", arr[1]);
- }
- [Fact]
- public void HasOwnPropertyShouldWorkCorrectlyInPresenceOfExtensionMethods()
- {
- var person = new Person();
- var options = new Options();
- options.AddExtensionMethods(typeof(PersonExtensions));
- var engine = new Engine(options);
- engine.SetValue("person", person);
- var isBogusInPerson = engine.Execute("'bogus' in person").GetCompletionValue().AsBoolean();
- Assert.False(isBogusInPerson);
- var propertyValue = engine.Execute("person.bogus").GetCompletionValue();
- Assert.Equal(JsValue.Undefined, propertyValue);
- }
- }
- }
|