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"); }
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); }
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); }
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); }
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); }
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; }
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; }
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); } }
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); }
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); }