4 using Castle
.Core
.Internal
;
5 using Castle
.Igloo
.Attributes
;
6 using Castle
.Igloo
.ComponentActivator
;
7 using Castle
.Igloo
.Inspectors
;
8 using Castle
.Igloo
.Interceptors
;
9 using Castle
.Igloo
.LifestyleManager
;
10 using Castle
.Igloo
.Test
.ScopeTest
.Components
;
11 using Castle
.MicroKernel
;
12 using Castle
.MicroKernel
.ModelBuilder
;
14 using NUnit
.Framework
;
16 namespace Castle
.Igloo
.Test
.ScopeTest
19 public class ComponentActivatorTests
21 private IContributeComponentModelConstruction _inspector
= null;
22 private IKernel _kernel
= null;
23 private IWindsorContainer _container
= null;
28 _kernel
= new DefaultKernel();
29 _inspector
= new IglooInspector();
30 _container
= new WindsorContainer();
31 _container
.AddFacility("Igloo.Facility", new IglooFacility());
35 public void ProcessModel_NoScopeAttribute()
37 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(SingletonScopeComponent
));
38 _inspector
.ProcessModel(_kernel
, model
);
39 Assert
.IsNull(model
.CustomComponentActivator
);
43 public void ProcessModel_ScopeAttributeWithProxy()
45 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(SimpleComponent
));
46 _inspector
.ProcessModel(_kernel
, model
);
48 Assert
.IsNotNull(model
.CustomComponentActivator
);
49 Assert
.AreEqual(typeof(ScopeComponentActivator
), model
.CustomComponentActivator
);
51 ScopeAttribute scopeAttribute
= (ScopeAttribute
)model
.ExtendedProperties
[ScopeInspector
.SCOPE_ATTRIBUTE
];
53 Assert
.IsTrue(scopeAttribute
.UseProxy
);
54 Assert
.AreEqual(ScopeType
.Singleton
,scopeAttribute
.Scope
);
58 public void ProcessModel_ScopeAttributeWithoutProxy()
60 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(TransientScopeComponent
));
61 _inspector
.ProcessModel(_kernel
, model
);
63 Assert
.IsNull(model
.CustomComponentActivator
);
65 ScopeAttribute scopeAttribute
= (ScopeAttribute
)model
.ExtendedProperties
[ScopeInspector
.SCOPE_ATTRIBUTE
];
67 Assert
.IsFalse(scopeAttribute
.UseProxy
);
68 Assert
.AreEqual(ScopeType
.Transient
, scopeAttribute
.Scope
);
70 Assert
.AreEqual(LifestyleType
.Custom
, model
.LifestyleType
);
71 Assert
.AreEqual(typeof(ScopeLifestyleManager
), model
.CustomLifestyle
);
75 public void ProcessModel_ScopeConfigWithProxy()
77 _container
.AddComponent("Simple.Component", typeof(IComponent
), typeof(SimpleComponent
));
79 IVertex
[] vertices
= TopologicalSortAlgo
.Sort(_container
.Kernel
.GraphNodes
);
81 for (int i
= 0; i
< vertices
.Length
; i
++)
83 ComponentModel model
= (ComponentModel
)vertices
[i
];
84 if (model
.Name
== "Simple.Component")
86 Assert
.IsNotNull(model
.CustomComponentActivator
);
87 Assert
.AreEqual(typeof(ScopeComponentActivator
), model
.CustomComponentActivator
);
89 ScopeAttribute scopeAttribute
= (ScopeAttribute
)model
.ExtendedProperties
[ScopeInspector
.SCOPE_ATTRIBUTE
];
91 Assert
.IsTrue(scopeAttribute
.UseProxy
);
92 Assert
.AreEqual(ScopeType
.Singleton
, scopeAttribute
.Scope
);
98 public void ProcessModel_ScopeConfigWithoutProxy()
100 _container
.AddComponent("Transient.Scope.Component", typeof(IComponent
), typeof(TransientScopeComponent
));
102 IVertex
[] vertices
= TopologicalSortAlgo
.Sort(_container
.Kernel
.GraphNodes
);
104 for (int i
= 0; i
< vertices
.Length
; i
++)
106 ComponentModel model
= (ComponentModel
)vertices
[i
];
107 if (model
.Name
== "Transient.Scope.Component")
109 Assert
.IsNull(model
.CustomComponentActivator
);
111 ScopeAttribute scopeAttribute
= (ScopeAttribute
)model
.ExtendedProperties
[ScopeInspector
.SCOPE_ATTRIBUTE
];
113 Assert
.IsFalse(scopeAttribute
.UseProxy
);
114 Assert
.AreEqual(ScopeType
.Transient
, scopeAttribute
.Scope
);
116 Assert
.AreEqual(LifestyleType
.Custom
, model
.LifestyleType
);
117 Assert
.AreEqual(typeof(ScopeLifestyleManager
), model
.CustomLifestyle
);
118 Assert
.AreEqual(0, model
.Interceptors
.Count
);
120 foreach (InterceptorReference interceptorRef
in model
.Interceptors
)
122 Assert
.AreEqual(interceptorRef
.ReferenceType
, InterceptorReferenceType
.Interface
);
123 Assert
.AreEqual(interceptorRef
.ServiceType
, typeof(BijectionInterceptor
));
130 public void ProcessModel_WithoutInjectProperties()
132 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(TransientScopeComponent
));
133 _inspector
.ProcessModel(_kernel
, model
);
135 Assert
.AreEqual(0, model
.Interceptors
.Count
);
139 public void ProcessModel_WithInjectProperties()
141 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(ScopeComponentWithInject
));
142 _inspector
.ProcessModel(_kernel
, model
);
144 Assert
.AreEqual(1, model
.Interceptors
.Count
);
146 foreach (InterceptorReference interceptorRef
in model
.Interceptors
)
148 Assert
.AreEqual(interceptorRef
.ReferenceType
, InterceptorReferenceType
.Interface
);
149 Assert
.AreEqual(interceptorRef
.ServiceType
, typeof(BijectionInterceptor
));
154 public void ProcessModel_WithOutjectProperties()
156 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(TransientScopeComponent
));
157 _inspector
.ProcessModel(_kernel
, model
);
159 Assert
.AreEqual(0, model
.Interceptors
.Count
);
163 public void ProcessModel_WithoutOutjectProperties()
165 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(ScopeComponentWithOutject
));
166 _inspector
.ProcessModel(_kernel
, model
);
168 Assert
.AreEqual(1, model
.Interceptors
.Count
);
170 foreach (InterceptorReference interceptorRef
in model
.Interceptors
)
172 Assert
.AreEqual(interceptorRef
.ReferenceType
, InterceptorReferenceType
.Interface
);
173 Assert
.AreEqual(interceptorRef
.ServiceType
, typeof(BijectionInterceptor
));
178 public void ProcessModel_WithInjectOutjectProperties()
180 ComponentModel model
= new ComponentModel("test", typeof(IComponent
), typeof(ScopeComponentWithInjectOutject
));
181 _inspector
.ProcessModel(_kernel
, model
);
183 Assert
.AreEqual(1, model
.Interceptors
.Count
);
185 foreach (InterceptorReference interceptorRef
in model
.Interceptors
)
187 Assert
.AreEqual(interceptorRef
.ReferenceType
, InterceptorReferenceType
.Interface
);
188 Assert
.AreEqual(interceptorRef
.ServiceType
, typeof(BijectionInterceptor
));
192 [Scope(Scope
= ScopeType
.Transient
)]
193 private class ScopeComponentWithInject
: IComponent
195 [Inject(Name
="Test")]
200 throw new NotImplementedException("The method or operation is not implemented.");
203 #region IComponent Members
207 get { throw new NotImplementedException("The method or operation is not implemented."); }
213 [Scope(Scope
= ScopeType
.Transient
)]
214 private class ScopeComponentWithOutject
: IComponent
216 [Outject(Name
= "Test")]
221 throw new NotImplementedException("The method or operation is not implemented.");
224 #region IComponent Members
228 get { throw new NotImplementedException("The method or operation is not implemented."); }
234 [Scope(Scope
= ScopeType
.Transient
)]
235 private class ScopeComponentWithInjectOutject
: IComponent
237 [Outject(Name
= "Test")]
238 [Inject(Name
= "Test")]
243 throw new NotImplementedException("The method or operation is not implemented.");
247 throw new NotImplementedException("The method or operation is not implemented.");
250 #region IComponent Members
254 get { throw new NotImplementedException("The method or operation is not implemented."); }