EOL handling
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ImportingComposablePart.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections.Generic;\r
6 using System.ComponentModel.Composition.Factories;\r
7 using System.Linq;\r
8 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
9 using System.ComponentModel.Composition.Primitives;\r
10 \r
11 namespace System.ComponentModel.Composition\r
12 {\r
13     internal class ImportingComposablePart : ComposablePart\r
14     {\r
15         private readonly List<ImportDefinition> _importDefinitions = new List<ImportDefinition>();\r
16         private readonly List<ExportDefinition> _exportDefinitions = new List<ExportDefinition>();\r
17         private Dictionary<ImportDefinition, object> _importValues = new Dictionary<ImportDefinition, object>();\r
18 \r
19         public ImportingComposablePart(ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)\r
20             : this((string)null, cardinality, isRecomposable, contractNames)\r
21         {\r
22         }\r
23 \r
24         public ImportingComposablePart(string exportContractName, ImportCardinality cardinality, bool isRecomposable, params string[] contractNames)\r
25         {\r
26             if (exportContractName != null)\r
27             {\r
28                 var definition = ExportDefinitionFactory.Create(exportContractName);\r
29 \r
30                 _exportDefinitions.Add(definition);\r
31             }\r
32 \r
33             foreach (string contractName in contractNames)\r
34             {\r
35                 var definition = ImportDefinitionFactory.Create(contractName, \r
36                                                                 cardinality,\r
37                                                                 isRecomposable,\r
38                                                                 false);\r
39 \r
40                 _importDefinitions.Add(definition);\r
41             }\r
42         }\r
43 \r
44         public ImportingComposablePart(params ImportDefinition[] importDefintions)\r
45         {\r
46             _importDefinitions.AddRange(importDefintions);\r
47         }\r
48 \r
49         public override IEnumerable<ExportDefinition> ExportDefinitions\r
50         {\r
51             get { return this._exportDefinitions; }\r
52         }\r
53 \r
54         public override IEnumerable<ImportDefinition> ImportDefinitions\r
55         {\r
56             get { return this._importDefinitions; }\r
57         }\r
58 \r
59         public override IDictionary<string, object> Metadata\r
60         {\r
61             get { return new Dictionary<string, object>(); }\r
62         }\r
63 \r
64         public int ImportSatisfiedCount\r
65         {\r
66             get;\r
67             private set;\r
68         }\r
69 \r
70         public void ResetImportSatisfiedCount()\r
71         {\r
72             ImportSatisfiedCount = 0;\r
73         }\r
74 \r
75         public object Value\r
76         {\r
77             get \r
78             {\r
79                 Assert.AreEqual(1, _importValues.Count);\r
80 \r
81                 return _importValues.Values.First();\r
82             }\r
83         }\r
84 \r
85         public object GetImport(string contractName)\r
86         {\r
87             foreach (var pair in _importValues)\r
88             {\r
89                 var definition = (ContractBasedImportDefinition)pair.Key;\r
90                 if (definition.ContractName == contractName)\r
91                 {\r
92                     return pair.Value;\r
93                 }                \r
94             }\r
95 \r
96             return null;\r
97         }\r
98 \r
99         public object GetImport(ImportDefinition definition)\r
100         {\r
101             Assert.IsTrue(_importValues.ContainsKey(definition));\r
102             return _importValues[definition];\r
103         }\r
104 \r
105         public override object GetExportedValue(ExportDefinition definition)\r
106         {\r
107             Assert.Fail();\r
108             return null;\r
109         }\r
110 \r
111         public override void SetImport(ImportDefinition definition, IEnumerable<Export> exports)\r
112         {\r
113             Assert.IsTrue(_importDefinitions.Contains(definition));\r
114 \r
115             ImportSatisfiedCount++;\r
116 \r
117             _importValues[definition] = GetExportValue(exports);\r
118         }\r
119 \r
120         public void ResetImport(ImportDefinition definition)\r
121         {\r
122             Assert.IsTrue(_importDefinitions.Contains(definition));\r
123             _importValues[definition] = null;\r
124         }\r
125 \r
126         private object GetExportValue(IEnumerable<Export> exports)\r
127         {\r
128             var exportedValues = exports.Select(export => export.Value);\r
129 \r
130             int count = exportedValues.Count();\r
131             if (count == 0)\r
132             {\r
133                 return null;\r
134             }\r
135             else if (count == 1)\r
136             {\r
137                 return exportedValues.First();\r
138             }\r
139 \r
140             return exportedValues.ToArray();\r
141         }\r
142     }\r
143 \r
144 }\r