public void ResourceFolder_Should_FindFolders() { // A/B/C var a = new ResourceFolder() { Name= "A" }; var b = new ResourceFolder() { Name = "B" }; var c = new ResourceFolder() { Name = "C" }; var d = new ResourceFolder() { Name = "D" }; var e = new ResourceFolder() { Name = "E" }; var f = new ResourceFolder() { Name = "F" }; var g = new ResourceFolder() { Name = "G" }; var h = new ResourceFolder() { Name = "H" }; var i = new ResourceFolder() { Name = "I" }; a.AddFolder(b); b.AddFolder(c); b.AddFolder(d); c.AddFolder(e); c.AddFolder(f); e.AddFolder(g); f.AddFolder(h); g.AddFolder(i); var found = a.FindFolder(@"B\C\F\H"); found.Should().Be(h); found = a.FindFolder(@"B/C/F\H"); found.Should().Be(h); found = a.FindFolder(@"B/C/F/H"); found.Should().Be(h); }
public void ResourceFolder_Should_AddFolders() { var folder = new ResourceFolder(); var newFolder = Substitute.For<IResourceFolder>(); folder.AddFolder(newFolder); folder.Folders.Count().Should().Be(1); newFolder = Substitute.For<IResourceFolder>(); folder.AddFolder(newFolder); folder.Folders.Count().Should().Be(2); }
/// <summary> /// Processes the file part. /// This helps recursively create our directory structure. /// </summary> /// <param name="resourceName">Name of the file.</param> /// <param name="parts">The parts.</param> /// <param name="folder">The folder.</param> /// <exception cref="System.Collections.Generic.KeyNotFoundException"></exception> private void ProcessFilePart(string resourceName, IEnumerable<string> parts, ResourceFolder folder) { resourceName = resourceName.Replace("\\", "/"); if (parts.Count() == 1) { IResourceFile item = null; this._embeddedResourceItems.TryGetValue(GetResourceItemKey(resourceName), out item); var embeddedResourceFile = item as ResourceFile; if (embeddedResourceFile == null && !resourceName.EndsWith(".resx", StringComparison.OrdinalIgnoreCase)) { System.Diagnostics.Trace.TraceWarning("Could not find an embedded file {0} yet it was defined in embedded project file.", resourceName); } if (item != null) { folder.AddFile(item); // we can only infer the virtual path once we know the file location. embeddedResourceFile.VirtualPath = "~/" + resourceName; embeddedResourceFile.FileName = parts.First(); } } else if (parts.Count() > 1) { var originalPart = parts.First(); var firstPart = originalPart .Replace("-", "_"); // this is a MSBuild convention, folder paths cannot contain a -, they are converted to _ at build time. // File names can contain dashes on the other hand... go figure. var nextParts = parts.Skip(1); var childFolder = folder.Folders .OfType<ResourceFolder>() .FirstOrDefault(x => x.Name.Equals(firstPart, StringComparison.OrdinalIgnoreCase)); if (childFolder == null) { var folderParts = resourceName.Split('/'); folderParts = folderParts.Take(folderParts.Length - 1).ToArray(); var virtualPath = "~/" + String.Join("/", folderParts); var resourcePath = "~/" + String.Join("/", folderParts.Select(GetFolderPathDelegate)); childFolder = new ResourceFolder() { Name = firstPart, VirtualPath = virtualPath, ResourcePath = resourcePath, }; folder.AddFolder(childFolder); } this.ProcessFilePart(resourceName, nextParts, childFolder); } }