mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Slugs in pages module no longer case sensitive. Introduces concept of transient and singleton dependencies. Singleton dependencies really mean single instance per shell.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042638
This commit is contained in:
@@ -16,6 +16,7 @@ using Orchard.Mvc;
|
||||
using Orchard.Mvc.ModelBinders;
|
||||
using Orchard.Mvc.Routes;
|
||||
using Orchard.Packages;
|
||||
using Orchard.Tests.Environment.TestDependencies;
|
||||
using Orchard.Tests.Mvc.Routes;
|
||||
using Orchard.Tests.Stubs;
|
||||
|
||||
@@ -44,7 +45,7 @@ namespace Orchard.Tests.Environment {
|
||||
builder.Register(_controllerBuilder);
|
||||
builder.Register(_routeCollection);
|
||||
builder.Register(_modelBinderDictionary);
|
||||
builder.Register(new ViewEngineCollection{new WebFormViewEngine()});
|
||||
builder.Register(new ViewEngineCollection { new WebFormViewEngine() });
|
||||
builder.Register(new StuPackageManager()).As<IPackageManager>();
|
||||
});
|
||||
}
|
||||
@@ -78,7 +79,11 @@ namespace Orchard.Tests.Environment {
|
||||
}
|
||||
|
||||
public IEnumerable<Type> GetDependencyTypes() {
|
||||
return Enumerable.Empty<Type>();
|
||||
return new[] {
|
||||
typeof (TestDependency),
|
||||
typeof (TestSingletonDependency),
|
||||
typeof(TestTransientDependency)
|
||||
};
|
||||
}
|
||||
|
||||
public IEnumerable<Type> GetRecordTypes() {
|
||||
@@ -93,5 +98,105 @@ namespace Orchard.Tests.Environment {
|
||||
var runtime2 = host.CreateShell();
|
||||
Assert.That(runtime1, Is.Not.SameAs(runtime2));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void NormalDependenciesShouldBeUniquePerRequestContainer() {
|
||||
var host = (DefaultOrchardHost)_container.Resolve<IOrchardHost>();
|
||||
var container1 = host.CreateShellContainer();
|
||||
var container2 = host.CreateShellContainer();
|
||||
var requestContainer1a = container1.CreateInnerContainer();
|
||||
var requestContainer1b = container1.CreateInnerContainer();
|
||||
var requestContainer2a = container2.CreateInnerContainer();
|
||||
var requestContainer2b = container2.CreateInnerContainer();
|
||||
|
||||
var dep1 = container1.Resolve<ITestDependency>();
|
||||
var dep1a = requestContainer1a.Resolve<ITestDependency>();
|
||||
var dep1b = requestContainer1b.Resolve<ITestDependency>();
|
||||
var dep2 = container2.Resolve<ITestDependency>();
|
||||
var dep2a = requestContainer2a.Resolve<ITestDependency>();
|
||||
var dep2b = requestContainer2b.Resolve<ITestDependency>();
|
||||
|
||||
Assert.That(dep1, Is.Not.SameAs(dep2));
|
||||
Assert.That(dep1, Is.Not.SameAs(dep1a));
|
||||
Assert.That(dep1, Is.Not.SameAs(dep1b));
|
||||
Assert.That(dep2, Is.Not.SameAs(dep2a));
|
||||
Assert.That(dep2, Is.Not.SameAs(dep2b));
|
||||
|
||||
var again1 = container1.Resolve<ITestDependency>();
|
||||
var again1a = requestContainer1a.Resolve<ITestDependency>();
|
||||
var again1b = requestContainer1b.Resolve<ITestDependency>();
|
||||
var again2 = container2.Resolve<ITestDependency>();
|
||||
var again2a = requestContainer2a.Resolve<ITestDependency>();
|
||||
var again2b = requestContainer2b.Resolve<ITestDependency>();
|
||||
|
||||
Assert.That(again1, Is.SameAs(dep1));
|
||||
Assert.That(again1a, Is.SameAs(dep1a));
|
||||
Assert.That(again1b, Is.SameAs(dep1b));
|
||||
Assert.That(again2, Is.SameAs(dep2));
|
||||
Assert.That(again2a, Is.SameAs(dep2a));
|
||||
Assert.That(again2b, Is.SameAs(dep2b));
|
||||
}
|
||||
[Test]
|
||||
public void SingletonDependenciesShouldBeUniquePerShell() {
|
||||
var host = (DefaultOrchardHost)_container.Resolve<IOrchardHost>();
|
||||
var container1 = host.CreateShellContainer();
|
||||
var container2 = host.CreateShellContainer();
|
||||
var requestContainer1a = container1.CreateInnerContainer();
|
||||
var requestContainer1b = container1.CreateInnerContainer();
|
||||
var requestContainer2a = container2.CreateInnerContainer();
|
||||
var requestContainer2b = container2.CreateInnerContainer();
|
||||
|
||||
var dep1 = container1.Resolve<ITestSingletonDependency>();
|
||||
var dep1a = requestContainer1a.Resolve<ITestSingletonDependency>();
|
||||
var dep1b = requestContainer1b.Resolve<ITestSingletonDependency>();
|
||||
var dep2 = container2.Resolve<ITestSingletonDependency>();
|
||||
var dep2a = requestContainer2a.Resolve<ITestSingletonDependency>();
|
||||
var dep2b = requestContainer2b.Resolve<ITestSingletonDependency>();
|
||||
|
||||
Assert.That(dep1, Is.Not.SameAs(dep2));
|
||||
Assert.That(dep1, Is.SameAs(dep1a));
|
||||
Assert.That(dep1, Is.SameAs(dep1b));
|
||||
Assert.That(dep2, Is.SameAs(dep2a));
|
||||
Assert.That(dep2, Is.SameAs(dep2b));
|
||||
}
|
||||
[Test]
|
||||
public void TransientDependenciesShouldBeUniquePerResolve() {
|
||||
var host = (DefaultOrchardHost)_container.Resolve<IOrchardHost>();
|
||||
var container1 = host.CreateShellContainer();
|
||||
var container2 = host.CreateShellContainer();
|
||||
var requestContainer1a = container1.CreateInnerContainer();
|
||||
var requestContainer1b = container1.CreateInnerContainer();
|
||||
var requestContainer2a = container2.CreateInnerContainer();
|
||||
var requestContainer2b = container2.CreateInnerContainer();
|
||||
|
||||
var dep1 = container1.Resolve<ITestTransientDependency>();
|
||||
var dep1a = requestContainer1a.Resolve<ITestTransientDependency>();
|
||||
var dep1b = requestContainer1b.Resolve<ITestTransientDependency>();
|
||||
var dep2 = container2.Resolve<ITestTransientDependency>();
|
||||
var dep2a = requestContainer2a.Resolve<ITestTransientDependency>();
|
||||
var dep2b = requestContainer2b.Resolve<ITestTransientDependency>();
|
||||
|
||||
Assert.That(dep1, Is.Not.SameAs(dep2));
|
||||
Assert.That(dep1, Is.Not.SameAs(dep1a));
|
||||
Assert.That(dep1, Is.Not.SameAs(dep1b));
|
||||
Assert.That(dep2, Is.Not.SameAs(dep2a));
|
||||
Assert.That(dep2, Is.Not.SameAs(dep2b));
|
||||
|
||||
var again1 = container1.Resolve<ITestTransientDependency>();
|
||||
var again1a = requestContainer1a.Resolve<ITestTransientDependency>();
|
||||
var again1b = requestContainer1b.Resolve<ITestTransientDependency>();
|
||||
var again2 = container2.Resolve<ITestTransientDependency>();
|
||||
var again2a = requestContainer2a.Resolve<ITestTransientDependency>();
|
||||
var again2b = requestContainer2b.Resolve<ITestTransientDependency>();
|
||||
|
||||
Assert.That(again1, Is.Not.SameAs(dep1));
|
||||
Assert.That(again1a, Is.Not.SameAs(dep1a));
|
||||
Assert.That(again1b, Is.Not.SameAs(dep1b));
|
||||
Assert.That(again2, Is.Not.SameAs(dep2));
|
||||
Assert.That(again2a, Is.Not.SameAs(dep2a));
|
||||
Assert.That(again2b, Is.Not.SameAs(dep2b));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Orchard.Tests.Environment.TestDependencies {
|
||||
|
||||
public interface ITestDependency : IDependency {
|
||||
|
||||
}
|
||||
|
||||
public class TestDependency : ITestDependency{
|
||||
}
|
||||
|
||||
public interface ITestSingletonDependency : ISingletonDependency {
|
||||
|
||||
}
|
||||
|
||||
public class TestSingletonDependency : ITestSingletonDependency {
|
||||
}
|
||||
|
||||
|
||||
public interface ITestTransientDependency : ITransientDependency {
|
||||
|
||||
}
|
||||
|
||||
public class TestTransientDependency : ITestTransientDependency {
|
||||
}
|
||||
}
|
@@ -104,6 +104,7 @@
|
||||
<Compile Include="Environment\DefaultOrchardHostTests.cs" />
|
||||
<Compile Include="Environment\DefaultOrchardShellTests.cs" />
|
||||
<Compile Include="Environment\OrchardStarterTests.cs" />
|
||||
<Compile Include="Environment\TestDependencies\TestDependency.cs" />
|
||||
<Compile Include="EventsTests.cs" />
|
||||
<Compile Include="Localization\NullLocalizerTests.cs" />
|
||||
<Compile Include="Logging\LoggingModuleTests.cs" />
|
||||
|
Reference in New Issue
Block a user