public void TestCreateWrapperClassAndCallQuarantinableMethod()
        {
            qap = new QuarantinableAppDomain("TestOffendingCppLib");
            Assert.IsNotNull(qap);
            var obj = new TestWrapperClass(qap);
            var startInstanceCounter = AppDomainWrapper.InstanceCounter;

            Assert.IsNotNull(obj);
            Assert.AreEqual(startInstanceCounter, AppDomainWrapper.InstanceCounter);
            var initialSelfTestCallCounter = obj.SelfTestCallsCount();

            try
            {
                obj.SelfTest();
                Assert.AreEqual(initialSelfTestCallCounter + 1, obj.SelfTestCallsCount());
                obj.SelfTest();
                Assert.AreEqual(initialSelfTestCallCounter + 2, obj.SelfTestCallsCount());
                obj.ThrowAccessViolation();
                Assert.Fail("Should have thrown quarantinable Exception");
            }
            catch (QuarantinableException)
            {
            }
            qap.UnloadCurrentAppDomain();
            obj = new TestWrapperClass(qap);
            Assert.IsNotNull(obj);
            Assert.AreNotEqual(startInstanceCounter, AppDomainWrapper.InstanceCounter);
            obj.SelfTest();
            Assert.AreEqual(1, obj.SelfTestCallsCount());
        }
        public void TestCreateWrapperClass()
        {
            qap = new QuarantinableAppDomain("TestOffendingCppLib");
            Assert.IsNotNull(qap);
            var obj = new TestWrapperClass(qap);

            Assert.IsNotNull(obj);
        }
        public void TestQuarantinableAppDomainCreateInstance()
        {
            var qap = new QuarantinableAppDomain("TestOffendingCppLib");

            Assert.IsNotNull(qap);
            dynamic obj = qap.CurrentAppDomainWrapper.LinkedAssembly.CreateInstance("TestOffendingCppLib.TesterClass");

            Assert.IsNotNull(obj);
        }
        private void Internal_TestCreateWrapperClassAndSelfTest()
        {
            qap = new QuarantinableAppDomain("TestOffendingCppLib");
            Assert.IsNotNull(qap);
            Assert.IsNotNull(qap.CurrentAppDomainWrapper);
            var obj = new TestWrapperClass(qap);

            Assert.IsNotNull(obj);
            Assert.IsTrue(obj.SelfTest());
            obj = new TestWrapperClass(qap);
            Assert.IsNotNull(obj);
            Assert.IsTrue(obj.SelfTest());
        }
        public void TestCleanup()
        {
            if (_appDomain != null)
            {
                AppDomain.Unload(_appDomain);
                _appDomain = null;
            }

            if (qap != null)
            {
                qap.UnloadCurrentAppDomain();
                qap = null;
            }
        }
        public void TestCreateWrapperClassAndFailCallingUnloadedAppDomain()
        {
            qap = new QuarantinableAppDomain("TestOffendingCppLib");
            Assert.IsNotNull(qap);
            Assert.IsNotNull(qap.CurrentAppDomainWrapper);
            var obj = new TestWrapperClass(qap);

            Assert.IsNotNull(obj);
            Assert.IsTrue(obj.SelfTest());
            qap.UnloadCurrentAppDomain();
            try
            {
                obj.SelfTest();
                Assert.Fail("Should have error out after unloading appDomain");
            }
            catch (AppDomainUnloadedException)
            {
            }
        }
        public void TestCreateQuarantinableAppDomain()
        {
            var qap = new QuarantinableAppDomain("TestOffendingCppLib");

            Assert.IsNotNull(qap);
        }
 public TestWrapperClass(QuarantinableAppDomain appDomain) : base(appDomain)
 {
     _wrapperObject = appDomain.CreateInstance("TestOffendingCppLib.TesterClass");
 }