update MEF to preview 9
[mcs.git] / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / CompositionContainerExtensibilityTests.cs
blobf088200809bd514d43dbc2187b877b2b59493a78
1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
4 using System;
5 using System.ComponentModel.Composition.Factories;
6 using System.ComponentModel.Composition.Hosting;
7 using System.Linq;
8 using System.UnitTesting;
9 using Microsoft.VisualStudio.TestTools.UnitTesting;
11 namespace System.ComponentModel.Composition
13 [TestClass]
14 public class CompositionContainerExtensibilityTests
16 [TestMethod]
17 public void Dispose_DoesNotThrow()
19 var container = CreateCustomCompositionContainer();
20 container.Dispose();
23 [TestMethod]
24 public void DerivedCompositionContainer_CanExportItself()
26 var container = CreateCustomCompositionContainer();
27 container.AddAndComposeExportedValue<CustomCompositionContainer>(container);
29 Assert.AreSame(container, container.GetExportedValue<CustomCompositionContainer>());
32 [TestMethod]
33 public void ICompositionService_CanBeExported()
35 var container = CreateCustomCompositionContainer();
36 container.AddAndComposeExportedValue<ICompositionService>(container);
38 Assert.AreSame(container, container.GetExportedValue<ICompositionService>());
41 [TestMethod]
42 public void CompositionContainer_CanBeExported()
44 var container = CreateCustomCompositionContainer();
45 container.AddAndComposeExportedValue<CompositionContainer>(container);
47 Assert.AreSame(container, container.GetExportedValue<CompositionContainer>());
50 [TestMethod]
51 public void CanBeCollectedAfterDispose()
53 AggregateExportProvider exportProvider = new AggregateExportProvider();
54 var catalog = new AggregateCatalog(CatalogFactory.CreateDefaultAttributed());
55 var container = new CompositionContainer(catalog, exportProvider);
57 WeakReference weakContainer = new WeakReference(container);
58 container.Dispose();
59 container = null;
61 GC.Collect();
62 GC.WaitForPendingFinalizers();
64 Assert.IsFalse(weakContainer.IsAlive);
66 GC.KeepAlive(exportProvider);
67 GC.KeepAlive(catalog);
70 private CustomCompositionContainer CreateCustomCompositionContainer()
72 return new CustomCompositionContainer();
75 // Type needs to be public otherwise container.GetExportedValue<CustomCompositionContainer>
76 // fails on Silverlight because it cannot construct a Lazy<T,M> factory.
77 public class CustomCompositionContainer : CompositionContainer