From: <jer...@us...> - 2007-12-30 16:31:13
|
Revision: 51 http://structuremap.svn.sourceforge.net/structuremap/?rev=51&view=rev Author: jeremydmiller Date: 2007-12-30 08:31:10 -0800 (Sun, 30 Dec 2007) Log Message: ----------- updating RhinoMocks, the first cut at automocking, some clean up Modified Paths: -------------- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/Configuration/FamilyParser.cs trunk/Source/StructureMap/ConstructorMemento.cs trunk/Source/StructureMap/Delegates.cs trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs trunk/Source/StructureMap/Graph/Plugin.cs trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/InstanceBuilder.cs trunk/Source/StructureMap/InstanceFactory.cs trunk/Source/StructureMap/InstanceManager.cs trunk/Source/StructureMap/InstanceMemento.cs trunk/Source/StructureMap/MemoryInstanceMemento.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj trunk/bin/Rhino.Mocks.dll Added Paths: ----------- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs trunk/Source/StructureMap.Testing/NewFolder1/ Removed Paths: ------------- trunk/Source/StructureMap.Testing.GenericWidgets/bin/ Property Changed: ---------------- trunk/Source/StructureMap.Testing/ Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -167,7 +167,7 @@ public void ParseFamilies(IGraphBuilder builder) { FamilyParser familyParser = new FamilyParser(builder, _mementoCreator); - + XmlNodeList familyNodes = findNodes(XmlConstants.PLUGIN_FAMILY_NODE); foreach (XmlElement familyElement in familyNodes) { @@ -185,7 +185,6 @@ { familyParser.ParseInstanceElement(element); } - } Modified: trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -39,7 +39,7 @@ public override void ValidatePluggability(Type pluginType) { - if (!pluginType.Equals(typeof(PLUGINTYPE))) + if (!pluginType.Equals(typeof (PLUGINTYPE))) { throw new StructureMapException(306, typeof (PLUGINTYPE).FullName, pluginType.FullName); Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -20,7 +20,7 @@ public CreatePluginFamilyExpression() { - _pluginType = typeof(PLUGINTYPE); + _pluginType = typeof (PLUGINTYPE); } void IExpression.Configure(PluginGraph graph) @@ -70,7 +70,7 @@ builder.ValidatePluggability(_pluginType); _children.Add(builder); - _alterations.Add(delegate (PluginFamily family) + _alterations.Add(delegate(PluginFamily family) { InstanceMemento memento = builder.BuildMemento(family); family.Source.AddExternalMemento(memento); @@ -86,7 +86,8 @@ /// </summary> /// <typeparam name="CONCRETETYPE"></typeparam> /// <returns></returns> - public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE + public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() + where CONCRETETYPE : PLUGINTYPE { ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(_pluginType); @@ -130,20 +131,16 @@ public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(StartupHandler<PLUGINTYPE> handler) { - _alterations.Add(delegate (PluginFamily family) - { - family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); - }); + _alterations.Add( + delegate(PluginFamily family) { family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); }); return this; } public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(EnrichmentHandler<PLUGINTYPE> handler) { - _alterations.Add(delegate(PluginFamily family) - { - family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); - }); + _alterations.Add( + delegate(PluginFamily family) { family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); }); return this; } Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -102,10 +102,10 @@ { Plugin plugin = Plugin.CreateImplicitPlugin(_pluggedType); string propertyName = plugin.FindFirstConstructorArgumentOfType<T>(); - + if (string.IsNullOrEmpty(propertyName)) { - throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof(T))); + throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof (T))); } return propertyName; @@ -173,7 +173,8 @@ { validateTypeIsArray<PLUGINTYPE>(); - ChildArrayExpression<PLUGINTYPE> expression = new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName); + ChildArrayExpression<PLUGINTYPE> expression = + new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName); addChildExpression(expression); return expression; @@ -181,12 +182,10 @@ private static void validateTypeIsArray<PLUGINTYPE>() { - if (!typeof(PLUGINTYPE).IsArray) + if (!typeof (PLUGINTYPE).IsArray) { throw new StructureMapException(307); } } - - } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -24,12 +24,10 @@ void IMementoBuilder.SetInstanceName(string instanceKey) { - } void IMementoBuilder.ValidatePluggability(Type pluginType) { - } Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -75,7 +75,7 @@ CreatePluginFamilyExpression<PLUGINTYPE> expression = new CreatePluginFamilyExpression<PLUGINTYPE>(); addExpression(expression); - return expression; + return expression; } public IInstanceManager BuildInstanceManager() @@ -97,7 +97,6 @@ return expression.TypeExpression(); } - /// <summary> /// Convenience method to start the definition of an instance of type T @@ -223,6 +222,5 @@ { return new ReferenceMementoBuilder(referencedKey); } - } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs =================================================================== --- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -117,8 +117,5 @@ _builder.AddInterceptor(pluginTypePath, interceptorMemento); } } - - - } } \ No newline at end of file Modified: trunk/Source/StructureMap/ConstructorMemento.cs =================================================================== --- trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -22,7 +22,6 @@ public ConstructorMemento(BuildObjectDelegate<PLUGINTYPE> builder) : this(Guid.NewGuid().ToString(), builder) { - } protected override object buildInstance(IInstanceCreator creator) @@ -37,4 +36,4 @@ set { _builder = value; } } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/Delegates.cs =================================================================== --- trunk/Source/StructureMap/Delegates.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Delegates.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,6 +1,7 @@ namespace StructureMap { public delegate T EnrichmentHandler<T>(T target); + public delegate void StartupHandler<T>(T target); public interface InstanceInterceptor @@ -48,4 +49,4 @@ return _handler((T) target); } } -} +} \ No newline at end of file Modified: trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs =================================================================== --- trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -65,7 +65,8 @@ _sourceConfigDocument = new XmlDocument(); _sourceConfigDocument.Load(configPath); - PluginGraphBuilder builder = new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement)); + PluginGraphBuilder builder = + new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement)); _report = createPluginGraphReport(builder); _defaultManager = builder.DefaultManager; Modified: trunk/Source/StructureMap/Graph/Plugin.cs =================================================================== --- trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -16,7 +16,7 @@ public static Plugin CreateAutofilledPlugin(Type concreteType) { string pluginKey = Guid.NewGuid().ToString(); - Plugin plugin = Plugin.CreateExplicitPlugin(concreteType, pluginKey, string.Empty); + Plugin plugin = CreateExplicitPlugin(concreteType, pluginKey, string.Empty); if (!plugin.CanBeAutoFilled) { throw new StructureMapException(231); @@ -140,6 +140,25 @@ return new Plugin(pluggedType, concreteKey, DefinitionSource.Explicit); } + public static ConstructorInfo GetGreediestConstructor(Type pluggedType) + { + ConstructorInfo returnValue = null; + + foreach (ConstructorInfo constructor in pluggedType.GetConstructors()) + { + if (returnValue == null) + { + returnValue = constructor; + } + else if (constructor.GetParameters().Length > returnValue.GetParameters().Length) + { + returnValue = constructor; + } + } + + return returnValue; + } + #endregion private Type _pluggedType; @@ -231,17 +250,7 @@ // if no constructor is marked as the "ContainerConstructor", find the greediest constructor if (returnValue == null) { - foreach (ConstructorInfo constructor in _pluggedType.GetConstructors()) - { - if (returnValue == null) - { - returnValue = constructor; - } - else if (constructor.GetParameters().Length > returnValue.GetParameters().Length) - { - returnValue = constructor; - } - } + returnValue = GetGreediestConstructor(_pluggedType); } if (returnValue == null) @@ -252,6 +261,8 @@ return returnValue; } + + /// <summary> /// The ConcreteKey that identifies the Plugin within a PluginFamily /// </summary> Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,5 +1,4 @@ using System; -using System.Reflection; using StructureMap.Interceptors; using StructureMap.Source; @@ -160,17 +159,17 @@ } Type[] pluginArgs = _pluginType.GetGenericArguments(); Type[] pluggableArgs = interfaceType.GetGenericArguments(); - + if (templateTypes.Length != pluginArgs.Length && pluginArgs.Length != pluggableArgs.Length) { return false; } - + for (int i = 0; i < templateTypes.Length; i++) { isValid &= templateTypes[i] == pluggableArgs[i] || - pluginArgs[i].IsGenericParameter && + pluginArgs[i].IsGenericParameter && pluggableArgs[i].IsGenericParameter; } return isValid; Modified: trunk/Source/StructureMap/InstanceBuilder.cs =================================================================== --- trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,5 +1,4 @@ using System; -using StructureMap.Graph; namespace StructureMap { @@ -35,5 +34,10 @@ Type plugged = Type.GetType(PluggedType); return plugged.Equals(type); } + + //public Type GetPluggedType() + //{ + // return Type.GetType(PluggedType); + //} } } \ No newline at end of file Modified: trunk/Source/StructureMap/InstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/InstanceFactory.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceFactory.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -21,6 +21,7 @@ private InstanceInterceptor _interceptor = new NulloInterceptor(); #region static constructors + public static InstanceFactory CreateFactoryWithDefault(Type pluginType, object defaultInstance) { PluginFamily family = new PluginFamily(pluginType); @@ -29,9 +30,9 @@ return factory; } + #endregion - #region constructor functions private InstanceFactory() @@ -363,7 +364,7 @@ } Plugin plugin = Plugin.CreateImplicitPlugin(typeof (T)); - processPlugins(new Plugin[]{plugin}); + processPlugins(new Plugin[] {plugin}); plugin.AddToSource(_source); return plugin.CreateImplicitMemento(); Modified: trunk/Source/StructureMap/InstanceManager.cs =================================================================== --- trunk/Source/StructureMap/InstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -422,7 +422,7 @@ public void AddInstance<PLUGINTYPE, CONCRETETYPE>() { - IInstanceFactory factory = getOrCreateFactory(typeof(PLUGINTYPE), createFactory); + IInstanceFactory factory = getOrCreateFactory(typeof (PLUGINTYPE), createFactory); InstanceMemento memento = factory.AddType<CONCRETETYPE>(); factory.AddInstance(memento); } Modified: trunk/Source/StructureMap/InstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/InstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/InstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -281,7 +281,8 @@ } catch (Exception e) { - throw new StructureMapException(308, e, InstanceKey, TypePath.GetAssemblyQualifiedName(instance.GetType())); + throw new StructureMapException(308, e, InstanceKey, + TypePath.GetAssemblyQualifiedName(instance.GetType())); } } Modified: trunk/Source/StructureMap/MemoryInstanceMemento.cs =================================================================== --- trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -7,8 +7,9 @@ public class GenericMemento<T> : MemoryInstanceMemento { public GenericMemento(string instanceKey) - : base(Plugin.CreateImplicitPlugin(typeof(T)).ConcreteKey, instanceKey) - {} + : base(Plugin.CreateImplicitPlugin(typeof (T)).ConcreteKey, instanceKey) + { + } } /// <summary> Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -81,7 +81,7 @@ if (_pullConfigurationFromAppConfig) { IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration(); - foreach(XmlNode appConfigNode in appConfigNodes) + foreach (XmlNode appConfigNode in appConfigNodes) { _collection.IncludeNode( delegate() { return appConfigNode; }); Modified: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,12 +1,9 @@ using System; +using Rhino.Mocks; namespace StructureMap.AutoMocking { - public interface ServiceLocator - { - T Service<T>(); - object Service(Type serviceType); - } + public class AutoMockedInstanceManager : InstanceManager { Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,46 +1,61 @@ using System; using System.Collections.Generic; +using System.Reflection; using Rhino.Mocks; +using StructureMap.Graph; namespace StructureMap.AutoMocking { public delegate void GenericVoidMethod<TARGETCLASS>(TARGETCLASS target); public delegate void VoidMethod(); - public class RhinoAutoMocker : MockRepository, ServiceLocator + + + + public class RhinoAutoMocker<TARGETCLASS> : MockRepository where TARGETCLASS : class { - private Dictionary<Type, object> _services; private AutoMockedInstanceManager _manager; public RhinoAutoMocker() { - _services = new Dictionary<Type, object>(); - _manager = new AutoMockedInstanceManager(this); + + RhinoMocksServiceLocator locator = new RhinoMocksServiceLocator(this); + _manager = new AutoMockedInstanceManager(locator); + } - public TARGETCLASS Create<TARGETCLASS>() + public TARGETCLASS Create() { - throw new NotImplementedException(); + return _manager.FillDependencies<TARGETCLASS>(); } - public T Service<T>() + public TARGETCLASS CreatePartialMocked() { - throw new NotImplementedException(); + return PartialMock<TARGETCLASS>(getConstructorArgs()); } - public T UsePartialMock<T>() + private object[] getConstructorArgs() { - throw new NotImplementedException(); + ConstructorInfo ctor = Plugin.GetGreediestConstructor(typeof(TARGETCLASS)); + List<object> list = new List<object>(); + foreach (ParameterInfo parameterInfo in ctor.GetParameters()) + { + Type dependencyType = parameterInfo.ParameterType; + object dependency = _manager.CreateInstance(dependencyType); + list.Add(dependency); + } + + return list.ToArray(); } - public void Inject<T>(T stub) + public T Service<T>() { - throw new NotImplementedException(); + return _manager.CreateInstance<T>(); } - public object Service(Type serviceType) + public void InjectStub<T>(T stub) { - throw new NotImplementedException(); + _manager.InjectStub<T>(stub); } } } Added: trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -0,0 +1,30 @@ +using System; +using Rhino.Mocks; + +namespace StructureMap.AutoMocking +{ + public class RhinoMocksServiceLocator : ServiceLocator + { + private readonly MockRepository _mocks; + + public RhinoMocksServiceLocator(MockRepository mocks) + { + _mocks = mocks; + } + + + public RhinoMocksServiceLocator() : this(new MockRepository()) + { + } + + public T Service<T>() + { + return _mocks.CreateMock<T>(); + } + + public object Service(Type serviceType) + { + return _mocks.CreateMock(serviceType); + } + } +} \ No newline at end of file Added: trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs (rev 0) +++ trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -0,0 +1,10 @@ +using System; + +namespace StructureMap.AutoMocking +{ + public interface ServiceLocator + { + T Service<T>(); + object Service(Type serviceType); + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj =================================================================== --- trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-30 16:31:10 UTC (rev 51) @@ -43,6 +43,8 @@ <Compile Include="AutoMockedInstanceManager.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="RhinoAutoMocker.cs" /> + <Compile Include="RhinoMocksServiceLocator.cs" /> + <Compile Include="ServiceLocator.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\StructureMap\StructureMap.csproj"> Property changes on: trunk/Source/StructureMap.Testing ___________________________________________________________________ Name: svn:ignore - bin obj *.csproj.user + bin obj *.csproj.user [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-30 16:31:10 UTC (rev 51) @@ -1,14 +1,215 @@ +using System; using NUnit.Framework; using Rhino.Mocks; +using Rhino.Mocks.Impl; +using Rhino.Mocks.Interfaces; +using StructureMap.AutoMocking; namespace StructureMap.Testing.AutoMocking { [TestFixture] public class RhinoAutoMockerTester { + private MockRepository _mocks; + private RhinoMocksServiceLocator _locator; + private AutoMockedInstanceManager _instanceManager; + [SetUp] public void SetUp() { + _mocks = new MockRepository(); + _locator = new RhinoMocksServiceLocator(_mocks); + _instanceManager = new AutoMockedInstanceManager(_locator); } + + [Test] + public void GetAFullMockForAServiceThatHasNotPreviouslyBeenRequested() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + + + Assert.IsNotNull(service); + IMockedObject instance = (IMockedObject)service; + Assert.AreSame(_mocks, instance.Repository); + } + + [Test] + public void RequestTheServiceTwiceAndGetTheExactSameMockObject() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>()); + } + + [Test] + public void InjectAStubAndGetTheStubBack() + { + StubService stub = new StubService(); + _instanceManager.InjectStub<IMockedService>(stub); + + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>()); + } + + [Test] + public void AutoFillAConcreteClassWithMocks() + { + IMockedService service = _instanceManager.CreateInstance<IMockedService>(); + IMockedService2 service2 = _instanceManager.CreateInstance<IMockedService2>(); + IMockedService3 service3 = _instanceManager.CreateInstance<IMockedService3>(); + + ConcreteClass concreteClass = _instanceManager.FillDependencies<ConcreteClass>(); + Assert.AreSame(service, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + [Test] + public void UseTheAutoMockerToStartUpTheConcreteClass() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + using (autoMocker.Record()) + { + Expect.Call(autoMocker.Service<IMockedService>().Name).Return("Jeremy"); + } + + Assert.AreEqual("Jeremy", autoMocker.Create().Name); + } + + [Test] + public void UseTheAutoMockerToStartUpTheConcreteClassAsAPartialMockAndSetTheNameMethodUp() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + + using (autoMocker.Record()) + { + Expect.Call(concreteClass.Name).Return("Max"); + } + + Assert.AreEqual("Max", concreteClass.Name); + } + + [Test] + public void TheAutoMockerPushesInMocksForAllOfTheConstructorArgumentsForAPartialMock() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + + IMockedService service = autoMocker.Service<IMockedService>(); + IMockedService2 service2 = autoMocker.Service<IMockedService2>(); + IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + + ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + + Assert.AreSame(service, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + + [Test] + public void TheAutoMockerPushesInMocksAndAPreBuiltStubForAllOfTheConstructorArguments() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + StubService stub = new StubService(); + autoMocker.InjectStub<IMockedService>(stub); + + IMockedService2 service2 = autoMocker.Service<IMockedService2>(); + IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + + ConcreteClass concreteClass = autoMocker.Create(); + + Assert.AreSame(stub, concreteClass.Service); + Assert.AreSame(service2, concreteClass.Service2); + Assert.AreSame(service3, concreteClass.Service3); + } + + + public class ConcreteClass + { + private readonly IMockedService _service; + private readonly IMockedService2 _service2; + private readonly IMockedService3 _service3; + + public ConcreteClass(IMockedService service, IMockedService2 service2, IMockedService3 service3) + { + _service = service; + _service2 = service2; + _service3 = service3; + } + + public virtual string Name + { + get + { + return _service.Name; + } + } + + public IMockedService Service + { + get { return _service; } + } + + public IMockedService2 Service2 + { + get { return _service2; } + } + + public IMockedService3 Service3 + { + get { return _service3; } + } + } + + public interface IMockedService + { + void Go(); + string Name { get;} + } + + public interface IMockedService2 + { + void Go(); + } + + public interface IMockedService3 + { + void Go(); + } + + + + public class StubService : IMockedService + { + private readonly string _name; + + public StubService() + { + } + + public StubService(string name) + { + _name = name; + } + + + public string Name + { + get { return _name; } + } + + public void Go() + { + throw new NotImplementedException(); + } + } } + + } Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-22 17:45:18 UTC (rev 50) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-30 16:31:10 UTC (rev 51) @@ -99,6 +99,10 @@ <Reference Include="System.Xml"> <Name>System.XML</Name> </Reference> + <ProjectReference Include="..\StructureMap.AutoMocking\StructureMap.AutoMocking.csproj"> + <Project>{0ED1B206-A1C9-4A52-BA87-3BA416C8725C}</Project> + <Name>StructureMap.AutoMocking</Name> + </ProjectReference> <ProjectReference Include="..\StructureMap.Client\StructureMap.Client.csproj"> <Name>StructureMap.Client</Name> <Project>{887C4441-07A4-489D-B8D9-EFE9D28A47CA}</Project> Modified: trunk/bin/Rhino.Mocks.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |