mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Adding some unit tests on Themes unification with Modules
--HG-- branch : dev
This commit is contained in:
@@ -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
|
||||
|
@@ -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<"));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user