Пример #1
0
        public void RemoveRequiredResourceDependency()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "required");
            manifest.DefineResource("foo", "to-remove")
            .SetDependencies("dependency");
            manifest.DefineResource("foo", "dependency");
            manifest.DefineResource("foo", "not-required");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "required");
            resourceManager.RegisterResource("foo", "to-remove");

            resourceManager.NotRequired("foo", "to-remove");

            var requiredResources = resourceManager.GetRequiredResources("foo")
                                    .Select(ctx => ctx.Resource)
                                    .ToList();

            Assert.Contains(requiredResources, resource => resource.Name == "required");
            Assert.DoesNotContain(requiredResources, resource => resource.Name == "to-remove");
            Assert.DoesNotContain(requiredResources, resource => resource.Name == "dependency");
            Assert.DoesNotContain(requiredResources, resource => resource.Name == "not-required");
        }
Пример #2
0
        public void FindResourceFromManifestProviders()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "bar1").SetAttribute("attr", "bar1");
            manifest.DefineResource("foo", "bar2").SetAttribute("attr", "bar2");
            manifest.DefineResource("foo", "bar3").SetAttribute("attr", "bar3");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            var resourceDefinition = resourceManager.FindResource(new RequireSettings {
                Type = "foo", Name = "bar2"
            });

            Assert.NotNull(resourceDefinition);
            Assert.Equal("foo", resourceDefinition.Type);
            Assert.Equal("bar2", resourceDefinition.Name);
            Assert.Contains("bar2", ((IDictionary <string, string>)resourceDefinition.Attributes).Values);
            Assert.Contains("attr", ((IDictionary <string, string>)resourceDefinition.Attributes).Keys);
        }
Пример #3
0
        public void RequireFirstPositionedResourceWithDependencyToResourcePositionedLastShouldThrowException()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "resource")
            .SetDependencies("last-resource");
            manifest.DefineResource("foo", "last-resource")
            .SetPosition(ResourcePosition.Last);
            manifest.DefineResource("foo", "first-resource")
            .SetPosition(ResourcePosition.First)
            .SetDependencies("resource");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "first-resource");
            resourceManager.RegisterResource("foo", "last-resource");

            var ex = Assert.Throws <InvalidOperationException>(() => resourceManager.GetRequiredResources("foo"));

            Assert.StartsWith("Invalid dependency position", ex.Message);
        }
Пример #4
0
        public void RequireFirstPositionedResourceThatDependsOnByDependencyResourceShouldRegisterDependencyFirst()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "dependency");
            manifest.DefineResource("foo", "first-resource")
            .SetDependencies("dependency")
            .SetPosition(ResourcePosition.First);

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "first-resource");

            var requiredResources = resourceManager.GetRequiredResources("foo")
                                    .Select(ctx => ctx.Resource)
                                    .ToList();

            // Ensure dependencies loaded
            Assert.True(requiredResources.Count == 2);

            // Ensure order
            var dependencyIndex    = requiredResources.FindIndex(resource => resource.Name == "dependency");
            var firstResourceIndex = requiredResources.FindIndex(resource => resource.Name == "first-resource");

            Assert.True(firstResourceIndex > dependencyIndex);
        }
Пример #5
0
        public void RequireCircularNestedDependencyShouldThrowException()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "requires-dependency")
            .SetDependencies("dependency");
            manifest.DefineResource("foo", "requires-indirect-dependency")
            .SetDependencies("requires-dependency");
            manifest.DefineResource("foo", "dependency")
            .SetDependencies("requires-indirect-dependency");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "requires-indirect-dependency");
            resourceManager.RegisterResource("foo", "requires-dependency");

            var ex = Assert.Throws <InvalidOperationException>(() => resourceManager.GetRequiredResources("foo"));

            Assert.StartsWith("Circular dependency", ex.Message);
        }
Пример #6
0
        public void DeserializeSettings(string serialization, CombinatorResource resource)
        {
            if (String.IsNullOrEmpty(serialization))
            {
                return;
            }

            var settings = _serializer.XmlDeserialize <SerializableSettings>(serialization);

            if (settings.Url != null)
            {
                var resourceManifest = new ResourceManifest();
                resource.RequiredContext.Resource = resourceManifest.DefineResource(resource.Type.ToStringType(), settings.Url.ToString());
                resource.RequiredContext.Resource.SetUrlWithoutScheme(settings.Url);
                resource.IsOriginal = true;
            }

            if (resource.RequiredContext.Settings == null)
            {
                resource.RequiredContext.Settings = new RequireSettings();
            }
            var resourceSettings = resource.RequiredContext.Settings;

            resourceSettings.Culture    = settings.Culture;
            resourceSettings.Condition  = settings.Condition;
            resourceSettings.Attributes = settings.Attributes;
        }
Пример #7
0
        public void FillRequiredContext(string name, string url, string culture = "", string condition = "", Dictionary <string, string> attributes = null)
        {
            var requiredContext  = new ResourceRequiredContext();
            var resourceManifest = new ResourceManifest();

            requiredContext.Resource = resourceManifest.DefineResource(Type.ToStringType(), name);
            requiredContext.Resource.SetUrl(url);
            requiredContext.Settings            = new RequireSettings();
            requiredContext.Settings.Culture    = culture;
            requiredContext.Settings.Condition  = condition;
            requiredContext.Settings.Attributes = attributes != null ? new Dictionary <string, string>(attributes) : new Dictionary <string, string>();
            RequiredContext = requiredContext;
        }
Пример #8
0
        public void FillRequiredContext(string name, string url, string culture = "", string condition = "", Dictionary <string, string> attributes = null, IDictionary <string, string> tagAttributes = null)
        {
            var requiredContext  = new ResourceRequiredContext();
            var resourceManifest = new ResourceManifest();

            requiredContext.Resource = resourceManifest.DefineResource(Type.ToStringType(), name);
            if (!string.IsNullOrEmpty(url))
            {
                requiredContext.Resource.SetUrl(url);
            }
            requiredContext.Settings = new RequireSettings
            {
                Name       = name,
                Culture    = culture,
                Condition  = condition,
                Attributes = attributes != null ? new Dictionary <string, string>(attributes) : new Dictionary <string, string>()
            };
            RequiredContext = requiredContext;

            if (tagAttributes != null)
            {
                requiredContext.Resource.TagBuilder.MergeAttributes(tagAttributes);
            }
        }
Пример #9
0
        public void RegisteredResouceNameIsRequired()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "bar").SetUrl("schema://domain.ext/resource", "schema://domain.ext/resource.debug");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "bar");

            var requiredResourceContexts = resourceManager.GetRequiredResources("foo");
            var resourceDefinition       = requiredResourceContexts.FirstOrDefault()?.Resource;

            Assert.NotNull(resourceDefinition);
            Assert.Equal("foo", resourceDefinition.Type);
            Assert.Equal("schema://domain.ext/resource", resourceDefinition.Url);
            Assert.Equal("schema://domain.ext/resource.debug", resourceDefinition.UrlDebug);
        }
Пример #10
0
        public void RequireDependencies()
        {
            var options  = new ResourceManagementOptions();
            var manifest = new ResourceManifest();

            manifest.DefineResource("foo", "first-resource")
            .SetDependencies("first-dependency")
            .SetPosition(ResourcePosition.First);
            manifest.DefineResource("foo", "requires-dependency")
            .SetDependencies("dependency");
            manifest.DefineResource("foo", "dependency");
            manifest.DefineResource("foo", "another-dependency")
            .SetDependencies("first-dependency");
            manifest.DefineResource("foo", "first-dependency");
            manifest.DefineResource("foo", "last-dependency")
            .SetPosition(ResourcePosition.Last)
            .SetDependencies("another-dependency");
            manifest.DefineResource("foo", "simple-resource")
            .SetDependencies("first-dependency");
            manifest.DefineResource("foo", "last-resource")
            .SetPosition(ResourcePosition.Last)
            .SetDependencies("last-dependency");
            manifest.DefineResource("foo", "not-used-resource");

            options.ResourceManifests.Add(manifest);

            var resourceManager = new ResourceManager(
                new OptionsWrapper <ResourceManagementOptions>(options),
                StubFileVersionProvider.Instance
                );

            resourceManager.RegisterResource("foo", "last-resource");
            resourceManager.RegisterResource("foo", "requires-dependency");
            resourceManager.RegisterResource("foo", "first-resource");
            resourceManager.RegisterResource("foo", "simple-resource");

            var requiredResources = resourceManager.GetRequiredResources("foo")
                                    .Select(ctx => ctx.Resource)
                                    .ToList();

            // Ensure dependencies loaded
            Assert.True(requiredResources.Count == 8);

            // Ensure order
            var firstDependencyIndex    = requiredResources.FindIndex(resource => resource.Name == "first-dependency");
            var firstResourceIndex      = requiredResources.FindIndex(resource => resource.Name == "first-resource");
            var anotherDependencyIndex  = requiredResources.FindIndex(resource => resource.Name == "another-dependency");
            var dependencyIndex         = requiredResources.FindIndex(resource => resource.Name == "dependency");
            var requiresDependencyIndex = requiredResources.FindIndex(resource => resource.Name == "requires-dependency");
            var simpleResourceIndex     = requiredResources.FindIndex(resource => resource.Name == "simple-resource");
            var lastDependecyIndex      = requiredResources.FindIndex(resource => resource.Name == "last-dependency");
            var lastResourceIndex       = requiredResources.FindIndex(resource => resource.Name == "last-resource");

            Assert.True(firstResourceIndex > firstDependencyIndex);
            Assert.True(anotherDependencyIndex > firstResourceIndex);
            Assert.True(dependencyIndex > anotherDependencyIndex);
            Assert.True(requiresDependencyIndex > dependencyIndex);
            Assert.True(simpleResourceIndex > requiresDependencyIndex);
            Assert.True(lastDependecyIndex > simpleResourceIndex);
            Assert.True(lastResourceIndex > lastDependecyIndex);
        }