public void IsNonSharedDisposable_DummyDisposablePolicyUnknown_IsFalse() { using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyUnknown))) using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false)) { var innerPartDefinition = innerCatalog.Parts.First(); var needsWrapper = wrapperCatalog.IsNonSharedDisposable(innerPartDefinition); Assert.IsFalse(needsWrapper); } }
public void ChangingEvent() { using (var aggregate = new AggregateCatalog()) using (var wrapperCatalog = new DisposableWrapperCatalog(aggregate, false)) { var received = false; wrapperCatalog.Changing += (sender, args) => received = true; aggregate.Catalogs.Add(new TypeCatalog()); Assert.IsTrue(received); } }
public void WrapperWithoutMemoryLeak() { using (var typeCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared))) using (var wrapperCatalog = new DisposableWrapperCatalog(typeCatalog, false)) using (var container = new CompositionContainer(wrapperCatalog, false)) { var weak = DisposeAndGetWeak(container); // not sure if all this is necessary, but it seams to force GC GC.Collect(); Thread.Sleep(500); GC.WaitForFullGCApproach(); GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers(); GC.Collect(); DummyDisposablePolicyNonShared target; var isAlive = weak.TryGetTarget(out target); Assert.IsFalse(isAlive, "Checking IsAlive"); } }
public MefDependencyResolver(DisposableWrapperCatalog log) { _catalog = log; }
public void ApplicationCatalog(Type contractType, bool expectedIsDisposableNormal, bool expectedIsDisposableWrapped) { // ApplicationCatalog is a good comprehensive test because it uses the following hierarchy: // + AggregateCatalog // + DirectoryCatalog // + AssemblyCatalog // + TypeCatalog using (var innerCatalog = new ApplicationCatalog()) using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false)) { const ImportCardinality cardinality = ImportCardinality.ExactlyOne; var metadata = new Dictionary<string, object>(); var typeIdentity = AttributedModelServices.GetTypeIdentity(contractType); var contractName = AttributedModelServices.GetContractName(contractType); var definition = new ContractBasedImportDefinition(contractName, typeIdentity, null, cardinality, false, true, CreationPolicy.Any, metadata); var partNormal = innerCatalog.GetExports(definition).Single().Item1.CreatePart(); var partWrapped = wrapperCatalog.GetExports(definition).Single().Item1.CreatePart(); var isDisposableNormal = partNormal is IDisposable; var isDisposableWrapped = partWrapped is IDisposable; Assert.AreEqual(expectedIsDisposableNormal, isDisposableNormal, "Checking Normal Part"); Assert.AreEqual(expectedIsDisposableWrapped, isDisposableWrapped, "Checking Wrapped Part"); } }
public void CreatePart_DummyDisposablePolicyNonShared_IsNotDisposable() { using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared))) using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false)) { var partDefinition = wrapperCatalog.Parts.Single(); var part = partDefinition.CreatePart(); Assert.IsNotInstanceOf<IDisposable>(part); } }
public void CreateWrapper_UsesPreExistingWrapper() { using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared))) using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false)) { var partDefinition1 = wrapperCatalog.Parts.Single(); var partDefinition2 = wrapperCatalog.CreateWrapper(partDefinition1); Assert.AreSame(partDefinition1, partDefinition2); } }