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