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]