public void FeatureDescriptorsAreInDependencyOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Alpha", @"
Name: Alpha
Version: 1.0.3
OrchardVersion: 1
Features:
    Alpha:
        Dependencies: Gamma
");

            extensionFolder.Manifests.Add("Beta", @"
Name: Beta
Version: 1.0.3
OrchardVersion: 1
");
            extensionFolder.Manifests.Add("Gamma", @"
Name: Gamma
Version: 1.0.3
OrchardVersion: 1
Features:
    Gamma:
        Dependencies: Beta
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var features = extensionManager.AvailableFeatures();

            Assert.Equal("<Beta<Gamma<Alpha<", features.Aggregate("<", (a, b) => a + b.Id + "<"));
        }
        public void FeatureDescriptorsAreInDependencyAndPriorityOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            // Check that priorities apply correctly on items on the same level of dependencies and are overwritten by dependencies
            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "2", "Gamma")); // More important than Gamma but will get overwritten by the dependency
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "2"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "1"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "3", "Beta, Foo"));
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Beta<Gamma<Alpha<");

            // Change priorities and see that it reflects properly
            // Gamma comes after Foo (same priority) because their order in the Manifests is preserved
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "3");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Foo<Gamma<Alpha<");

            // Remove dependency on Foo and see that it moves down the list since no one depends on it anymore
            extensionFolder.Manifests["Gamma"] = CreateManifest("Gamma", "3", "Beta");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Foo<");

            // Change Foo to depend on Gamma and see that it says in its position (same dependencies as alpha but lower priority)
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "3", "Gamma");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Foo<");

            // Update Foo to a higher priority than alpha and see that it moves before alpha
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "1", "Gamma");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Foo<Alpha<");
        }
        private static void AssertFeaturesAreInOrder(StubExtensionLocator folder, StubLoaders loader, string expectedOrder)
        {
            var extensionManager = CreateExtensionManager(folder, new[] { loader });
            var features         = extensionManager.AvailableFeatures();

            Assert.Equal(expectedOrder, features.Aggregate("<", (a, b) => a + b.Id + "<"));
        }
        public void ExtensionManagerLoadFeatureReturnsTypesFromSpecificFeaturesWithFeatureAttribute()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule: 
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                              .SelectMany(x => x.Features)
                              .Single(x => x.Id == "TestFeature");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testFeature }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    Assert.True(type == typeof(Phi));
                }
            }
        }
        public void ExtensionManagerLoadFeatureDoesNotReturnTypesFromNonMatchingFeatures()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule: 
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testModule = extensionManager.AvailableExtensions()
                             .SelectMany(x => x.Features)
                             .Single(x => x.Id == "TestModule");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testModule }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    Assert.IsNotType(typeof(Phi), type);
                    Assert.True((type == typeof(Alpha) || (type == typeof(Beta))));
                }
            }
        }
        public void ExtensionManagerFeaturesContainNonAbstractClasses()
        {
            var extensionLoader = new StubLoaders();
            var folders         = new StubExtensionLocator();

            folders.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule: 
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(folders, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                              .SelectMany(x => x.Features);

            var features = extensionManager.LoadFeatures(testFeature);
            var types    = features.SelectMany(x => x.ExportedTypes);

            foreach (var type in types)
            {
                Assert.True(type.GetTypeInfo().IsClass);
                Assert.True(!type.GetTypeInfo().IsAbstract);
            }
        }
        public void ExtensionManagerTestFeatureAttribute()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule: 
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                              .SelectMany(x => x.Features)
                              .Single(x => x.Id == "TestFeature");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testFeature }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    foreach (OrchardFeatureAttribute featureAttribute in type.GetTypeInfo().GetCustomAttributes(typeof(OrchardFeatureAttribute), false))
                    {
                        Assert.Equal("TestFeature", featureAttribute.FeatureName);
                    }
                }
            }
        }
        public void ExtensionManagerShouldLoadFeatures()
        {
            var extensionLoader = new StubLoaders();
            var folders         = new StubExtensionLocator();

            folders.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule: 
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(folders, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                              .SelectMany(x => x.Features);

            var features = extensionManager.LoadFeatures(testFeature);
            var types    = features.SelectMany(x => x.ExportedTypes);

            Assert.NotEqual(0, types.Count());
        }
        public void ThemeFeatureDescriptorsShouldBeAbleToDependOnModules()
        {
            var extensionLoader       = new StubLoaders();
            var moduleExtensionFolder = new StubExtensionLocator(new[] { DefaultExtensionTypes.Module, DefaultExtensionTypes.Theme });

            moduleExtensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", null, "Gamma"));
            moduleExtensionFolder.Manifests.Add("Beta", CreateManifest("Beta"));
            moduleExtensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", null, "Beta"));
            moduleExtensionFolder.ThemeManifests.Add("Classic", CreateManifest("Classic", null, "Alpha"));

            AssertFeaturesAreInOrder(moduleExtensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Classic<");
        }
        public void FeatureDescriptorsAreInPriorityOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            // Check that priorities apply correctly on items on the same level of dependencies and are overwritten by dependencies
            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "4")); // More important than Gamma but will get overwritten by the dependency
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "3"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "1"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "2"));

            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Gamma<Beta<Alpha<");
        }
        public void FeatureDescriptorsAreInManifestOrderWhenTheyHaveEqualPriority()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "4"));
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "4"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "4"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "3"));
            extensionFolder.Manifests.Add("Bar", CreateManifest("Bar", "3"));
            extensionFolder.Manifests.Add("Baz", CreateManifest("Baz", "3"));

            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Bar<Baz<Alpha<Beta<Gamma<");
        }
示例#12
0
        public void AvailableExtensionsShouldFollowCatalogLocations()
        {
            var folders = new StubExtensionLocator();
            folders.Manifests.Add("foo", "Name: Foo");
            folders.Manifests.Add("bar", "Name: Bar");
            folders.Manifests.Add("frap", "Name: Frap");
            folders.Manifests.Add("quad", "Name: Quad");

            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());

            var available = manager.AvailableExtensions();

            Assert.Equal(4, available.Count());
            Assert.True(available.Any(x => x.Id == "foo"));
        }
        public void AvailableExtensionsShouldFollowCatalogLocations()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("foo", "Name: Foo");
            folders.Manifests.Add("bar", "Name: Bar");
            folders.Manifests.Add("frap", "Name: Frap");
            folders.Manifests.Add("quad", "Name: Quad");

            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new StubLoggerFactory());

            var available = manager.AvailableExtensions();

            Assert.Equal(4, available.Count());
            Assert.True(available.Any(x => x.Id == "foo"));
        }
示例#14
0
        public void ExtensionDescriptorsShouldHaveNameAndVersion()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("Sample", @"
Name: Sample Extension
Version: 2.x
");

            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());

            var descriptor = manager.AvailableExtensions().Single();
            Assert.Equal("Sample", descriptor.Id);
            Assert.Equal("Sample Extension", descriptor.Name);
            Assert.Equal("2.x", descriptor.Version);
        }
        public void ModuleNameIsIntroducedAsFeatureImplicitly()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Minimalistic", @"
Name: Minimalistic
Version: 1.0.3
OrchardVersion: 1
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var minimalisticModule             = extensionManager.AvailableExtensions().Single(x => x.Id == "Minimalistic");

            Assert.Equal(1, minimalisticModule.Features.Count());
            Assert.Equal("Minimalistic", minimalisticModule.Features.Single().Id);
        }
        public void ExtensionDescriptorsShouldHaveNameAndVersion()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("Sample", @"
Name: Sample Extension
Version: 2.x
");

            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new StubLoggerFactory());

            var descriptor = manager.AvailableExtensions().Single();

            Assert.Equal("Sample", descriptor.Id);
            Assert.Equal("Sample Extension", descriptor.Name);
            Assert.Equal("2.x", descriptor.Version);
        }
示例#17
0
        public void ExtensionDescriptorKeywordsAreCaseInsensitive()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("Sample", @"
NaMe: Sample Extension
SESSIONSTATE: disabled
version: 2.x
DESCRIPTION: HELLO
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());

            var descriptor = manager.AvailableExtensions().Single();
            Assert.Equal("Sample", descriptor.Id);
            Assert.Equal("Sample Extension", descriptor.Name);
            Assert.Equal("2.x", descriptor.Version);
            Assert.Equal("HELLO", descriptor.Description);
            Assert.Equal("disabled", descriptor.SessionState);
        }
        public void ExtensionDescriptorKeywordsAreCaseInsensitive()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("Sample", @"
NaMe: Sample Extension
SESSIONSTATE: disabled
version: 2.x
DESCRIPTION: HELLO
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new StubLoggerFactory());

            var descriptor = manager.AvailableExtensions().Single();

            Assert.Equal("Sample", descriptor.Id);
            Assert.Equal("Sample Extension", descriptor.Name);
            Assert.Equal("2.x", descriptor.Version);
            Assert.Equal("HELLO", descriptor.Description);
            Assert.Equal("disabled", descriptor.SessionState);
        }
        public void FeatureDescriptorsShouldBeLoadedInThemes()
        {
            var extensionLoader       = new StubLoaders();
            var moduleExtensionFolder = new StubExtensionLocator(new [] { DefaultExtensionTypes.Module, DefaultExtensionTypes.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.ThemeManifests.Add("Classic", @"
Name: Classic
Version: 1.0.3
OrchardVersion: 1
");

            IExtensionManager extensionManager = CreateExtensionManager(moduleExtensionFolder, new[] { extensionLoader });
            var features = extensionManager.AvailableFeatures();

            Assert.Equal(4, features.Count());
        }
示例#20
0
        public void ExtensionDescriptorsShouldBeParsedForMinimalModuleTxt()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki:
        Description: My super wiki module for Orchard.
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());

            var descriptor = manager.AvailableExtensions().Single();
            Assert.Equal("SuperWiki", descriptor.Id);
            Assert.Equal("1.0.3", descriptor.Version);
            Assert.Equal("1", descriptor.OrchardVersion);
            Assert.Equal(1, descriptor.Features.Count());
            Assert.Equal("SuperWiki", descriptor.Features.First().Id);
            Assert.Equal("SuperWiki", descriptor.Features.First().Extension.Id);
            Assert.Equal("My super wiki module for Orchard.", descriptor.Features.First().Description);
        }
        public void ExtensionDescriptorsShouldBeParsedForMinimalModuleTxt()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki module for Orchard.
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new StubLoggerFactory());

            var descriptor = manager.AvailableExtensions().Single();

            Assert.Equal("SuperWiki", descriptor.Id);
            Assert.Equal("1.0.3", descriptor.Version);
            Assert.Equal("1", descriptor.OrchardVersion);
            Assert.Equal(1, descriptor.Features.Count());
            Assert.Equal("SuperWiki", descriptor.Features.First().Id);
            Assert.Equal("SuperWiki", descriptor.Features.First().Extension.Id);
            Assert.Equal("My super wiki module for Orchard.", descriptor.Features.First().Description);
        }
示例#22
0
        public void FeatureDescriptorsAreInDependencyAndPriorityOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            // Check that priorities apply correctly on items on the same level of dependencies and are overwritten by dependencies
            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "2", "Gamma")); // More important than Gamma but will get overwritten by the dependency
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "2"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "1"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "3", "Beta, Foo"));
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Beta<Gamma<Alpha<");

            // Change priorities and see that it reflects properly
            // Gamma comes after Foo (same priority) because their order in the Manifests is preserved
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "3");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Foo<Gamma<Alpha<");

            // Remove dependency on Foo and see that it moves down the list since no one depends on it anymore
            extensionFolder.Manifests["Gamma"] = CreateManifest("Gamma", "3", "Beta");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Foo<");

            // Change Foo to depend on Gamma and see that it says in its position (same dependencies as alpha but lower priority)
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "3", "Gamma");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Foo<");

            // Update Foo to a higher priority than alpha and see that it moves before alpha
            extensionFolder.Manifests["Foo"] = CreateManifest("Foo", "1", "Gamma");
            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Beta<Gamma<Foo<Alpha<");
        }
示例#23
0
        public void ThemeFeatureDescriptorsShouldBeAbleToDependOnModules()
        {
            var extensionLoader = new StubLoaders();
            var moduleExtensionFolder = new StubExtensionLocator(new[] { DefaultExtensionTypes.Module, DefaultExtensionTypes.Theme });

            moduleExtensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", null, "Gamma"));
            moduleExtensionFolder.Manifests.Add("Beta", CreateManifest("Beta"));
            moduleExtensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", null, "Beta"));
            moduleExtensionFolder.ThemeManifests.Add("Classic", CreateManifest("Classic", null, "Alpha"));

            AssertFeaturesAreInOrder(moduleExtensionFolder, extensionLoader, "<Beta<Gamma<Alpha<Classic<");
        }
示例#24
0
        public void FeatureDescriptorsShouldBeLoadedInThemes()
        {
            var extensionLoader = new StubLoaders();
            var moduleExtensionFolder = new StubExtensionLocator(new[] { DefaultExtensionTypes.Module, DefaultExtensionTypes.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.ThemeManifests.Add("Classic", @"
Name: Classic
Version: 1.0.3
OrchardVersion: 1
");

            IExtensionManager extensionManager = CreateExtensionManager(moduleExtensionFolder, new[] { extensionLoader });
            var features = extensionManager.AvailableFeatures();
            Assert.Equal(4, features.Count());
        }
示例#25
0
        public void FeatureDescriptorsAreInDependencyOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Alpha", @"
Name: Alpha
Version: 1.0.3
OrchardVersion: 1
Features:
    Alpha:
        Dependencies: Gamma
");

            extensionFolder.Manifests.Add("Beta", @"
Name: Beta
Version: 1.0.3
OrchardVersion: 1
");
            extensionFolder.Manifests.Add("Gamma", @"
Name: Gamma
Version: 1.0.3
OrchardVersion: 1
Features:
    Gamma:
        Dependencies: Beta
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var features = extensionManager.AvailableFeatures();
            Assert.Equal("<Beta<Gamma<Alpha<", features.Aggregate("<", (a, b) => a + b.Id + "<"));
        }
示例#26
0
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator locator, IEnumerable<StubLoaders> extensionLoader)
 {
     return new ExtensionManager(locator, extensionLoader, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());
 }
示例#27
0
 private static void AssertFeaturesAreInOrder(StubExtensionLocator folder, StubLoaders loader, string expectedOrder)
 {
     var extensionManager = CreateExtensionManager(folder, new[] { loader });
     var features = extensionManager.AvailableFeatures();
     Assert.Equal(expectedOrder, features.Aggregate("<", (a, b) => a + b.Id + "<"));
 }
示例#28
0
        public void ExtensionManagerLoadFeatureReturnsTypesFromSpecificFeaturesWithFeatureAttribute()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule:
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                .SelectMany(x => x.Features)
                .Single(x => x.Id == "TestFeature");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testFeature }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    Assert.True(type == typeof(Phi));
                }
            }
        }
示例#29
0
        public void ExtensionManagerTestFeatureAttribute()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule:
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                .SelectMany(x => x.Features)
                .Single(x => x.Id == "TestFeature");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testFeature }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    foreach (OrchardFeatureAttribute featureAttribute in type.GetTypeInfo().GetCustomAttributes(typeof(OrchardFeatureAttribute), false))
                    {
                        Assert.Equal("TestFeature", featureAttribute.FeatureName);
                    }
                }
            }
        }
示例#30
0
        public void ExtensionManagerFeaturesContainNonAbstractClasses()
        {
            var extensionLoader = new StubLoaders();
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule:
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(folders, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                .SelectMany(x => x.Features);

            var features = extensionManager.LoadFeatures(testFeature);
            var types = features.SelectMany(x => x.ExportedTypes);

            foreach (var type in types)
            {
                Assert.True(type.GetTypeInfo().IsClass);
                Assert.True(!type.GetTypeInfo().IsAbstract);
            }
        }
示例#31
0
        public void ExtensionManagerShouldLoadFeatures()
        {
            var extensionLoader = new StubLoaders();
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule:
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(folders, extensionLoader);
            var testFeature = extensionManager.AvailableExtensions()
                .SelectMany(x => x.Features);

            var features = extensionManager.LoadFeatures(testFeature);
            var types = features.SelectMany(x => x.ExportedTypes);

            Assert.NotEqual(0, types.Count());
        }
        public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxt()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("MyCompany.AnotherWiki", @"
Name: AnotherWiki
SessionState: required
Author: Coder Notaprogrammer
Website: http://anotherwiki.codeplex.com
Version: 1.2.3
OrchardVersion: 1
Features:
    AnotherWiki: 
        Description: My super wiki module for Orchard.
        Dependencies: Versioning, Search
        Category: Content types
    AnotherWiki Editor:
        Description: A rich editor for wiki contents.
        Dependencies: TinyMCE, AnotherWiki
        Category: Input methods
    AnotherWiki DistributionList:
        Description: Sends e-mail alerts when wiki contents gets published.
        Dependencies: AnotherWiki, Email Subscriptions
        Category: Email
    AnotherWiki Captcha:
        Description: Kills spam. Or makes it zombie-like.
        Dependencies: AnotherWiki, reCaptcha
        Category: Spam
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new StubLoggerFactory());

            var descriptor = manager.AvailableExtensions().Single();

            Assert.Equal("MyCompany.AnotherWiki", descriptor.Id);
            Assert.Equal("AnotherWiki", descriptor.Name);
            Assert.Equal("Coder Notaprogrammer", descriptor.Author);
            Assert.Equal("http://anotherwiki.codeplex.com", descriptor.WebSite);
            Assert.Equal("1.2.3", descriptor.Version);
            Assert.Equal("1", descriptor.OrchardVersion);
            Assert.Equal(5, descriptor.Features.Count());
            Assert.Equal("required", descriptor.SessionState);
            foreach (var featureDescriptor in descriptor.Features)
            {
                switch (featureDescriptor.Id)
                {
                case "AnotherWiki":
                    Assert.Same(descriptor, featureDescriptor.Extension);
                    Assert.Equal("My super wiki module for Orchard.", featureDescriptor.Description);
                    Assert.Equal("Content types", featureDescriptor.Category);
                    Assert.Equal(2, featureDescriptor.Dependencies.Count());
                    Assert.Contains("Versioning", featureDescriptor.Dependencies);
                    Assert.Contains("Search", featureDescriptor.Dependencies);
                    break;

                case "AnotherWiki Editor":
                    Assert.Same(descriptor, featureDescriptor.Extension);
                    Assert.Equal("A rich editor for wiki contents.", featureDescriptor.Description);
                    Assert.Equal("Input methods", featureDescriptor.Category);
                    Assert.Equal(2, featureDescriptor.Dependencies.Count());
                    Assert.Contains("TinyMCE", featureDescriptor.Dependencies);
                    Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                    break;

                case "AnotherWiki DistributionList":
                    Assert.Same(descriptor, featureDescriptor.Extension);
                    Assert.Equal("Sends e-mail alerts when wiki contents gets published.", featureDescriptor.Description);
                    Assert.Equal("Email", featureDescriptor.Category);
                    Assert.Equal(2, featureDescriptor.Dependencies.Count());
                    Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                    Assert.Contains("Email Subscriptions", featureDescriptor.Dependencies);
                    break;

                case "AnotherWiki Captcha":
                    Assert.Same(descriptor, featureDescriptor.Extension);
                    Assert.Equal("Kills spam. Or makes it zombie-like.", featureDescriptor.Description);
                    Assert.Equal("Spam", featureDescriptor.Category);
                    Assert.Equal(2, featureDescriptor.Dependencies.Count());
                    Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                    Assert.Contains("reCaptcha", featureDescriptor.Dependencies);
                    break;

                // default feature.
                case "MyCompany.AnotherWiki":
                    Assert.Same(descriptor, featureDescriptor.Extension);
                    break;

                default:
                    throw new Exception("Features not parsed correctly");
                }
            }
        }
示例#33
0
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator locator, IEnumerable <StubLoaders> extensionLoader)
 {
     return(new ExtensionManager(locator, extensionLoader, new TypeFeatureProvider(), new NullLogger <ExtensionManager>()));
 }
示例#34
0
        public void FeatureDescriptorsAreInPriorityOrder()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            // Check that priorities apply correctly on items on the same level of dependencies and are overwritten by dependencies
            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "4")); // More important than Gamma but will get overwritten by the dependency
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "3"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "1"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "2"));

            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Gamma<Beta<Alpha<");
        }
示例#35
0
        public void FeatureDescriptorsAreInManifestOrderWhenTheyHaveEqualPriority()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Alpha", CreateManifest("Alpha", "4"));
            extensionFolder.Manifests.Add("Beta", CreateManifest("Beta", "4"));
            extensionFolder.Manifests.Add("Gamma", CreateManifest("Gamma", "4"));
            extensionFolder.Manifests.Add("Foo", CreateManifest("Foo", "3"));
            extensionFolder.Manifests.Add("Bar", CreateManifest("Bar", "3"));
            extensionFolder.Manifests.Add("Baz", CreateManifest("Baz", "3"));

            AssertFeaturesAreInOrder(extensionFolder, extensionLoader, "<Foo<Bar<Baz<Alpha<Beta<Gamma<");
        }
示例#36
0
        public void ExtensionManagerLoadFeatureDoesNotReturnTypesFromNonMatchingFeatures()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("TestModule", @"
Name: TestModule
Version: 1.0.3
OrchardVersion: 1
Features:
    TestModule:
        Description: My test module for Orchard.
    TestFeature:
        Description: Contains the Phi type.
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var testModule = extensionManager.AvailableExtensions()
                .SelectMany(x => x.Features)
                .Single(x => x.Id == "TestModule");

            foreach (var feature in extensionManager.LoadFeatures(new[] { testModule }))
            {
                foreach (var type in feature.ExportedTypes)
                {
                    Assert.IsNotType(typeof(Phi), type);
                    Assert.True((type == typeof(Alpha) || (type == typeof(Beta))));
                }
            }
        }
示例#37
0
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator loader, StubLoaders extensionLoader)
 {
     return CreateExtensionManager(loader, new[] { extensionLoader });
 }
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator loader, StubLoaders extensionLoader)
 {
     return(CreateExtensionManager(loader, new[] { extensionLoader }));
 }
示例#39
0
        public void ModuleNameIsIntroducedAsFeatureImplicitly()
        {
            var extensionLoader = new StubLoaders();
            var extensionFolder = new StubExtensionLocator();

            extensionFolder.Manifests.Add("Minimalistic", @"
Name: Minimalistic
Version: 1.0.3
OrchardVersion: 1
");

            IExtensionManager extensionManager = CreateExtensionManager(extensionFolder, extensionLoader);
            var minimalisticModule = extensionManager.AvailableExtensions().Single(x => x.Id == "Minimalistic");

            Assert.Equal(1, minimalisticModule.Features.Count());
            Assert.Equal("Minimalistic", minimalisticModule.Features.Single().Id);
        }
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator locator, IEnumerable <StubLoaders> extensionLoader)
 {
     return(new ExtensionManager(locator, extensionLoader, new StubLoggerFactory()));
 }
示例#41
0
        public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxt()
        {
            var folders = new StubExtensionLocator();

            folders.Manifests.Add("MyCompany.AnotherWiki", @"
Name: AnotherWiki
SessionState: required
Author: Coder Notaprogrammer
Website: http://anotherwiki.codeplex.com
Version: 1.2.3
OrchardVersion: 1
Features:
    AnotherWiki:
        Description: My super wiki module for Orchard.
        Dependencies: Versioning, Search
        Category: Content types
    AnotherWiki Editor:
        Description: A rich editor for wiki contents.
        Dependencies: TinyMCE, AnotherWiki
        Category: Input methods
    AnotherWiki DistributionList:
        Description: Sends e-mail alerts when wiki contents gets published.
        Dependencies: AnotherWiki, Email Subscriptions
        Category: Email
    AnotherWiki Captcha:
        Description: Kills spam. Or makes it zombie-like.
        Dependencies: AnotherWiki, reCaptcha
        Category: Spam
");
            var manager = new ExtensionManager(folders, new[] { new StubLoaders() }, new TypeFeatureProvider(), new NullLogger<ExtensionManager>());

            var descriptor = manager.AvailableExtensions().Single();
            Assert.Equal("MyCompany.AnotherWiki", descriptor.Id);
            Assert.Equal("AnotherWiki", descriptor.Name);
            Assert.Equal("Coder Notaprogrammer", descriptor.Author);
            Assert.Equal("http://anotherwiki.codeplex.com", descriptor.WebSite);
            Assert.Equal("1.2.3", descriptor.Version);
            Assert.Equal("1", descriptor.OrchardVersion);
            Assert.Equal(5, descriptor.Features.Count());
            Assert.Equal("required", descriptor.SessionState);
            foreach (var featureDescriptor in descriptor.Features)
            {
                switch (featureDescriptor.Id)
                {
                    case "AnotherWiki":
                        Assert.Same(descriptor, featureDescriptor.Extension);
                        Assert.Equal("My super wiki module for Orchard.", featureDescriptor.Description);
                        Assert.Equal("Content types", featureDescriptor.Category);
                        Assert.Equal(2, featureDescriptor.Dependencies.Count());
                        Assert.Contains("Versioning", featureDescriptor.Dependencies);
                        Assert.Contains("Search", featureDescriptor.Dependencies);
                        break;
                    case "AnotherWiki Editor":
                        Assert.Same(descriptor, featureDescriptor.Extension);
                        Assert.Equal("A rich editor for wiki contents.", featureDescriptor.Description);
                        Assert.Equal("Input methods", featureDescriptor.Category);
                        Assert.Equal(2, featureDescriptor.Dependencies.Count());
                        Assert.Contains("TinyMCE", featureDescriptor.Dependencies);
                        Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                        break;
                    case "AnotherWiki DistributionList":
                        Assert.Same(descriptor, featureDescriptor.Extension);
                        Assert.Equal("Sends e-mail alerts when wiki contents gets published.", featureDescriptor.Description);
                        Assert.Equal("Email", featureDescriptor.Category);
                        Assert.Equal(2, featureDescriptor.Dependencies.Count());
                        Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                        Assert.Contains("Email Subscriptions", featureDescriptor.Dependencies);
                        break;
                    case "AnotherWiki Captcha":
                        Assert.Same(descriptor, featureDescriptor.Extension);
                        Assert.Equal("Kills spam. Or makes it zombie-like.", featureDescriptor.Description);
                        Assert.Equal("Spam", featureDescriptor.Category);
                        Assert.Equal(2, featureDescriptor.Dependencies.Count());
                        Assert.Contains("AnotherWiki", featureDescriptor.Dependencies);
                        Assert.Contains("reCaptcha", featureDescriptor.Dependencies);
                        break;
                    // default feature.
                    case "MyCompany.AnotherWiki":
                        Assert.Same(descriptor, featureDescriptor.Extension);
                        break;
                    default:
                        throw new Exception("Features not parsed correctly");
                }
            }
        }
示例#42
0
 private static ExtensionManager CreateExtensionManager(StubExtensionLocator locator, IEnumerable<StubLoaders> extensionLoader)
 {
     return new ExtensionManager(locator, extensionLoader, new StubLoggerFactory());
 }