Author: hammett
Date: Thu Sep  2 07:57:16 2004
New Revision: 37382

Added:
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ComponentWrapperTestCase.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/IStartableService.cs
   (contents, props changed)
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent.cs
   (contents, props changed)
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent2.cs
   (contents, props changed)
Modified:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/Default/InterceptedComponent.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/IInterceptedComponent.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
Log:
Improving test cases. Coverage is now in 87% of Microkernel code.

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs 
(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs Thu 
Sep  2 07:57:16 2004
@@ -51,6 +51,8 @@
 

         protected Hashtable m_dependencyToSatisfy;

 

+               protected Hashtable m_proxy2ComponentWrapper;

+

         protected IHandlerFactory m_handlerFactory;

 

         protected IComponentModelBuilder m_componentModelBuilder;

@@ -68,6 +70,7 @@
             m_key2Handler = new Hashtable(CaseInsensitiveHashCodeProvider.Default, 
CaseInsensitiveComparer.Default);

             m_service2Key = new Hashtable();

             m_subsystems = new Hashtable();

+                       m_proxy2ComponentWrapper = new Hashtable();

             m_handlerFactory = new SimpleHandlerFactory();

             m_dependencyToSatisfy = new Hashtable();

             m_componentModelBuilder = new DefaultComponentModelBuilder(this);

@@ -356,7 +359,17 @@
             // AddSubsystem( KernelConstants.EVENTS, new EventManager() );

         }

 

-        #region RaiseEvents 

+        #region RaiseEvents

+

+               protected virtual void RaiseDependencyEvent( Type service, IHandler 
handler )

+               {

+                       DependencyListenerDelegate del = (DependencyListenerDelegate) 
m_dependencyToSatisfy[ service ];

+                       

+                       if ( del != null )

+                       {

+                               del( service, handler );

+                       }

+               }

 

         protected virtual void RaiseComponentRegistered(IComponentModel model, String 
key, IHandler handler)

         {

@@ -422,9 +435,20 @@
             {

                 IComponentModel model = handler.ComponentModel;

                 String key = (String) m_service2Key[ model.Service ];

-                IInterceptedComponent wrapper = new InterceptedComponentWrapper( 
m_interceptedComponentBuilder /*, instance, model.Service*/ );

+                InterceptedComponentWrapper wrapper = 

+                                       new InterceptedComponentWrapper( 
m_interceptedComponentBuilder, instance, model.Service );

 

                 eventDelegate(model, key, handler, wrapper);

+

+                               if (wrapper.IsProxiedCreated)

+                               {

+                                       object proxy = wrapper.ProxiedInstance;

+                                       m_proxy2ComponentWrapper[ proxy ] = wrapper;

+

+                                       // From now on, the outside world will have 

+                                       // a proxy pointer, not the instance anymore.

+                                       instance = proxy;

+                               }

             }

 

             return instance;

@@ -434,15 +458,23 @@
         {

             UnWrapDelegate eventDelegate = (UnWrapDelegate) 
m_events[ComponentUnWrapEvent];

 

+                       // We can have a null wrapper here

+                       InterceptedComponentWrapper wrapper = 
m_proxy2ComponentWrapper[ instance ] as InterceptedComponentWrapper;

+

+                       if (wrapper != null)

+                       {

+                               m_proxy2ComponentWrapper.Remove( instance );

+                       }

+

             if (eventDelegate != null)

             {

                 IComponentModel model = handler.ComponentModel;

                 String key = (String) m_service2Key[ model.Service ];

 

-                instance = eventDelegate(model, key, handler, instance);

+                eventDelegate(model, key, handler, wrapper);

             }

 

-            return instance;

+            return wrapper != null ? wrapper.Instance : instance;

         }

 

         /// <summary>

@@ -451,46 +483,91 @@
         internal class InterceptedComponentWrapper : IInterceptedComponent

         {

             private IInterceptedComponentBuilder m_interceptedComponentBuilder;

+                       private IInterceptedComponent m_delegate;

+                       private object m_instance;

+               private Type m_service;

 

-            public InterceptedComponentWrapper( IInterceptedComponentBuilder 
interceptedComponentBuilder )

+               public InterceptedComponentWrapper( IInterceptedComponentBuilder 
interceptedComponentBuilder, 

+                               object instance, Type service )

             {

                 m_interceptedComponentBuilder = interceptedComponentBuilder;

+                               m_instance = instance;

+                               m_service = service;

             }

 

+                       public object Instance

+                       {

+                               get { return m_instance; }

+                       }

+

             public object ProxiedInstance

             {

-                get { throw new NotImplementedException(); }

+                get

+                {

+                                       EnsureDelegate();

+                       return m_delegate.ProxiedInstance;

+                }

             }

 

             public void Add(IInterceptor interceptor)

             {

-                throw new NotImplementedException();

-            }

+                               EnsureDelegate();

+                               m_delegate.Add(interceptor);

+                       }

 

             public IInterceptor InterceptorChain

             {

-                get { throw new NotImplementedException(); }

-            }

+                               get

+                               {

+                                       EnsureDelegate();

+                                       return m_delegate.InterceptorChain;

+                               }

+                       }

+

+                       public bool IsProxiedCreated

+                       {

+                               get { return m_delegate != null; }

+                       }

+

+                       private void EnsureDelegate()

+                       {

+                               if (m_delegate == null)

+                               {

+                                       m_delegate = 
m_interceptedComponentBuilder.CreateInterceptedComponent( 

+                                               m_instance, m_service );

+                               }

+                       }

         }

 

         #endregion

 

         /// <summary>

         /// Starts the component if the activation policy for 

-        /// the component is 'Start'

+        /// the component is 'Start' and if the component's dependencies are 
satisfied.

         /// </summary>

         /// <param name="model">Component model</param>

         /// <param name="handler">Handler responsible for the component</param>

-        protected virtual void StartComponent(IComponentModel model, IHandler handler)

+        protected virtual void StartComponentIfPossible(IComponentModel model, 
IHandler handler)

         {

             if (model.ActivationPolicy == Activation.Start)

             {

-                object instance = handler.Resolve();

-

-                m_componentsInstances.Add(new PairHandlerComponent(handler, 
instance));

+                               if (handler.ActualState == State.Valid)

+                               {

+                                       StartComponent( handler );

+                               }

+                               else if (handler.ActualState == 
State.WaitingDependency)

+                               {

+                                       handler.AddChangeStateListener( new 
ChangeStateListenerDelegate(StartComponent) );

+                               }

             }

         }

 

+               protected virtual void StartComponent( IHandler handler )

+               {

+                       object instance = handler.Resolve();

+                       m_componentsInstances.Add(new PairHandlerComponent(handler, 
instance));

+               }

+

         private void OnModelConstructed(IComponentModel model, String key)

         {

             RaiseModelConstructed(model, key);

@@ -500,9 +577,11 @@
         {

             m_service2Key[ model.Service ] = key;

 

+                       RaiseDependencyEvent( model.Service, handler );

+

             RaiseComponentRegistered(model, key, handler);

 

-            StartComponent( model, handler );

+            StartComponentIfPossible( model, handler );

         }

 

         private void OnComponentUnregistered(IComponentModel model, String key, 
IHandler handler)


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
    (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
    Thu Sep  2 07:57:16 2004
@@ -28,9 +28,9 @@
 
                private Type m_destructionConcern;
 
-               private ArrayList m_commissionConcerns = new ArrayList();
+               private IList m_commissionConcerns = new ArrayList();
 
-               private ArrayList m_decommissionConcerns = new ArrayList();
+               private IList m_decommissionConcerns = new ArrayList();
 
                /// <summary>
                /// 

Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs   
     (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs   
     Thu Sep  2 07:57:16 2004
@@ -17,10 +17,8 @@
        using System;

 

        using Apache.Avalon.Castle.MicroKernel.Concerns;

-       using Apache.Avalon.Castle.MicroKernel.Model;

        using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default;

        using Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default;

-       using Apache.Avalon.Castle.MicroKernel.Subsystems.Context.Default;

 

        /// <summary>

        /// Specialization of BaseKernel to adhere to Avalon 


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
    (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
    Thu Sep  2 07:57:16 2004
@@ -24,11 +24,15 @@
     /// </summary>

     public abstract class AbstractHandler : IHandler

     {

-        protected IKernel m_kernel;

+               private State m_state = State.Valid;

+               

+               private IList m_instances = new ArrayList();

 

-        protected IComponentModel m_componentModel;

+               private Delegate m_changeStateListener;

+

+               protected IKernel m_kernel;

 

-        protected State m_state = State.Valid;

+        protected IComponentModel m_componentModel;

 

         protected IList m_dependencies = new ArrayList();

 

@@ -36,8 +40,6 @@
 

         protected ILifestyleManager m_lifestyleManager;

 

-        private IList m_instances = new ArrayList();

-

         /// <summary>

         /// 

         /// </summary>

@@ -61,6 +63,22 @@
             get { return m_componentModel; }

         }

 

+               /// <summary>

+               /// 

+               /// </summary>

+               /// <param name="changeStateDelegate"></param>

+               public void AddChangeStateListener( ChangeStateListenerDelegate 
changeStateDelegate )

+               {

+                       if (m_changeStateListener == null)

+                       {

+                               m_changeStateListener = changeStateDelegate;

+                       }

+                       else

+                       {

+                               m_changeStateListener = 
Delegate.Combine(m_changeStateListener, changeStateDelegate);

+                       }

+               }

+

         public virtual object Resolve()

         {

             if (ActualState == State.WaitingDependency)

@@ -110,6 +128,22 @@
         }

 

         #endregion

+

+               protected virtual void SetNewState( State state )

+               {

+                       m_state = state;

+

+                       RaiseChangeStateEvent();

+               }

+

+               protected virtual void RaiseChangeStateEvent()

+               {

+                       if ( m_changeStateListener != null )

+                       {

+                               ChangeStateListenerDelegate del = 
(ChangeStateListenerDelegate) m_changeStateListener;

+                               del( this );

+                       }

+               }

 

         protected virtual void RegisterInstance(object instance)

         {


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs
      (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs
      Thu Sep  2 07:57:16 2004
@@ -63,9 +63,9 @@
                        }
                        else
                        {
-                               // This is handler is considered invalid
+                               // This handler is considered invalid
                                // until dependencies are satisfied
-                               m_state = State.WaitingDependency;
+                               SetNewState( State.WaitingDependency );
                                m_dependencies.Add( service );
                                                
                                // Register ourself in the kernel
@@ -91,7 +91,7 @@
 
                        if (m_dependencies.Count == 0)
                        {
-                               m_state = State.Valid;
+                               SetNewState(State.Valid);
                        }
                }
 

Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs  
 (original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs  
 Thu Sep  2 07:57:16 2004
@@ -14,7 +14,11 @@
 

 namespace Apache.Avalon.Castle.MicroKernel

 {

-    using Apache.Avalon.Castle.MicroKernel.Model;

+       using System;

+       

+       using Apache.Avalon.Castle.MicroKernel.Model;

+

+       public delegate void ChangeStateListenerDelegate( IHandler handler );

 

        /// <summary>

        /// Summary description for IHandler.

@@ -43,5 +47,11 @@
         /// 

         /// </summary>

            IComponentModel ComponentModel { get; }

+

+               /// <summary>

+               /// 

+               /// </summary>

+               /// <param name="changeStateDelegate"></param>

+               void AddChangeStateListener( ChangeStateListenerDelegate 
changeStateDelegate );

        }

 }

Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs     
 (original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs     
 Thu Sep  2 07:57:16 2004
@@ -23,7 +23,7 @@
 

        public delegate void WrapDelegate( IComponentModel model, String key, IHandler 
handler, IInterceptedComponent interceptedComponent );

 

-    public delegate object UnWrapDelegate( IComponentModel model, String key, 
IHandler handler, object instance );

+    public delegate void UnWrapDelegate( IComponentModel model, String key, IHandler 
handler, IInterceptedComponent interceptedComponent );

 

        public delegate void ComponentInstanceDelegate( IComponentModel model, String 
key, IHandler handler, object instance );

 


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/Default/InterceptedComponent.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/Default/InterceptedComponent.cs
   (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/Default/InterceptedComponent.cs
   Thu Sep  2 07:57:16 2004
@@ -47,6 +47,8 @@
                        m_proxy = proxy;

                }

 

+               #region IInterceptedComponent Members

+

                /// <summary>

                /// Returns the component instance, non-proxied.

                /// </summary>

@@ -54,8 +56,6 @@
                {

                        get { return m_instance; }

                }

-

-               #region IInterceptedComponent Members

 

                /// <summary>

                /// Add the interceptor in the argument as the first interceptor


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/IInterceptedComponent.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/IInterceptedComponent.cs
  (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Interceptor/IInterceptedComponent.cs
  Thu Sep  2 07:57:16 2004
@@ -21,6 +21,8 @@
        /// </summary>

        public interface IInterceptedComponent

        {

+               object Instance { get; }

+

                object ProxiedInstance { get; }

 

                void Add( IInterceptor interceptor );


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
  (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
  Thu Sep  2 07:57:16 2004
@@ -119,6 +119,11 @@
                     BuildAction = "Compile"

                 />

                 <File

+                    RelPath = "ComponentWrapperTestCase.cs"

+                    SubType = "Code"

+                    BuildAction = "Compile"

+                />

+                <File

                     RelPath = "ConcernManagerTestCase.cs"

                     SubType = "Code"

                     BuildAction = "Compile"

@@ -239,6 +244,11 @@
                     BuildAction = "Compile"

                 />

                 <File

+                    RelPath = "Components\IStartableService.cs"

+                    SubType = "Code"

+                    BuildAction = "Compile"

+                />

+                <File

                     RelPath = "Components\SimpleCustomerManager.cs"

                     SubType = "Code"

                     BuildAction = "Compile"

@@ -260,6 +270,16 @@
                 />

                 <File

                     RelPath = "Components\SimpleSpamService.cs"

+                    SubType = "Code"

+                    BuildAction = "Compile"

+                />

+                <File

+                    RelPath = "Components\SimpleStartableComponent.cs"

+                    SubType = "Code"

+                    BuildAction = "Compile"

+                />

+                <File

+                    RelPath = "Components\SimpleStartableComponent2.cs"

                     SubType = "Code"

                     BuildAction = "Compile"

                 />


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
 (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
 Thu Sep  2 07:57:16 2004
@@ -14,8 +14,11 @@
 
 namespace Apache.Avalon.Castle.MicroKernel.Test
 {
+       using System;

+

        using NUnit.Framework;
 
+       using Apache.Avalon.Framework;

        using Apache.Avalon.Castle.MicroKernel;
        using Apache.Avalon.Castle.MicroKernel.Test.Components;
 
@@ -25,6 +28,20 @@
        [TestFixture]
        public class BaseKernelTestCase : Assertion
        {
+               IKernel m_container;
+
+               [SetUp]
+               public void Init()

+               {

+                       m_container = new BaseKernel();
+               }
+
+               [TearDown]
+               public void Terminate()

+               {

+                       ContainerUtil.Dispose( m_container );
+               }
+
                /// <summary>
                /// Just a simple Service resolution.
                /// No concerns or aspects involved.
@@ -32,10 +49,9 @@
                [Test]
                public void SimpleUsage()
                {
-                       BaseKernel container = new BaseKernel();
-                       container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailService) );
+                       m_container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailService) );
 
-                       IHandler handler = container[ "a" ];
+                       IHandler handler = m_container[ "a" ];
 
                        IMailService service = handler.Resolve() as IMailService;
 
@@ -46,31 +62,67 @@
                        handler.Release( service );
                }
 
+               [Test]
+               public void InvalidComponent()

+               {

+                       try

+                       {

+                               m_container.AddComponent( "a", typeof(IMailService), 
typeof(String) );
+                               Fail("Should not allow a type which not implements the 
specified service.");
+                       }
+                       catch(ArgumentException)

+                       {

+                               // Expected

+                       }
+               }
+
         [Test]
         public void AddAndRemove()
         {
-            BaseKernel container = new BaseKernel();
-            container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailService) );
+            m_container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailService) );
 
-            AssertNotNull( container.GetHandlerForService( typeof(IMailService) ) );
-            AssertNotNull( container[ "a" ] );
+            AssertNotNull( m_container.GetHandlerForService( typeof(IMailService) ) );
+            AssertNotNull( m_container[ "a" ] );
 
-            AssertNull( container.GetHandlerForService( typeof(IMailMarketingService) 
) );
-            AssertNull( container[ "b" ] );
+            AssertNull( m_container.GetHandlerForService( 
typeof(IMailMarketingService) ) );
+            AssertNull( m_container[ "b" ] );
 
-            container.RemoveComponent( "a" );
+            m_container.RemoveComponent( "a" );
 
-            AssertNull( container.GetHandlerForService( typeof(IMailService) ) );
-            AssertNull( container[ "a" ] );
+            AssertNull( m_container.GetHandlerForService( typeof(IMailService) ) );
+            AssertNull( m_container[ "a" ] );
         }
 
                [Test]
+               public void StartableComponent()

+               {

+                       SimpleStartableComponent.Constructed = false;

+

+                       m_container.AddComponent( "a", typeof(IStartableService), 
typeof(SimpleStartableComponent) );
+
+                       Assert( SimpleStartableComponent.Constructed );
+               }
+
+               [Test]
+               public void StartableComponentWithDependencies()

+               {

+                       SimpleStartableComponent.Constructed = false;

+

+                       m_container.AddComponent( "a", typeof(IStartableService), 
typeof(SimpleStartableComponent2) );
+
+                       Assert( !SimpleStartableComponent.Constructed );
+
+                       m_container.AddComponent( "b", typeof(IMailService), 
typeof(SimpleMailService) );
+
+                       Assert( SimpleStartableComponent.Constructed );
+               }
+
+               [Test]
                public void ComponentDependingOnLogger()
                {
-                       BaseKernel container = new BaseKernel();
-                       container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailServiceWithLogger) );
+                       m_container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailServiceWithLogger) );
 
-                       IHandler handler = container[ "a" ];
+                       IHandler handler = m_container[ "a" ];
 
                        IMailService service = handler.Resolve() as IMailService;
 
@@ -84,20 +136,19 @@
 
                /*
                [Test]
-               public void FacilityEvents()
+               public void FacilityLifecycle()
                {
-                       BaseKernel container = new BaseKernel();
                        MockFacility facility = new MockFacility();
 
-                       container.RegisterFacility( facility );
+                       m_container.RegisterFacility( facility );
 
                        Assert( facility.OnInitCalled );
 
-                       container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailServiceWithLogger) );
+                       m_container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailServiceWithLogger) );
 
                        Assert( facility.ComponentAddedCalled );
 
-                       IHandler handler = container[ "a" ];
+                       IHandler handler = m_container[ "a" ];
 
                        IMailService service = handler.Resolve() as IMailService;
 
@@ -115,7 +166,6 @@
 
                public class MockFacility : IContainerFacility
                {
-                       
                }
                */
        }

Added: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ComponentWrapperTestCase.cs
==============================================================================
--- (empty file)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ComponentWrapperTestCase.cs
   Thu Sep  2 07:57:16 2004
@@ -0,0 +1,85 @@
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel.Test

+{

+       using System;

+

+       using NUnit.Framework;

+

+       using Apache.Avalon.Castle.MicroKernel.Interceptor;

+       using Apache.Avalon.Castle.MicroKernel.Model;

+       using Apache.Avalon.Castle.MicroKernel.Test.Components;

+

+       /// <summary>

+       /// Summary description for ComponentWrapperTestCase.

+       /// </summary>

+       [TestFixture]

+       public class ComponentWrapperTestCase : Assertion

+       {

+               private MyInterceptor m_interceptor = new MyInterceptor();

+

+               [Test]

+               public void WrappingComponent()

+               {

+                       IKernel container = new BaseKernel();
+
+                       container.ComponentWrap += new WrapDelegate(ComponentWrap);
+                       container.ComponentUnWrap += new 
UnWrapDelegate(ComponentUnWrap);
+
+                       container.AddComponent( "a", typeof(IMailService), 
typeof(SimpleMailService) );
+
+                       IHandler handler = container[ "a" ];
+
+                       IMailService service = handler.Resolve() as IMailService;
+
+                       service.Send("hammett at apache dot org", "johndoe at yahoo 
dot org", "Aloha!", "What's up?");
+                       Assert( m_interceptor.InterceptorInvoked );

+
+                       handler.Release( service );
+               }

+

+               private void ComponentWrap(IComponentModel model, string key, IHandler 
handler, IInterceptedComponent interceptedComponent)

+               {

+                       interceptedComponent.Add( m_interceptor );

+

+                       AssertNotNull( interceptedComponent.Instance );

+                       AssertNotNull( interceptedComponent.ProxiedInstance );

+                       AssertNotNull( interceptedComponent.InterceptorChain );

+                       Assert( interceptedComponent.Instance != 
interceptedComponent.ProxiedInstance );

+               }

+

+               private void ComponentUnWrap(IComponentModel model, string key, 
IHandler handler, IInterceptedComponent interceptedComponent)

+               {

+                       AssertNotNull( interceptedComponent );

+               }

+

+               internal class MyInterceptor : AbstractInterceptor

+               {

+                       private bool m_interceptorInvoked = false;

+

+                       public bool InterceptorInvoked

+                       {

+                               get { return m_interceptorInvoked; }

+                       }

+

+                       public override object Process(object instance, 
System.Reflection.MethodInfo method, params object[] arguments)

+                       {

+                               m_interceptorInvoked = true;

+

+                               return base.Process (instance, method, arguments);

+                       }

+               }

+       }

+}


Added: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/IStartableService.cs
==============================================================================
--- (empty file)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/IStartableService.cs
       Thu Sep  2 07:57:16 2004
@@ -0,0 +1,26 @@
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel.Test.Components

+{

+       using System;

+

+       /// <summary>

+       /// Summary description for IStartableService.

+       /// </summary>

+       public interface IStartableService

+       {

+               void DoSomeUsefulWork();

+       }

+}


Added: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent.cs
==============================================================================
--- (empty file)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent.cs
        Thu Sep  2 07:57:16 2004
@@ -0,0 +1,48 @@
+ // Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel.Test.Components

+{

+       using System;

+

+       using Apache.Avalon.Framework;

+

+       /// <summary>

+       /// Summary description for SimpleStartableComponent.

+       /// </summary>

+       [AvalonComponent("StartableComponent", Lifestyle.Singleton, Activation.Start)]

+       public class SimpleStartableComponent : IStartableService

+       {

+               private static bool m_constructed = false;

+

+               public SimpleStartableComponent()

+               {

+                       m_constructed = true;

+               }

+

+               public static bool Constructed

+               {

+                       get { return m_constructed; }

+                       set { m_constructed = value; }

+               }

+

+               #region IStartableService Members

+

+               public void DoSomeUsefulWork()

+               {

+               }

+

+               #endregion

+       }

+}
\ No newline at end of file

Added: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent2.cs
==============================================================================
--- (empty file)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/SimpleStartableComponent2.cs
       Thu Sep  2 07:57:16 2004
@@ -0,0 +1,31 @@
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel.Test.Components

+{

+       using System;

+

+       using Apache.Avalon.Framework;

+

+       /// <summary>

+       /// Summary description for SimpleStartableComponent2.

+       /// </summary>

+       [AvalonComponent("StartableComponent2", Lifestyle.Singleton, Activation.Start)]

+       public class SimpleStartableComponent2 : SimpleStartableComponent

+       {

+               public SimpleStartableComponent2( IMailService service )

+               {

+               }

+       }

+}


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
     (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
     Thu Sep  2 07:57:16 2004
@@ -43,6 +43,38 @@
                }
 
                [Test]
+               public void InvalidConcern()
+               {
+                       ConcernManager manager = new ConcernManager();
+                       
+                       try
+                       {
+                               manager.Add( typeof(String) );
+                               Fail("Could not allow a type which is not a concern");
+                       }
+                       catch(ArgumentException)

+                       {

+                               // Expected

+                       }
+               }
+
+               [Test]
+               public void GetDefaultCommissionConcerns()
+               {
+                       ConcernManager manager = new ConcernManager();
+                       AssertNotNull( manager.CommissionConcerns );
+                       AssertEquals( 6, manager.CommissionConcerns.Count );
+               }
+
+               [Test]
+               public void GetDefaultDecommissionConcerns()
+               {
+                       ConcernManager manager = new ConcernManager();
+                       AssertNotNull( manager.DecommissionConcerns );
+                       AssertEquals( 1, manager.DecommissionConcerns.Count );
+               }
+
+               [Test]
                public void GetDefaultCommissionChain()
                {
                        ConcernManager manager = new ConcernManager();

Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
       (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
       Thu Sep  2 07:57:16 2004
@@ -20,7 +20,8 @@
 

     using Apache.Avalon.Castle.MicroKernel;
     using Apache.Avalon.Castle.MicroKernel.Model;

-    using Apache.Avalon.Castle.MicroKernel.Test.Components;
+       using Apache.Avalon.Castle.MicroKernel.Interceptor;

+       using Apache.Avalon.Castle.MicroKernel.Test.Components;
 

        /// <summary>

        /// Summary description for KernelEventsTestCase.

@@ -175,16 +176,14 @@
             m_wrap = true;

         }

 

-        private object ComponentUnWrap(IComponentModel model, String key, IHandler 
handler, object instance)

+        private void ComponentUnWrap(IComponentModel model, String key, IHandler 
handler, IInterceptedComponent interceptedComponent)

         {

             AssertNotNull( model );

             AssertNotNull( key );

             AssertNotNull( handler );

-            AssertNotNull( instance );

+            AssertNull( interceptedComponent );

 

             m_unwrap = true;

-

-            return instance;

         }

 

         private void ComponentReady(IComponentModel model, String key, IHandler 
handler, object instance)


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to