[ninject commit] r151 - in experiments/ninject2/src/Ninject.Tests: . Integration

4 views
Skip to first unread message

codesite...@google.com

unread,
Feb 21, 2009, 11:09:56 AM2/21/09
to ninje...@googlegroups.com
Author: nkohari
Date: Sat Feb 21 07:24:15 2009
New Revision: 151

Added:
experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
- copied, changed from r150,
/experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
Modified:
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj

Log:


Copied:
experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
(from r150,
/experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject.Tests/Integration/ThreadScopeTests.cs
(original)
+++ experiments/ninject2/src/Ninject.Tests/Integration/RequestScopeTests.cs
Sat Feb 21 07:24:15 2009
@@ -1,92 +1,81 @@
using System;
-using System.Threading;
+using System.IO;
+using System.Web;
using Ninject.Activation.Caching;
using Ninject.Infrastructure.Disposal;
using Ninject.Tests.Fakes;
using Xunit;

-namespace Ninject.Tests.Integration.ThreadScopeTests
+namespace Ninject.Tests.Integration.RequestScopeTests
{
- public class ThreadScopeContext
+ public class RequestScopeContext
{
protected readonly StandardKernel kernel;

- public ThreadScopeContext()
+ public RequestScopeContext()
{
var settings = new NinjectSettings { CachePruningIntervalMs =
Int32.MaxValue };
kernel = new StandardKernel(settings);
}
+
+ public void BeginNewFakeWebRequest()
+ {
+ HttpContext.Current = GetFakeHttpContext();
+ }
+
+ public HttpContext GetFakeHttpContext()
+ {
+ var request = new
HttpRequest("index.html", "http://example.org/index.html", String.Empty);
+ var response = new HttpResponse(new StringWriter());
+ return new HttpContext(request, response);
+ }
}

- public class WhenServiceIsBoundWithThreadScope : ThreadScopeContext
+ public class WhenServiceIsBoundWithRequestScope : RequestScopeContext
{
[Fact]
- public void FirstActivatedInstanceIsReusedWithinThread()
+ public void InstancesAreReusedWithinSameHttpContext()
{
- kernel.Bind<IWeapon>().To<Sword>().InThreadScope();
-
- IWeapon weapon1 = null;
- IWeapon weapon2 = null;
+ kernel.Bind<IWeapon>().To<Sword>().InRequestScope();

- ThreadStart callback = () =>
- {
- weapon1 = kernel.Get<IWeapon>();
- weapon2 = kernel.Get<IWeapon>();
- };
+ BeginNewFakeWebRequest();

- var thread = new Thread(callback);
+ var weapon1 = kernel.Get<IWeapon>();
+ var weapon2 = kernel.Get<IWeapon>();

- thread.Start();
- thread.Join();
-
- weapon1.ShouldNotBeNull();
- weapon2.ShouldNotBeNull();
weapon1.ShouldBeSameAs(weapon2);
- }

- [Fact]
- public void ScopeDoesNotInterfereWithExternalRequests()
- {
- kernel.Bind<IWeapon>().To<Sword>().InThreadScope();
-
- IWeapon weapon1 = kernel.Get<IWeapon>();
- IWeapon weapon2 = null;
+ BeginNewFakeWebRequest();

- ThreadStart callback = () => weapon2 = kernel.Get<IWeapon>();
-
- var thread = new Thread(callback);
+ GC.Collect();
+ GC.WaitForPendingFinalizers();

- thread.Start();
- thread.Join();
+ var weapon3 = kernel.Get<IWeapon>();

- weapon1.ShouldNotBeNull();
- weapon2.ShouldNotBeNull();
- weapon1.ShouldNotBeSameAs(weapon2);
+ weapon3.ShouldNotBeSameAs(weapon1);
+ weapon3.ShouldNotBeSameAs(weapon2);
}

[Fact]
- public void
InstancesActivatedWithinScopeAreDeactivatedAfterThreadIsGarbageCollectedAndCacheIsPruned()
+ public void InstancesAreDisposedWhenRequestEndsAndCacheIsPruned()
{
- kernel.Bind<NotifiesWhenDisposed>().ToSelf().InThreadScope();
+
kernel.Bind<INotifyWhenDisposed>().To<NotifiesWhenDisposed>().InRequestScope();
var cache = kernel.Components.Get<ICache>();

- NotifiesWhenDisposed instance = null;
-
- ThreadStart callback = () => instance =
kernel.Get<NotifiesWhenDisposed>();
+ BeginNewFakeWebRequest();

- var thread = new Thread(callback);
+ var instance = kernel.Get<INotifyWhenDisposed>();

- thread.Start();
- thread.Join();
+ instance.ShouldNotBeNull();
+ instance.ShouldBeInstanceOf<NotifiesWhenDisposed>();

- thread = null;
+ BeginNewFakeWebRequest();

GC.Collect();
GC.WaitForPendingFinalizers();

cache.Prune();

- instance.ShouldNotBeNull();
instance.IsDisposed.ShouldBeTrue();
}
}

Modified:
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
==============================================================================
---
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
(original)
+++
experiments/ninject2/src/Ninject.Tests/Integration/StandardKernelTests.cs
Sat Feb 21 07:24:15 2009
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using Ninject.Tests.Fakes;
using Xunit;
@@ -150,6 +151,24 @@
weapons[0].ShouldBeInstanceOf<Sword>();
weapons[1].ShouldBeInstanceOf<Shuriken>();
}
+
+ [Fact]
+ public void DoesNotActivateItemsUntilTheEnumeratorRunsOverThem()
+ {
+ kernel.Bind<IInitializable>().To<InitializableA>();
+ kernel.Bind<IInitializable>().To<InitializableB>();
+
+ IEnumerable<IInitializable> instances = kernel.GetAll<IInitializable>();
+ IEnumerator<IInitializable> enumerator = instances.GetEnumerator();
+
+ InitializableA.Count.ShouldBe(0);
+ enumerator.MoveNext();
+ InitializableA.Count.ShouldBe(1);
+ InitializableB.Count.ShouldBe(0);
+ enumerator.MoveNext();
+ InitializableA.Count.ShouldBe(1);
+ InitializableB.Count.ShouldBe(1);
+ }
}

public class
WhenGetAllIsCalledForGenericServiceRegisteredViaOpenGenericType :
StandardKernelContext
@@ -196,8 +215,24 @@
}
}

- public class WhenGetAllIsCalledWithName : StandardKernelContext
+ public class InitializableA : IInitializable
{
+ public static int Count = 0;
+
+ public void Initialize()
+ {
+ Count++;
+ }
+ }
+
+ public class InitializableB : IInitializable
+ {
+ public static int Count = 0;
+
+ public void Initialize()
+ {
+ Count++;
+ }
}

public interface IGeneric<T> { }

Modified: experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj
==============================================================================
--- experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj (original)
+++ experiments/ninject2/src/Ninject.Tests/Ninject.Tests.csproj Sat Feb 21
07:24:15 2009
@@ -47,12 +47,19 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
+ <Reference Include="System.Web" />
+ <Reference Include="System.Web.Abstractions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\lib\System.Web.Abstractions.dll</HintPath>
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
<Reference Include="xunit, Version=1.1.0.1323, Culture=neutral,
PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\tools\xunit.net\xunit.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="Integration\RequestScopeTests.cs" />
<Compile Include="Integration\ExternalInjectionTests.cs" />
<Compile Include="Fakes\NotifiesWhenDisposed.cs" />
<Compile Include="SpecExtensions.cs" />
Reply all
Reply to author
Forward
0 new messages