hammett     2004/04/17 20:26:02

  Modified:    avalon-net/Castle/MicroKernel/MicroKernelTest
                        AssemblerTestCase.cs ConcernManagerTestCase.cs
                        DefaultComponentModelBuilderTestCase.cs
                        DefaultKernelTestCase.cs
               avalon-net/Castle/MicroKernel/MicroKernelTest/Components
                        AvalonMailService.cs AvalonSpamService3.cs
  Added:       avalon-net/Castle/MicroKernel/MicroKernelTest
                        Apache.Avalon.Castle.MicroKernel.Test.csproj
                        DefaultConfigurationManagerTestCase.cs
                        DependencyDisposeTestCase.cs
               avalon-net/Castle/MicroKernel/MicroKernelTest/Components
                        AvalonMailService2.cs
               
avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/Components
                        IComponent.cs PerThreadComponent.cs
                        SingletonComponent.cs TransientComponent.cs
               avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle
                        LifestyleManagerTestCase.cs
  Log:
  More test cases to microkernel
  
  Revision  Changes    Path
  1.2       +89 -3     
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs
  
  Index: AssemblerTestCase.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AssemblerTestCase.cs      3 Apr 2004 22:58:30 -0000       1.1
  +++ AssemblerTestCase.cs      18 Apr 2004 03:26:02 -0000      1.2
  @@ -18,20 +18,106 @@
   
        using NUnit.Framework;
   
  +     using Apache.Avalon.Framework;
  +     using Apache.Avalon.Castle.MicroKernel.Assemble;
  +     using Apache.Avalon.Castle.MicroKernel.Model;
  +     using Apache.Avalon.Castle.MicroKernel.Model.Default;
  +     using Apache.Avalon.Castle.MicroKernel.Test.Components;
  +
        /// <summary>
        /// Summary description for AssemblerTestCase.
        /// </summary>
  +     [TestFixture]
        public class AssemblerTestCase : Assertion
        {
  -             public void BuildingConstructorArgs()
  +             private AvalonKernel m_kernel = new DefaultKernel();
  +
  +             private DefaultComponentModelBuilder m_builder;
  +
  +             [SetUp]
  +             public void CreateComponentModelBuilder()
  +             {
  +                     m_builder = new DefaultComponentModelBuilder( m_kernel 
);
  +             }
  +
  +             [Test]
  +             public void BuildingConstructorArgsWithDefaultConstructor()
  +             {
  +                     Type service = typeof( IMailService );
  +                     Type implementation = typeof( SimpleMailService );
  +
  +                     IComponentModel model = m_builder.BuildModel( "a", 
service, implementation );
  +
  +                     object[] args = Assembler.BuildConstructorArguments( 
  +                             model, new object(), new 
ResolveTypeHandler(Resolver) );
  +
  +                     AssertNotNull( args );
  +                     AssertEquals( 0, args.Length );
  +             }
  +
  +             [Test]
  +             public void BuildingConstructorArgsWithLoggerConstructor()
                {
  -                     // object[] arguments = 
Assembler.BuildConstructorArguments( model );
  +                     Type service = typeof( IMailService );
  +                     Type implementation = typeof( 
SimpleMailServiceWithLogger );
   
  -                     // Assembler.AssembleProperties( properties, model );
  +                     IComponentModel model = m_builder.BuildModel( "a", 
service, implementation );
  +
  +                     object[] args = Assembler.BuildConstructorArguments( 
  +                             model, new object(), new 
ResolveTypeHandler(Resolver) );
  +
  +                     AssertNotNull( args );
  +                     AssertEquals( 1, args.Length );
  +                     Assert( typeof(ILogger).IsAssignableFrom( 
args[0].GetType() ) );
                }
   
  +             [Test]
  +             public void BuildingConstructorArgsWithDependencyConstructor()
  +             {
  +                     Type service = typeof( ISpamService );
  +                     Type implementation = typeof( SimpleSpamService );
  +
  +                     IComponentModel model = m_builder.BuildModel( "a", 
service, implementation );
  +
  +                     object[] args = Assembler.BuildConstructorArguments( 
  +                             model, new object(), new 
ResolveTypeHandler(Resolver) );
  +
  +                     AssertNotNull( args );
  +                     AssertEquals( 1, args.Length );
  +                     Assert( typeof(IMailService).IsAssignableFrom( 
args[0].GetType() ) );
  +             }
  +
  +             [Test]
  +             public void IsKnown()
  +             {
  +                     Assert( Assembler.IsKnown( typeof(ILogger), "arg" ) );
  +                     Assert( !Assembler.IsKnown( typeof(IMailService), "arg" 
) );
  +             }
  +
  +             [Test]
                public void AssembleProperties()
                {
  +                     Type service = typeof( ISpamService2 );
  +                     Type implementation = typeof( AvalonSpamService3 );
  +
  +                     object instance = Activator.CreateInstance( 
implementation );
  +
  +                     IComponentModel model = m_builder.BuildModel( "a", 
service, implementation );
  +
  +                     Assembler.AssembleProperties( instance, model, new 
object(), new ResolveTypeHandler(Resolver) );
  +
  +                     ISpamService2 serviceInstance = instance as 
ISpamService2;
  +
  +                     AssertNotNull( serviceInstance );
  +                     Assert( typeof(IMailService).IsAssignableFrom( 
serviceInstance.MailService.GetType() ) );
  +             }
  +
  +             private void Resolver(
  +                     IComponentModel model, Type typeRequest, String 
argumentOrPropertyName, 
  +                     object key, out object value )
  +             {
  +                     AssertEquals( typeof(IMailService), typeRequest );
  +                     value = new SimpleMailService();
                }
        }
   }
  
  
  
  1.2       +5 -0      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
  
  Index: ConcernManagerTestCase.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ConcernManagerTestCase.cs 3 Apr 2004 22:58:30 -0000       1.1
  +++ ConcernManagerTestCase.cs 18 Apr 2004 03:26:02 -0000      1.2
  @@ -93,6 +93,11 @@
                        AssertNotNull( concern );
                        AssertNotNull( concern is IDecommissionConcern );
                        AssertNotNull( concern is ShutdownConcern );
  +                     AssertNotNull( concern.Next );
  +
  +                     concern = concern.Next;
  +                     AssertNotNull( concern is IDestructionConcern );
  +                     AssertNotNull( concern is DestructionConcern );
                        AssertNull( concern.Next );
                }
        }
  
  
  
  1.2       +1 -0      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs
  
  Index: DefaultComponentModelBuilderTestCase.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultComponentModelBuilderTestCase.cs   3 Apr 2004 22:58:30 -0000       
1.1
  +++ DefaultComponentModelBuilderTestCase.cs   18 Apr 2004 03:26:02 -0000      
1.2
  @@ -109,6 +109,7 @@
                        IComponentModel model = 
                                builder.BuildModel( "a", service, 
implementation );
   
  +                     AssertEquals( 
Apache.Avalon.Framework.Lifestyle.Singleton, model.SupportedLifestyle );
                        AssertNotNull( model );
                        AssertNotNull( model.Logger );
                        AssertNotNull( model.Configuration );
  
  
  
  1.2       +1 -1      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultKernelTestCase.cs
  
  Index: DefaultKernelTestCase.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultKernelTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultKernelTestCase.cs  3 Apr 2004 22:58:30 -0000       1.1
  +++ DefaultKernelTestCase.cs  18 Apr 2004 03:26:02 -0000      1.2
  @@ -58,7 +58,7 @@
                public void SimpleAvalonComponent()
                {
                        AvalonKernel container = new DefaultKernel();
  -                     container.AddComponent( "a", typeof(IMailService), 
typeof(AvalonMailService) );
  +                     container.AddComponent( "a", typeof(IMailService), 
typeof(AvalonMailService2) );
   
                        IHandler handler = container[ "a" ];
   
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
  
  Index: Apache.Avalon.Castle.MicroKernel.Test.csproj
  ===================================================================
  <VisualStudioProject>
      <CSHARP
          ProjectType = "Local"
          ProductVersion = "7.10.3077"
          SchemaVersion = "2.0"
          ProjectGuid = "{50442F0D-987F-4A8D-B38C-DFA855B9249E}"
      >
          <Build>
              <Settings
                  ApplicationIcon = ""
                  AssemblyKeyContainerName = ""
                  AssemblyName = "Apache.Avalon.Castle.MicroKernel.Test"
                  AssemblyOriginatorKeyFile = ""
                  DefaultClientScript = "JScript"
                  DefaultHTMLPageLayout = "Grid"
                  DefaultTargetSchema = "IE50"
                  DelaySign = "false"
                  OutputType = "Library"
                  PreBuildEvent = ""
                  PostBuildEvent = ""
                  RootNamespace = "Apache.Avalon.Castle.MicroKernel.Test"
                  RunPostBuildEvent = "OnBuildSuccess"
                  StartupObject = ""
              >
                  <Config
                      Name = "Debug"
                      AllowUnsafeBlocks = "false"
                      BaseAddress = "285212672"
                      CheckForOverflowUnderflow = "false"
                      ConfigurationOverrideFile = ""
                      DefineConstants = "DEBUG;TRACE"
                      DocumentationFile = ""
                      DebugSymbols = "true"
                      FileAlignment = "4096"
                      IncrementalBuild = "false"
                      NoStdLib = "false"
                      NoWarn = ""
                      Optimize = "false"
                      OutputPath = "..\..\bin\"
                      RegisterForComInterop = "false"
                      RemoveIntegerChecks = "false"
                      TreatWarningsAsErrors = "false"
                      WarningLevel = "4"
                  />
                  <Config
                      Name = "Release"
                      AllowUnsafeBlocks = "false"
                      BaseAddress = "285212672"
                      CheckForOverflowUnderflow = "false"
                      ConfigurationOverrideFile = ""
                      DefineConstants = "TRACE"
                      DocumentationFile = ""
                      DebugSymbols = "false"
                      FileAlignment = "4096"
                      IncrementalBuild = "false"
                      NoStdLib = "false"
                      NoWarn = ""
                      Optimize = "true"
                      OutputPath = "bin\Release\"
                      RegisterForComInterop = "false"
                      RemoveIntegerChecks = "false"
                      TreatWarningsAsErrors = "false"
                      WarningLevel = "4"
                  />
              </Settings>
              <References>
                  <Reference
                      Name = "System"
                      AssemblyName = "System"
                      HintPath = 
"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
                  />
                  <Reference
                      Name = "System.Data"
                      AssemblyName = "System.Data"
                      HintPath = 
"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
                  />
                  <Reference
                      Name = "System.XML"
                      AssemblyName = "System.Xml"
                      HintPath = 
"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
                  />
                  <Reference
                      Name = "nunit.framework"
                      AssemblyName = "nunit.framework"
                      HintPath = 
"..\..\..\..\..\..\..\..\dotnet\NUnit2\bin\nunit.framework.dll"
                  />
                  <Reference
                      Name = "MicroKernel"
                      Project = "{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}"
                      Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
                  />
                  <Reference
                      Name = "Apache.Avalon.Framework"
                      AssemblyName = "Apache.Avalon.Framework"
                      HintPath = "..\..\bin\Apache.Avalon.Framework.dll"
                  />
              </References>
          </Build>
          <Files>
              <Include>
                  <File
                      RelPath = "AbstractHandlerTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "AssemblerTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "AssemblyInfo.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "BaseKernelTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "ConcernManagerTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "DefaultComponentModelBuilderTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "DefaultConfigurationManagerTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "DefaultKernelTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "DependencyDisposeTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "SimpleComponentFactoryTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\AvalonMailService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\AvalonMailService2.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\AvalonSpamService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\AvalonSpamService2.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\AvalonSpamService3.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\ICustomerManager.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\IMailMarketingService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\IMailService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\ISpamService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\ISpamService2.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\SimpleCustomerManager.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\SimpleMailMarketingService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\SimpleMailService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\SimpleMailServiceWithLogger.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Components\SimpleSpamService.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\AbstractConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\ConfigureConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\ContextConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\EnableLoggerConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\EnableLookupConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\InitializeConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\ShutdownConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Concerns\StartConcernTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Lifestyle\LifestyleManagerTestCase.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Lifestyle\Components\IComponent.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Lifestyle\Components\PerThreadComponent.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Lifestyle\Components\SingletonComponent.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "Lifestyle\Components\TransientComponent.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
              </Include>
          </Files>
      </CSHARP>
  </VisualStudioProject>
  
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultConfigurationManagerTestCase.cs
  
  Index: DefaultConfigurationManagerTestCase.cs
  ===================================================================
  // 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.Framework;
        using Apache.Avalon.Castle.MicroKernel;
        using Apache.Avalon.Castle.MicroKernel.Model;
        using Apache.Avalon.Castle.MicroKernel.Model.Default;
        using Apache.Avalon.Castle.MicroKernel.Configuration;
        using Apache.Avalon.Castle.MicroKernel.Configuration.Default;
        using Apache.Avalon.Castle.MicroKernel.Test.Components;
  
        /// <summary>
        /// Summary description for DefaultConfigurationManagerTestCase.
        /// </summary>
        [TestFixture]
        public class DefaultConfigurationManagerTestCase : Assertion
        {
                [Test]
                public void TestUsage()
                {
                        DefaultConfigurationManager config = new 
DefaultConfigurationManager();
                        IConfiguration componentConfig = 
config.GetConfiguration( "component1" );
  
                        AssertNotNull( componentConfig );
                        AssertEquals( "johndoe", 
componentConfig.GetChild("name", true).Value );
                        AssertEquals( "1099", componentConfig.GetChild("port", 
true).Value );
                }
  
                [Test]
                public void TestNoContentConfig()
                {
                        DefaultConfigurationManager config = new 
DefaultConfigurationManager();
                        IConfiguration componentConfig = 
config.GetConfiguration( "component2" );
  
                        AssertNotNull( componentConfig );
                        AssertEquals( 0, componentConfig.Attributes.Count );
                        AssertEquals( 0, componentConfig.Children.Count );
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/DependencyDisposeTestCase.cs
  
  Index: DependencyDisposeTestCase.cs
  ===================================================================
  // 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.Model;
        using Apache.Avalon.Castle.MicroKernel.Model.Default;
        using Apache.Avalon.Castle.MicroKernel.Test.Components;
  
        /// <summary>
        /// Summary description for DependencyDisposeTestCase.
        /// </summary>
        [TestFixture]
        public class DependencyDisposeTestCase : Assertion
        {
                [Test]
                public void SingletonDependencyDisposal()
                {
                        AvalonKernel container = new DefaultKernel();
                        container.AddComponent( "a", typeof(IMailService), 
typeof(AvalonMailService) );
                        container.AddComponent( "b", typeof(ISpamService2), 
typeof(AvalonSpamService3) );
  
                        IHandler handler = container[ "b" ];
                        ISpamService2 spamService = handler.Resolve() as 
ISpamService2;
                        AssertNotNull( spamService );
  
                        AssertNotNull( spamService.MailService );
                        AvalonMailService mailService = (AvalonMailService) 
spamService.MailService;
  
                        Assert( !mailService.disposed );
  
                        handler.Release( spamService );
  
                        Assert( "A singleton component should have not been 
disposed", !mailService.disposed );
                }
  
                [Test]
                public void TransientDependencyDisposal()
                {
                        AvalonKernel container = new DefaultKernel();
                        container.AddComponent( "a", typeof(IMailService), 
typeof(AvalonMailService2) );
                        container.AddComponent( "b", typeof(ISpamService2), 
typeof(AvalonSpamService3) );
  
                        IHandler handler = container[ "b" ];
                        ISpamService2 spamService = handler.Resolve() as 
ISpamService2;
                        AssertNotNull( spamService );
  
                        AssertNotNull( spamService.MailService );
                        AvalonMailService mailService = (AvalonMailService) 
spamService.MailService;
  
                        Assert( !mailService.disposed );
  
                        handler.Release( spamService );
  
                        Assert( "A transient component should have been 
disposed", mailService.disposed );
                }
  
        }
  }
  
  
  
  1.3       +2 -1      
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/AvalonMailService.cs
  
  Index: AvalonMailService.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/AvalonMailService.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AvalonMailService.cs      3 Apr 2004 22:58:30 -0000       1.2
  +++ AvalonMailService.cs      18 Apr 2004 03:26:02 -0000      1.3
  @@ -23,7 +23,8 @@
        /// </summary>
        [AvalonComponent("mailservice", Lifestyle.Singleton)]
        [AvalonService( typeof(IMailService) )]
  -     public class AvalonMailService : IMailService, IInitializable, 
IConfigurable, IDisposable
  +     public class AvalonMailService : 
  +             IMailService, IInitializable, IConfigurable, IDisposable
        {
                public bool initialized;
                public bool configured;
  
  
  
  1.2       +13 -2     
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/AvalonSpamService3.cs
  
  Index: AvalonSpamService3.cs
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/AvalonSpamService3.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AvalonSpamService3.cs     3 Apr 2004 22:58:30 -0000       1.1
  +++ AvalonSpamService3.cs     18 Apr 2004 03:26:02 -0000      1.2
  @@ -21,12 +21,14 @@
        /// <summary>
        /// Summary description for AvalonSpamService3.
        /// </summary>
  -     [AvalonComponent("spamservice2", Lifestyle.Singleton)]
  +     [AvalonComponent("spamservice2", Lifestyle.Transient)]
        [AvalonService( typeof(ISpamService2) )]
  -     public class AvalonSpamService3 : IInitializable, ISpamService2
  +     public class AvalonSpamService3 : IInitializable, ISpamService2, 
IDisposable
        {
                public IMailService m_mailService;
   
  +             public bool disposed = false;
  +
                public AvalonSpamService3()
                {
                }
  @@ -63,6 +65,15 @@
                        {
                                throw new Exception("Dependency not 
satisfied.");
                        }
  +             }
  +
  +             #endregion
  +
  +             #region IDisposable Members
  +
  +             public void Dispose()
  +             {
  +                     disposed = true;
                }
   
                #endregion
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Components/AvalonMailService2.cs
  
  Index: AvalonMailService2.cs
  ===================================================================
  // 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 AvalonMailService2.
        /// </summary>
        [AvalonComponent("mailservice", Lifestyle.Transient)]
        [AvalonService( typeof(IMailService) )]
        public class AvalonMailService2 : 
                AvalonMailService
        {
                public AvalonMailService2()
                {
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/Components/IComponent.cs
  
  Index: IComponent.cs
  ===================================================================
  // 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.Lifestyle.Components
  {
        using System;
  
        /// <summary>
        /// Summary description for IComponent.
        /// </summary>
        public interface IComponent
        {
                int ID
                {
                        get;
                }
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/Components/PerThreadComponent.cs
  
  Index: PerThreadComponent.cs
  ===================================================================
  // 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.Lifestyle.Components
  {
        using System;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Summary description for PerThreadComponent.
        /// </summary>
        [AvalonComponent("component2", Lifestyle.Thread)]
        [AvalonService( typeof(IComponent) )]
        public class PerThreadComponent : IComponent
        {
                public PerThreadComponent()
                {
                }
  
                #region IComponent Members
  
                public int ID
                {
                        get
                        {
                                return this.GetHashCode();
                        }
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/Components/SingletonComponent.cs
  
  Index: SingletonComponent.cs
  ===================================================================
  // 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.Lifestyle.Components
  {
        using System;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Summary description for SingletonComponent.
        /// </summary>
        [AvalonComponent("component3", Lifestyle.Singleton)]
        [AvalonService( typeof(IComponent) )]
        public class SingletonComponent : IComponent
        {
                public SingletonComponent()
                {
                }
  
                #region IComponent Members
  
                public int ID
                {
                        get
                        {
                                return this.GetHashCode();
                        }
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/Components/TransientComponent.cs
  
  Index: TransientComponent.cs
  ===================================================================
  // 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.Lifestyle.Components
  {
        using System;
  
        using Apache.Avalon.Framework;
  
        /// <summary>
        /// Summary description for TransientComponent.
        /// </summary>
        [AvalonComponent("component1", Lifestyle.Transient)]
        [AvalonService( typeof(IComponent) )]
        public class TransientComponent : IComponent
        {
                public TransientComponent()
                {
                }
  
                #region IComponent Members
  
                public int ID
                {
                        get
                        {
                                return this.GetHashCode();
                        }
                }
  
                #endregion
        }
  }
  
  
  
  1.1                  
avalon-sandbox/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/LifestyleManagerTestCase.cs
  
  Index: LifestyleManagerTestCase.cs
  ===================================================================
  // 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.Lifestyle
  {
        using System;
        using System.Threading;
  
        using NUnit.Framework;
  
        using Apache.Avalon.Castle.MicroKernel;
        using Apache.Avalon.Castle.MicroKernel.Test.Lifestyle.Components;
  
        /// <summary>
        /// Summary description for LifestyleManagerTestCase.
        /// </summary>
        [TestFixture]
        public class LifestyleManagerTestCase : Assertion
        {
                private AvalonKernel m_kernel;
  
                private IComponent m_instance3;
  
                [SetUp]
                public void CreateContainer()
                {
                        m_kernel = new DefaultKernel();
                }
  
                [Test]
                public void TestTransient()
                {
                        m_kernel.AddComponent( "a", typeof(IComponent), 
typeof(TransientComponent) );
  
                        IHandler handler = m_kernel[ "a" ];
                        
                        IComponent instance1 = handler.Resolve() as IComponent;
                        IComponent instance2 = handler.Resolve() as IComponent;
  
                        AssertNotNull( instance1 );
                        AssertNotNull( instance2 );
  
                        Assert( !instance1.Equals( instance2 ) );
                        Assert( instance1.ID != instance2.ID );
  
                        handler.Release( instance1 );
                        handler.Release( instance2 );
                }
  
                [Test]
                public void TestSingleton()
                {
                        m_kernel.AddComponent( "a", typeof(IComponent), 
typeof(SingletonComponent) );
  
                        IHandler handler = m_kernel[ "a" ];
                        
                        IComponent instance1 = handler.Resolve() as IComponent;
                        IComponent instance2 = handler.Resolve() as IComponent;
  
                        AssertNotNull( instance1 );
                        AssertNotNull( instance2 );
  
                        Assert( instance1.Equals( instance2 ) );
                        Assert( instance1.ID == instance2.ID );
  
                        handler.Release( instance1 );
                        handler.Release( instance2 );
                }
  
                [Test]
                public void TestPerThread()
                {
                        m_kernel.AddComponent( "a", typeof(IComponent), 
typeof(PerThreadComponent) );
  
                        IHandler handler = m_kernel[ "a" ];
                        
                        IComponent instance1 = handler.Resolve() as IComponent;
                        IComponent instance2 = handler.Resolve() as IComponent;
  
                        AssertNotNull( instance1 );
                        AssertNotNull( instance2 );
  
                        Assert( instance1.Equals( instance2 ) );
                        Assert( instance1.ID == instance2.ID );
  
                        Thread thread = new Thread( new 
ThreadStart(OtherThread) );
                        thread.Start();
                        thread.Join();
  
                        AssertNotNull( m_instance3 );
                        Assert( !instance1.Equals( m_instance3 ) );
                        Assert( instance1.ID != m_instance3.ID );
  
                        handler.Release( instance1 );
                        handler.Release( instance2 );
                }
  
                private void OtherThread()
                {
                        IHandler handler = m_kernel[ "a" ];
                        m_instance3 = handler.Resolve() as IComponent;
                }
        }
  }
  
  
  

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

Reply via email to