public void SetUpFixture()
        {
            MSBuildBasedProject project = WebReferenceTestHelper.CreateTestProject("C#");

            project.FileName          = Path.Combine(projectDirectory, "foo.csproj");
            project.AppDesignerFolder = "Properties";

            WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);

            webReferencesItem.Include = "Web References\\";
            ProjectService.AddProjectItem(project, webReferencesItem);

            FileProjectItem fileItem = new FileProjectItem(project, ItemType.Folder);

            fileItem.Include = "MissingFolder\\";
            ProjectService.AddProjectItem(project, fileItem);

            ProjectNode projectNode = new ProjectNode(project);

            appDesignerFolderNode   = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(projectDirectory, "Properties"));
            ordinaryFolderNode      = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, "Test"));
            webReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, webReferencesItem.Include));
            webReferenceNode        = DirectoryNodeFactory.CreateDirectoryNode(webReferencesFolderNode, project, Path.Combine(Path.Combine(project.Directory, webReferencesItem.Include), "localhost"));

            missingWebReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(webReferencesItem, FileNodeStatus.Missing);
            missingOrdinaryFolderNode      = DirectoryNodeFactory.CreateDirectoryNode(fileItem, FileNodeStatus.Missing);
        }
        public void CreateDirectoryNode_WCFMetadataProjectItem_CreatesServiceReferencesFolderNode()
        {
            CreateProject();
            ServiceReferencesProjectItem projectItem = AddWCFMetadataProjectItemToProject();

            DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);

            Assert.IsTrue(node is ServiceReferencesFolderNode);
        }
        public void CreateDirectoryNode_WCFMetadataProjectItem_ProjectItemPassedToDirectoryNodeCreated()
        {
            CreateProject();
            ServiceReferencesProjectItem expectedProjectItem = AddWCFMetadataProjectItemToProject();

            DirectoryNode node        = DirectoryNodeFactory.CreateDirectoryNode(expectedProjectItem, FileNodeStatus.None);
            ProjectItem   projectItem = node.ProjectItem;

            Assert.AreEqual(expectedProjectItem, projectItem);
        }
        public void CreateDirectoryNode_WCFMetadataProjectItem_FileNodeStatusPassedToDirectoryNodeCreated()
        {
            CreateProject();
            ServiceReferencesProjectItem projectItem = AddWCFMetadataProjectItemToProject();

            DirectoryNode  node       = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.Missing);
            FileNodeStatus nodeStatus = node.FileNodeStatus;

            Assert.AreEqual(FileNodeStatus.Missing, nodeStatus);
        }
        public void CreateDirectoryNode_FileProjectItemThatEndsWithBackSlash_DirectoryNodeCreatedWithBackSlashRemoved()
        {
            CreateProject();
            project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
            FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder\");

            DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);

            Assert.AreEqual(@"d:\projects\MyProject\MyFolder", node.Directory.ToString());
        }
        public void CreateDirectoryNode_ParentIsServiceReferencesFolderNode_CreatesServiceReferenceNode()
        {
            CreateProject();
            ServiceReferencesProjectItem expectedProjectItem = AddWCFMetadataProjectItemToProject();
            DirectoryNode parentServiceReferencesFolderNode  =
                DirectoryNodeFactory.CreateDirectoryNode(expectedProjectItem, FileNodeStatus.None);
            string directory = "ServiceReference1";

            ServiceReferenceNode node =
                DirectoryNodeFactory.CreateDirectoryNode(parentServiceReferencesFolderNode, project, directory) as ServiceReferenceNode;

            Assert.AreEqual("ServiceReference1", node.Directory.ToString());
        }
        public void CreateDirectoryNode_ProjectHasServiceReferencesItemAndDirectoryMatchesServiceReferencesPath_CreatesServiceReferencesFolderNode()
        {
            CreateProject();
            project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
            ServiceReferencesProjectItem projectItem = AddWCFMetadataProjectItemToProject();

            projectItem.Include = @"Service References\";

            string directory = @"d:\projects\MyProject\Service References";
            ServiceReferencesFolderNode referencesNode =
                DirectoryNodeFactory.CreateDirectoryNode(null, project, directory) as ServiceReferencesFolderNode;

            Assert.AreEqual(directory, referencesNode.Directory.ToString());
        }
        protected override void Initialize()
        {
            Dictionary <string, FileNode>      fileNodeDictionary = new Dictionary <string, FileNode>((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase);
            Dictionary <string, DirectoryNode> directoryNodeList  = new Dictionary <string, DirectoryNode>((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase);
            string relativeDirectoryPath = (this.RelativePath.Length <= 0) ? string.Empty : (this.RelativePath.Replace('\\', '/') + "/");

            foreach (FileProjectItem item in this.Project.Items.OfType <FileProjectItem>())
            {
                string virtualName = item.VirtualName.Replace('\\', '/');
                if (virtualName.EndsWith("/", StringComparison.Ordinal))
                {
                    virtualName = virtualName.Substring(0, virtualName.Length - 1);
                }
                string fileName = Path.GetFileName(virtualName);
                if (!string.Equals(virtualName, relativeDirectoryPath + fileName, StringComparison.InvariantCultureIgnoreCase))
                {
                    this.AddParentFolder(virtualName, relativeDirectoryPath, directoryNodeList);
                    // continue;
                }

                if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences)
                {
                    DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, this.Project, fileName);
                    if (!System.IO.Directory.Exists(item.FileName))
                    {
                        newDirectoryNode.FileNodeStatus = FileNodeStatus.Missing;
                    }
                    newDirectoryNode.ProjectItem = item;
                    newDirectoryNode.AddTo(this);
                    directoryNodeList[fileName] = newDirectoryNode;
                }
                else
                {
                    FileNode fileNode = new FileNode(item.FileName);
                    if (!File.Exists(item.FileName))
                    {
                        fileNode.FileNodeStatus = FileNodeStatus.Missing;
                    }
                    fileNode.ProjectItem         = item;
                    fileNodeDictionary[fileName] = fileNode;
                    fileNode.AddTo(this);
                }
            }

            // Add files found in file system
            if (System.IO.Directory.Exists(this.Directory))
            {
                foreach (string subDirectory in System.IO.Directory.GetDirectories(this.Directory))
                {
                    string filename = Path.GetFileName(subDirectory);
                    if (filename != ".svn")
                    {
                        DirectoryNode node;
                        if (directoryNodeList.TryGetValue(filename, out node))
                        {
                            if (node.FileNodeStatus == FileNodeStatus.None)
                            {
                                node.FileNodeStatus = FileNodeStatus.InProject;
                            }
                        }
                        else
                        {
                            node = DirectoryNodeFactory.CreateDirectoryNode(this, this.Project, subDirectory);
                            node.AddTo(this);
                        }
                    }
                }

                foreach (string fullpath in System.IO.Directory.GetFiles(this.Directory))
                {
                    string   file = Path.GetFileName(fullpath);
                    FileNode node;
                    if (fileNodeDictionary.TryGetValue(file, out node))
                    {
                        if (node.FileNodeStatus == FileNodeStatus.None)
                        {
                            node.FileNodeStatus = FileNodeStatus.InProject;
                        }
                    }
                    else
                    {
                        node = new FileNode(file);
                        node.AddTo(this);
                    }
                }
            }
        }