update MEF to preview 9
[mcs.git] / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ExportDefinitionTests.cs
blobcb89ebf2945213e23a1fef293cd46f75ac5c3431
1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
4 using System;
5 using System.Collections.Generic;
6 using System.ComponentModel.Composition;
7 using Microsoft.VisualStudio.TestTools.UnitTesting;
8 using System.UnitTesting;
9 using System.ComponentModel.Composition.Factories;
10 using System.ComponentModel.Composition.Primitives;
12 namespace System.ComponentModel.Composition
14 [TestClass]
15 public class ExportDefinitionTests
17 [TestMethod]
18 public void Constructor1_ShouldSetMetadataPropertyToEmptyDictionary()
20 var definition = new DerivedExportDefinition();
22 EnumerableAssert.IsEmpty(definition.Metadata);
25 [TestMethod]
26 public void Constructor1_ShouldSetMetadataPropertyToReadOnlyDictionary()
28 var definition = new DerivedExportDefinition();
30 ExceptionAssert.Throws<NotSupportedException>(() =>
32 definition.Metadata["Value"] = "Value";
33 });
36 [TestMethod]
37 public void Constructor2_NullAsContractNameArgument_ShouldThrowArgumentNull()
39 ExceptionAssert.ThrowsArgument<ArgumentNullException>("contractName", () =>
41 new ExportDefinition((string)null, new Dictionary<string, object>());
42 });
45 [TestMethod]
46 public void Constructor2_EmptyStringAsContractNameArgument_ShouldThrowArgument()
48 ExceptionAssert.ThrowsArgument<ArgumentException>("contractName", () =>
50 new ExportDefinition(string.Empty, new Dictionary<string, object>());
51 });
54 [TestMethod]
55 public void Constructor2_ValueAsContractNameArgument_ShouldSetContractNameProperty()
57 var expectations = Expectations.GetContractNames();
59 foreach (var e in expectations)
61 var definition = new ExportDefinition(e, new Dictionary<string, object>());
63 Assert.AreEqual(e, definition.ContractName);
67 [TestMethod]
68 public void Constructor2_NullAsMetadataArgument_ShouldSetMetadataPropertyToEmptyDictionary()
70 var definition = new ExportDefinition("Contract", (IDictionary<string, object>)null); ;
72 EnumerableAssert.IsEmpty(definition.Metadata);
75 [TestMethod]
76 public void Constructor2_NullAsMetadataArgument_ShouldSetMetadataPropertyToReadOnlyDictionary()
78 var definition = new ExportDefinition("Contract", (IDictionary<string, object>)null);
80 ExceptionAssert.Throws<NotSupportedException>(() =>
82 definition.Metadata["Value"] = "Value";
83 });
86 [TestMethod]
87 public void Constructor2_WritableDictionaryAsMetadataArgument_ShouldSetMetadataPropertyToReadOnlyDictionary()
89 var definition = new ExportDefinition("Contract", new Dictionary<string, object>());
91 ExceptionAssert.Throws<NotSupportedException>(() =>
93 definition.Metadata["Value"] = "Value";
94 });
97 [TestMethod]
98 public void Constructor2_DictionaryAsMetadataArgument_ShouldSetMetadataProperty()
100 var expectations = Expectations.GetMetadata();
102 foreach (var e in expectations)
104 var definition = new ExportDefinition("Contract", e);
106 EnumerableAssert.AreEqual(e, definition.Metadata);
110 [TestMethod]
111 public void ContractName_WhenNotOverridden_ShouldThrowNotImplemented()
113 var definition = new DerivedExportDefinition();
115 ExceptionAssert.Throws<NotImplementedException>(() =>
117 var contractName = definition.ContractName;
121 [TestMethod]
122 public void ToString_WhenContractNameNotOverridden_ShouldThrowNotImplemented()
124 var definition = new DerivedExportDefinition();
126 ExceptionAssert.Throws<NotImplementedException>(() =>
128 definition.ToString();
132 [TestMethod]
133 public void ToString_ShouldReturnContractNameProperty()
135 var expectations = Expectations.GetContractNames();
137 foreach (var e in expectations)
139 var definition = new ExportDefinition(e, new Dictionary<string, object>());
141 Assert.AreEqual(e, definition.ToString());
145 [TestMethod]
146 public void ToString_ShouldReturnOverriddenContractNameProperty()
148 var expectations = Expectations.GetContractNamesWithEmpty();
150 foreach (var e in expectations)
152 var definition = new DerivedExportDefinition(() => e);
154 Assert.AreEqual(e, definition.ToString());
158 private class DerivedExportDefinition : ExportDefinition
160 private readonly Func<string> _contractNameGetter;
162 public DerivedExportDefinition()
166 public DerivedExportDefinition(Func<string> contractNameGetter)
168 _contractNameGetter = contractNameGetter;
171 public override string ContractName
173 get
175 if (_contractNameGetter != null)
177 return _contractNameGetter();
180 return base.ContractName;