Adding some unit tests on Themes unification with Modules

--HG--
branch : dev
This commit is contained in:
Sebastien Ros
2010-09-30 17:46:36 -07:00
parent 44e84c3021
commit 02759d0c5b
3 changed files with 127 additions and 26 deletions

View File

@@ -22,7 +22,7 @@ namespace Orchard.Tests.Environment.Extensions {
[SetUp]
public void Init() {
var builder = new ContainerBuilder();
_folders = new StubFolders();
_folders = new StubFolders("Module");
builder.RegisterInstance(_folders).As<IExtensionFolders>();
builder.RegisterType<ExtensionManager>().As<IExtensionManager>();
_container = builder.Build();
@@ -30,7 +30,10 @@ namespace Orchard.Tests.Environment.Extensions {
}
public class StubFolders : IExtensionFolders {
public StubFolders() {
private readonly string _extensionType;
public StubFolders(string extensionType) {
_extensionType = extensionType;
Manifests = new Dictionary<string, string>();
}
@@ -40,7 +43,7 @@ namespace Orchard.Tests.Environment.Extensions {
foreach (var e in Manifests) {
string name = e.Key;
var parseResult = ExtensionFolders.ParseManifest(Manifests[name]);
yield return ExtensionFolders.GetDescriptorForExtension("~/", name, "Module", parseResult);
yield return ExtensionFolders.GetDescriptorForExtension("~/", name, _extensionType, parseResult);
}
}
}
@@ -249,7 +252,7 @@ features:
[Test]
public void ExtensionManagerShouldLoadFeatures() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("TestModule", @"
name: TestModule
@@ -275,7 +278,7 @@ features:
[Test]
public void ExtensionManagerFeaturesContainNonAbstractClasses() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("TestModule", @"
name: TestModule
@@ -310,7 +313,7 @@ features:
[Test]
public void ExtensionManagerTestFeatureAttribute() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("TestModule", @"
name: TestModule
@@ -340,7 +343,7 @@ features:
[Test]
public void ExtensionManagerLoadFeatureReturnsTypesFromSpecificFeaturesWithFeatureAttribute() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("TestModule", @"
name: TestModule
@@ -368,7 +371,7 @@ features:
[Test]
public void ExtensionManagerLoadFeatureDoesNotReturnTypesFromNonMatchingFeatures() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("TestModule", @"
name: TestModule
@@ -397,7 +400,26 @@ features:
[Test]
public void ModuleNameIsIntroducedAsFeatureImplicitly() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders();
var extensionFolder = new StubFolders("Module");
extensionFolder.Manifests.Add("Minimalistic", @"
name: Minimalistic
version: 1.0.3
orchardversion: 1
");
IExtensionManager extensionManager = new ExtensionManager(new[] { extensionFolder }, new[] { extensionLoader });
var minimalisticModule = extensionManager.AvailableExtensions().Single(x => x.Name == "Minimalistic");
Assert.That(minimalisticModule.Features.Count(), Is.EqualTo(1));
Assert.That(minimalisticModule.Features.Single().Name, Is.EqualTo("Minimalistic"));
}
[Test]
public void ThemeNameIsIntroducedAsFeatureImplicitly() {
var extensionLoader = new StubLoaders();
var extensionFolder = new StubFolders("Theme");
extensionFolder.Manifests.Add("Minimalistic", @"
name: Minimalistic

View File

@@ -30,8 +30,14 @@ namespace Orchard.Tests.Environment.Extensions {
}
public class StubFolders : IExtensionFolders {
public StubFolders() {
private readonly string _extensionType;
public StubFolders(string extensionType) {
Manifests = new Dictionary<string, string>();
_extensionType = extensionType;
}
public StubFolders() : this("Module") {
}
public IDictionary<string, string> Manifests { get; set; }
@@ -40,7 +46,7 @@ namespace Orchard.Tests.Environment.Extensions {
foreach (var e in Manifests) {
string name = e.Key;
var parseResult = ExtensionFolders.ParseManifest(Manifests[name]);
yield return ExtensionFolders.GetDescriptorForExtension("~/", name, "Module", parseResult);
yield return ExtensionFolders.GetDescriptorForExtension("~/", name, _extensionType, parseResult);
}
}
}
@@ -445,5 +451,88 @@ features:
var features = extensionManager.AvailableFeatures();
Assert.That(features.Aggregate("<", (a,b)=>a+b.Name+"<"), Is.EqualTo("<Beta<Gamma<Alpha<"));
}
[Test]
public void FeatureDescriptorsShouldBeLoadedInThemes() {
var extensionLoader = new StubLoaders();
var moduleExtensionFolder = new StubFolders();
var themeExtensionFolder = new StubFolders("Theme");
moduleExtensionFolder.Manifests.Add("Alpha", @"
name: Alpha
version: 1.0.3
orchardversion: 1
features:
Alpha:
Dependencies: Gamma
");
moduleExtensionFolder.Manifests.Add("Beta", @"
name: Beta
version: 1.0.3
orchardversion: 1
");
moduleExtensionFolder.Manifests.Add("Gamma", @"
name: Gamma
version: 1.0.3
orchardversion: 1
features:
Gamma:
Dependencies: Beta
");
moduleExtensionFolder.Manifests.Add("Classic", @"
name: Classic
version: 1.0.3
orchardversion: 1
");
IExtensionManager extensionManager = new ExtensionManager(new[] { moduleExtensionFolder, themeExtensionFolder }, new[] { extensionLoader });
var features = extensionManager.AvailableFeatures();
Assert.That(features.Count(), Is.EqualTo(4));
}
[Test]
public void ThemeFeatureDescriptorsShouldBeAbleToDependOnModules() {
var extensionLoader = new StubLoaders();
var moduleExtensionFolder = new StubFolders();
var themeExtensionFolder = new StubFolders("Theme");
moduleExtensionFolder.Manifests.Add("Alpha", @"
name: Alpha
version: 1.0.3
orchardversion: 1
features:
Alpha:
Dependencies: Gamma
");
moduleExtensionFolder.Manifests.Add("Beta", @"
name: Beta
version: 1.0.3
orchardversion: 1
");
moduleExtensionFolder.Manifests.Add("Gamma", @"
name: Gamma
version: 1.0.3
orchardversion: 1
features:
Gamma:
Dependencies: Beta
");
moduleExtensionFolder.Manifests.Add("Classic", @"
name: Classic
version: 1.0.3
orchardversion: 1
features:
Classic:
Dependencies: Alpha
");
IExtensionManager extensionManager = new ExtensionManager(new[] { moduleExtensionFolder, themeExtensionFolder }, new[] { extensionLoader });
var features = extensionManager.AvailableFeatures();
Assert.That(features.Aggregate("<", (a, b) => a + b.Name + "<"), Is.EqualTo("<Beta<Gamma<Alpha<Classic<"));
}
}
}

View File

@@ -5,6 +5,7 @@ using System.Linq;
using Orchard.Caching;
using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.WebSite;
using Orchard.Localization;
using Orchard.Logging;
using Yaml.Grammar;
@@ -36,8 +37,10 @@ namespace Orchard.Environment.Extensions.Folders {
_cacheManager = cacheManager;
_webSiteFolder = webSiteFolder;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
}
Localizer T { get; set; }
ILogger Logger { get; set; }
public IEnumerable<ExtensionDescriptor> AvailableExtensions() {
@@ -126,20 +129,7 @@ namespace Orchard.Environment.Extensions.Folders {
Zones = GetValue(fields, "zones"),
};
// in case of themes, there are no features
if ( extensionDescriptor.ExtensionType == "Module" ) {
extensionDescriptor.Features = GetFeaturesForExtension(GetMapping(fields, "features"), extensionDescriptor);
}
else {
var featureDescriptor = new FeatureDescriptor {
Extension = extensionDescriptor,
Name = extensionDescriptor.Name,
Category = "Themes",
Description = extensionDescriptor.Description
};
extensionDescriptor.Features = new[] {featureDescriptor};
}
extensionDescriptor.Features = GetFeaturesForExtension(GetMapping(fields, "features"), extensionDescriptor);
return extensionDescriptor;
}
@@ -171,7 +161,7 @@ namespace Orchard.Environment.Extensions.Folders {
featureDescriptors.Add(new FeatureDescriptor {
Name = extensionDescriptor.Name,
Dependencies = new string[0],
Extension = extensionDescriptor,
Extension = extensionDescriptor
});
}
return featureDescriptors;