public void ResourceFolder_Should_AddFiles() { var folder = new ResourceFolder(); var file = Substitute.For<IResourceFile>(); folder.AddFile(file); folder.Files.Count().Should().Be(1); file = Substitute.For<IResourceFile>(); folder.AddFile(file); folder.Files.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); } }