InstanceOfTests.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Jint.Runtime.Interop;
  2. namespace Jint.Tests.Runtime;
  3. public class InstanceOfTests
  4. {
  5. [Fact]
  6. public void ShouldSupportInheritanceChainUnderInterop()
  7. {
  8. var engine = new Engine();
  9. engine.SetValue("A", TypeReference.CreateTypeReference(engine, typeof(A)));
  10. engine.SetValue("AToo", TypeReference.CreateTypeReference(engine, typeof(A)));
  11. engine.SetValue("B", TypeReference.CreateTypeReference(engine, typeof(B)));
  12. engine.SetValue("C", TypeReference.CreateTypeReference(engine, typeof(C)));
  13. Assert.True(engine.Evaluate("A == A").AsBoolean());
  14. Assert.True(engine.Evaluate("A === A").AsBoolean());
  15. Assert.True(engine.Evaluate("A == AToo").AsBoolean());
  16. Assert.True(engine.Evaluate("A === AToo").AsBoolean());
  17. Assert.True(engine.Evaluate("A.prototype instanceof A").AsBoolean());
  18. Assert.True(engine.Evaluate("B.prototype instanceof A").AsBoolean());
  19. Assert.False(engine.Evaluate("A.prototype instanceof B").AsBoolean());
  20. Assert.True(engine.Evaluate("C.prototype instanceof A").AsBoolean());
  21. Assert.True(engine.Evaluate("C.prototype instanceof B").AsBoolean());
  22. var a = new A();
  23. var b = new B();
  24. var c = new C();
  25. engine.SetValue("a", a);
  26. engine.SetValue("b", b);
  27. engine.SetValue("c", c);
  28. Assert.True(engine.Evaluate("a instanceof A").AsBoolean());
  29. Assert.False(engine.Evaluate("a instanceof B").AsBoolean());
  30. Assert.False(engine.Evaluate("a instanceof C").AsBoolean());
  31. Assert.True(engine.Evaluate("b instanceof A").AsBoolean());
  32. Assert.True(engine.Evaluate("b instanceof B").AsBoolean());
  33. Assert.False(engine.Evaluate("b instanceof C").AsBoolean());
  34. Assert.True(engine.Evaluate("c instanceof A").AsBoolean());
  35. Assert.True(engine.Evaluate("c instanceof B").AsBoolean());
  36. Assert.True(engine.Evaluate("c instanceof C").AsBoolean());
  37. Assert.True(engine.Evaluate("new A() instanceof A").AsBoolean());
  38. Assert.False(engine.Evaluate("new A() instanceof B").AsBoolean());
  39. Assert.False(engine.Evaluate("new A() instanceof C").AsBoolean());
  40. Assert.True(engine.Evaluate("new B() instanceof A").AsBoolean());
  41. Assert.True(engine.Evaluate("new B() instanceof B").AsBoolean());
  42. Assert.False(engine.Evaluate("new B() instanceof C").AsBoolean());
  43. Assert.True(engine.Evaluate("new C() instanceof A").AsBoolean());
  44. Assert.True(engine.Evaluate("new C() instanceof B").AsBoolean());
  45. Assert.True(engine.Evaluate("new C() instanceof C").AsBoolean());
  46. }
  47. public class A { }
  48. public class B : A { }
  49. public class C : B { }
  50. }