1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
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
15 public class ExportDefinitionTests
18 public void Constructor1_ShouldSetMetadataPropertyToEmptyDictionary()
20 var definition
= new DerivedExportDefinition();
22 EnumerableAssert
.IsEmpty(definition
.Metadata
);
26 public void Constructor1_ShouldSetMetadataPropertyToReadOnlyDictionary()
28 var definition
= new DerivedExportDefinition();
30 ExceptionAssert
.Throws
<NotSupportedException
>(() =>
32 definition
.Metadata
["Value"] = "Value";
37 public void Constructor2_NullAsContractNameArgument_ShouldThrowArgumentNull()
39 ExceptionAssert
.ThrowsArgument
<ArgumentNullException
>("contractName", () =>
41 new ExportDefinition((string)null, new Dictionary
<string, object>());
46 public void Constructor2_EmptyStringAsContractNameArgument_ShouldThrowArgument()
48 ExceptionAssert
.ThrowsArgument
<ArgumentException
>("contractName", () =>
50 new ExportDefinition(string.Empty
, new Dictionary
<string, object>());
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
);
68 public void Constructor2_NullAsMetadataArgument_ShouldSetMetadataPropertyToEmptyDictionary()
70 var definition
= new ExportDefinition("Contract", (IDictionary
<string, object>)null); ;
72 EnumerableAssert
.IsEmpty(definition
.Metadata
);
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";
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";
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
);
111 public void ContractName_WhenNotOverridden_ShouldThrowNotImplemented()
113 var definition
= new DerivedExportDefinition();
115 ExceptionAssert
.Throws
<NotImplementedException
>(() =>
117 var contractName
= definition
.ContractName
;
122 public void ToString_WhenContractNameNotOverridden_ShouldThrowNotImplemented()
124 var definition
= new DerivedExportDefinition();
126 ExceptionAssert
.Throws
<NotImplementedException
>(() =>
128 definition
.ToString();
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());
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
175 if (_contractNameGetter
!= null)
177 return _contractNameGetter();
180 return base.ContractName
;