123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using Jint.Runtime.Interop;
- namespace Jint.Tests.Runtime;
- public class InstanceOfTests
- {
- [Fact]
- public void ShouldSupportInheritanceChainUnderInterop()
- {
- var engine = new Engine();
- engine.SetValue("A", TypeReference.CreateTypeReference(engine, typeof(A)));
- engine.SetValue("AToo", TypeReference.CreateTypeReference(engine, typeof(A)));
- engine.SetValue("B", TypeReference.CreateTypeReference(engine, typeof(B)));
- engine.SetValue("C", TypeReference.CreateTypeReference(engine, typeof(C)));
- Assert.True(engine.Evaluate("A == A").AsBoolean());
- Assert.True(engine.Evaluate("A === A").AsBoolean());
- Assert.True(engine.Evaluate("A == AToo").AsBoolean());
- Assert.True(engine.Evaluate("A === AToo").AsBoolean());
- Assert.True(engine.Evaluate("A.prototype instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("B.prototype instanceof A").AsBoolean());
- Assert.False(engine.Evaluate("A.prototype instanceof B").AsBoolean());
- Assert.True(engine.Evaluate("C.prototype instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("C.prototype instanceof B").AsBoolean());
- var a = new A();
- var b = new B();
- var c = new C();
- engine.SetValue("a", a);
- engine.SetValue("b", b);
- engine.SetValue("c", c);
- Assert.True(engine.Evaluate("a instanceof A").AsBoolean());
- Assert.False(engine.Evaluate("a instanceof B").AsBoolean());
- Assert.False(engine.Evaluate("a instanceof C").AsBoolean());
- Assert.True(engine.Evaluate("b instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("b instanceof B").AsBoolean());
- Assert.False(engine.Evaluate("b instanceof C").AsBoolean());
- Assert.True(engine.Evaluate("c instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("c instanceof B").AsBoolean());
- Assert.True(engine.Evaluate("c instanceof C").AsBoolean());
- Assert.True(engine.Evaluate("new A() instanceof A").AsBoolean());
- Assert.False(engine.Evaluate("new A() instanceof B").AsBoolean());
- Assert.False(engine.Evaluate("new A() instanceof C").AsBoolean());
- Assert.True(engine.Evaluate("new B() instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("new B() instanceof B").AsBoolean());
- Assert.False(engine.Evaluate("new B() instanceof C").AsBoolean());
- Assert.True(engine.Evaluate("new C() instanceof A").AsBoolean());
- Assert.True(engine.Evaluate("new C() instanceof B").AsBoolean());
- Assert.True(engine.Evaluate("new C() instanceof C").AsBoolean());
- }
- public class A { }
- public class B : A { }
- public class C : B { }
- }
|