Reverted DictionaryComponentAttribute changes.
[castle.git] / InversionOfControl / Castle.MicroKernel.Tests / Configuration / ConfigurationTestCase.cs
bloba4a7e266d1351da8b4b17e7b16bb5df72f49d9e4
1 // Copyright 2004-2007 Castle Project - http://www.castleproject.org/
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.MicroKernel.Tests.Configuration
17 using Castle.Core.Configuration;
18 using Castle.MicroKernel.Resolvers;
19 using Castle.MicroKernel.Tests.ClassComponents;
20 using Castle.MicroKernel.Tests.Configuration.Components;
21 using NUnit.Framework;
23 [TestFixture]
24 public class ConfigurationTestCase
26 private IKernel kernel;
28 [SetUp]
29 public void Init()
31 kernel = new DefaultKernel();
34 [TearDown]
35 public void Dispose()
37 kernel.Dispose();
40 [Test]
41 [ExpectedException(typeof(DependencyResolverException))]
42 public void ConstructorWithUnsatisfiedParameters()
44 kernel.AddComponent("key", typeof(ClassWithConstructors));
45 object res = kernel["key"];
48 [Test]
49 public void ConstructorWithStringParameters()
51 MutableConfiguration confignode = new MutableConfiguration("key");
53 IConfiguration parameters =
54 confignode.Children.Add(new MutableConfiguration("parameters"));
56 parameters.Children.Add(new MutableConfiguration("host", "castleproject.org"));
58 kernel.ConfigurationStore.AddComponentConfiguration("key", confignode);
60 kernel.AddComponent("key", typeof(ClassWithConstructors));
62 ClassWithConstructors instance = (ClassWithConstructors) kernel["key"];
63 Assert.IsNotNull(instance);
64 Assert.IsNotNull(instance.Host);
65 Assert.AreEqual("castleproject.org", instance.Host);
68 [Test]
69 public void ServiceOverride()
71 MutableConfiguration confignode = new MutableConfiguration("key");
73 IConfiguration parameters =
74 confignode.Children.Add(new MutableConfiguration("parameters"));
76 parameters.Children.Add(new MutableConfiguration("common", "${commonservice2}"));
78 kernel.ConfigurationStore.AddComponentConfiguration("commonserviceuser", confignode);
80 kernel.AddComponent("commonservice1", typeof(ICommon), typeof(CommonImpl1));
81 kernel.AddComponent("commonservice2", typeof(ICommon), typeof(CommonImpl2));
82 kernel.AddComponent("commonserviceuser", typeof(CommonServiceUser));
84 CommonServiceUser instance = (CommonServiceUser) kernel["commonserviceuser"];
86 Assert.IsNotNull(instance);
87 Assert.AreEqual(typeof(CommonImpl2), instance.CommonService.GetType());
90 [Test]
91 public void ServiceOverrideUsingProperties()
93 MutableConfiguration confignode = new MutableConfiguration("key");
95 IConfiguration parameters =
96 confignode.Children.Add(new MutableConfiguration("parameters"));
98 parameters.Children.Add(new MutableConfiguration("CommonService", "${commonservice2}"));
100 kernel.ConfigurationStore.AddComponentConfiguration("commonserviceuser", confignode);
102 kernel.AddComponent("commonservice1", typeof(ICommon), typeof(CommonImpl1));
103 kernel.AddComponent("commonservice2", typeof(ICommon), typeof(CommonImpl2));
105 kernel.AddComponent("commonserviceuser", typeof(CommonServiceUser2));
107 CommonServiceUser2 instance = (CommonServiceUser2) kernel["commonserviceuser"];
109 Assert.IsNotNull(instance);
110 Assert.AreEqual(typeof(CommonImpl2), instance.CommonService.GetType());
113 [Test]
114 public void ConstructorWithArrayParameter()
116 MutableConfiguration confignode = new MutableConfiguration("key");
118 IConfiguration parameters =
119 confignode.Children.Add(new MutableConfiguration("parameters"));
121 IConfiguration hosts = parameters.Children.Add(new MutableConfiguration("hosts"));
122 IConfiguration array = hosts.Children.Add(new MutableConfiguration("array"));
123 array.Children.Add(new MutableConfiguration("item", "castle"));
124 array.Children.Add(new MutableConfiguration("item", "uol"));
125 array.Children.Add(new MutableConfiguration("item", "folha"));
127 kernel.ConfigurationStore.AddComponentConfiguration("key", confignode);
129 kernel.AddComponent("key", typeof(ClassWithConstructors));
131 ClassWithConstructors instance = (ClassWithConstructors) kernel["key"];
132 Assert.IsNotNull(instance);
133 Assert.IsNull(instance.Host);
134 Assert.AreEqual("castle", instance.Hosts[0]);
135 Assert.AreEqual("uol", instance.Hosts[1]);
136 Assert.AreEqual("folha", instance.Hosts[2]);
139 [Test]
140 public void ConstructorWithListParameterAndCustomType()
142 MutableConfiguration confignode = new MutableConfiguration("key");
144 IConfiguration parameters =
145 confignode.Children.Add(new MutableConfiguration("parameters"));
147 IConfiguration services = parameters.Children.Add(new MutableConfiguration("services"));
148 MutableConfiguration list = (MutableConfiguration)
149 services.Children.Add(new MutableConfiguration("list"));
150 list.Attributes.Add("type", "Castle.MicroKernel.Tests.ClassComponents.ICommon, Castle.MicroKernel.Tests");
152 list.Children.Add(new MutableConfiguration("item", "${commonservice1}"));
153 list.Children.Add(new MutableConfiguration("item", "${commonservice2}"));
155 kernel.ConfigurationStore.AddComponentConfiguration("key", confignode);
156 kernel.AddComponent("key", typeof(ClassWithListConstructor));
158 kernel.AddComponent("commonservice1", typeof(ICommon), typeof(CommonImpl1));
159 kernel.AddComponent("commonservice2", typeof(ICommon), typeof(CommonImpl2));
161 ClassWithListConstructor instance = (ClassWithListConstructor) kernel["key"];
162 Assert.IsNotNull(instance.Services);
163 Assert.AreEqual(2, instance.Services.Count);
164 Assert.AreEqual("CommonImpl1", instance.Services[0].GetType().Name);
165 Assert.AreEqual("CommonImpl2", instance.Services[1].GetType().Name);
168 [Test]
169 public void ConstructorWithArrayParameterAndCustomType()
171 MutableConfiguration confignode = new MutableConfiguration("key");
173 IConfiguration parameters =
174 confignode.Children.Add(new MutableConfiguration("parameters"));
176 IConfiguration services = parameters.Children.Add(new MutableConfiguration("services"));
177 MutableConfiguration array = (MutableConfiguration)
178 services.Children.Add(new MutableConfiguration("array"));
179 //list.Attributes.Add("type", "Castle.MicroKernel.Tests.ClassComponents.ICommon, Castle.MicroKernel.Tests");
181 array.Children.Add(new MutableConfiguration("item", "${commonservice1}"));
182 array.Children.Add(new MutableConfiguration("item", "${commonservice2}"));
184 kernel.ConfigurationStore.AddComponentConfiguration("key", confignode);
186 kernel.AddComponent("key", typeof(ClassWithArrayConstructor));
188 kernel.AddComponent("commonservice1", typeof(ICommon), typeof(CommonImpl1));
189 kernel.AddComponent("commonservice2", typeof(ICommon), typeof(CommonImpl2));
191 ClassWithArrayConstructor instance = (ClassWithArrayConstructor) kernel["key"];
192 Assert.IsNotNull(instance.Services);
193 Assert.AreEqual(2, instance.Services.Length);
194 Assert.AreEqual("CommonImpl1", instance.Services[0].GetType().Name);
195 Assert.AreEqual("CommonImpl2", instance.Services[1].GetType().Name);
198 [Test]
199 public void CustomLifestyleManager()
201 string key = "key";
203 MutableConfiguration confignode = new MutableConfiguration(key);
204 confignode.Attributes.Add("lifestyle", "custom");
206 confignode.Attributes.Add("customLifestyleType",
207 "Castle.MicroKernel.Tests.ClassComponents.CustomLifestyleManager, Castle.MicroKernel.Tests");
209 kernel.ConfigurationStore.AddComponentConfiguration(key, confignode);
210 kernel.AddComponent(key, typeof(ICommon), typeof(CommonImpl1));
212 ICommon instance = (ICommon) kernel[key];
213 IHandler handler = kernel.GetHandler(key);
215 Assert.IsNotNull(instance);
216 Assert.AreEqual(Core.LifestyleType.Custom, handler.ComponentModel.LifestyleType);
217 Assert.AreEqual(typeof(CustomLifestyleManager), handler.ComponentModel.CustomLifestyle);
220 [Test]
221 public void ComplexConfigurationParameter()
223 string key = "key";
224 string value1 = "value1";
225 string value2 = "value2";
227 MutableConfiguration confignode = new MutableConfiguration(key);
229 IConfiguration parameters =
230 confignode.Children.Add(new MutableConfiguration("parameters"));
232 IConfiguration complexParam
233 = parameters.Children.Add(new MutableConfiguration("complexparam"));
235 IConfiguration complexNode
236 = complexParam.Children.Add(new MutableConfiguration("complexparametertype"));
238 complexNode.Children.Add(new MutableConfiguration("mandatoryvalue", value1));
239 complexNode.Children.Add(new MutableConfiguration("optionalvalue", value2));
242 kernel.ConfigurationStore.AddComponentConfiguration(key, confignode);
243 kernel.AddComponent(key, typeof(ClassWithComplexParameter));
245 ClassWithComplexParameter instance = (ClassWithComplexParameter) kernel[key];
247 Assert.IsNotNull(instance);
248 Assert.IsNotNull(instance.ComplexParam);
249 Assert.AreEqual(value1, instance.ComplexParam.MandatoryValue);
250 Assert.AreEqual(value2, instance.ComplexParam.OptionalValue);