コード例 #1
0
        public void FilteredIsFalseIfChildMatches()
        {
            const string folderName = "Foobar";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _, out var state);

            using (state)
            {
                var folder =
                    new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations);
                var childName = folder.Children.First().Name;

                for (var characters = 1; characters <= childName.Length; characters++)
                {
                    folder.Filter = childName.Substring(0, characters);
                    Assert.IsFalse(folder.Filtered);
                }

                for (var position = childName.Length - 2; position > 0; position--)
                {
                    folder.Filter = childName.Substring(position);
                    Assert.IsFalse(folder.Filtered);
                }
            }
        }
コード例 #2
0
        public void CompareByType_ReturnsZeroForIdenticalNodes()
        {
            var declarations = new List <Declaration>();
            var errorNode    = new CodeExplorerCustomFolderViewModel(null, "Name", "folder1.folder2", null, ref declarations);

            Assert.AreEqual(0, new CompareByName().Compare(errorNode, errorNode));
        }
コード例 #3
0
        public void FilteredIsTrueForCharactersNotInName()
        {
            const string testCharacters = "abcdefghijklmnopqrstuwxyz";
            const string folderName     = "Asdf";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _, out var state);

            using (state)
            {
                var children = declarations.SelectMany(declaration => declaration.IdentifierName.ToCharArray())
                               .Distinct().ToList();

                var folder =
                    new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations);

                var nonMatching = testCharacters.ToCharArray()
                                  .Except(folderName.ToLowerInvariant().ToCharArray().Union(children));

                foreach (var character in nonMatching.Select(letter => letter.ToString()))
                {
                    folder.Filter = character;
                    Assert.IsTrue(folder.Filtered);
                }
            }
        }
コード例 #4
0
        public void CompareByName_ReturnsCorrectOrdering()
        {
            var declarations = new List <Declaration>();
            var folderNode1  = new CodeExplorerCustomFolderViewModel(null, "Name1", "Name1", null, ref declarations);
            var folderNode2  = new CodeExplorerCustomFolderViewModel(null, "Name2", "Name2", null, ref declarations);

            Assert.IsTrue(new CompareByName().Compare(folderNode1, folderNode2) < 0);
        }
コード例 #5
0
        private static RenameFolderModel ModelFromNode(CodeExplorerCustomFolderViewModel folderModel)
        {
            var folder           = folderModel.FullPath;
            var containedModules = ContainedModules(folderModel);
            var initialSubFolder = folder.SubFolderName();

            return(new RenameFolderModel(folder, containedModules, initialSubFolder));
        }
コード例 #6
0
        public void CompareByName_ReturnsZeroForIdenticalNames()
        {
            var declarations = new List <Declaration>();
            // this won't happen, but just to be thorough...--besides, it is good for the coverage
            var folderNode1 = new CodeExplorerCustomFolderViewModel(null, "Name", "Name", null, ref declarations);
            var folderNode2 = new CodeExplorerCustomFolderViewModel(null, "Name", "Name", null, ref declarations);

            Assert.AreEqual(0, new CompareByName().Compare(folderNode1, folderNode2));
        }
コード例 #7
0
        private MoveMultipleFoldersModel FolderModel(CodeExplorerCustomFolderViewModel folderModel)
        {
            var folder                = folderModel.FullPath;
            var containedModules      = ContainedModules(folderModel);
            var modulesBySourceFolder = new Dictionary <string, ICollection <ModuleDeclaration> > {
                { folder, containedModules }
            };
            var initialTargetFolder = folder.ParentFolder();

            return(new MoveMultipleFoldersModel(modulesBySourceFolder, initialTargetFolder));
        }
コード例 #8
0
        private static bool TryGetFolderViewModel(object sender, out CodeExplorerCustomFolderViewModel folderViewModel)
        {
            if ((sender as TreeViewItem)?.Header is CodeExplorerCustomFolderViewModel folder)
            {
                folderViewModel = folder;
                return(true);
            }

            folderViewModel = null;
            return(false);
        }
コード例 #9
0
        public void Constructor_CreatesCorrectSubFolderStructure(params object[] parameters)
        {
            var structure = ToFolderStructure(parameters.Cast <string>());
            var root      = structure.First().Folder;
            var path      = root.Split(FolderExtensions.FolderDelimiter);

            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(structure, out var projectDeclaration);
            var contents     = CodeExplorerProjectViewModel.ExtractTrackedDeclarationsForProject(projectDeclaration, ref declarations);

            var folder = new CodeExplorerCustomFolderViewModel(null, path.First(), path.First(), null, ref contents);

            AssertFolderStructureIsCorrect(folder, structure);
        }
コード例 #10
0
        public void Constructor_FolderAttributeIsCorrect(object[] parameters)
        {
            var structure  = ToFolderStructure(parameters.Cast <string>());
            var folderPath = structure.First().Folder;
            var path       = folderPath.Split(FolderExtensions.FolderDelimiter);

            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(structure, out _);
            var folder       = new CodeExplorerCustomFolderViewModel(null, path.First(), path.First(), null, ref declarations);

            foreach (var _ in path)
            {
                Assert.AreEqual($"'@Folder(\"{folder.FullPath}\")", folder.FolderAttribute);
                folder = folder.Children.OfType <CodeExplorerCustomFolderViewModel>().FirstOrDefault();
            }
        }
コード例 #11
0
        public void ErrorStateCanNotBeSet()
        {
            const string folderName = "Foo";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _);

            var folder = new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations)
            {
                IsErrorState = true
            };

            Assert.IsFalse(folder.IsErrorState);
        }
コード例 #12
0
        public void SortComparerIsName(CodeExplorerSortOrder order)
        {
            const string folderName = "Foo";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _);

            var folder = new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations)
            {
                SortOrder = order
            };

            Assert.AreEqual(CodeExplorerItemComparer.Name.GetType(), folder.SortComparer.GetType());
        }
コード例 #13
0
        public void Constructor_SetsFullPath(object[] parameters)
        {
            var structure  = ToFolderStructure(parameters.Cast <string>());
            var folderPath = structure.First().Folder;
            var path       = folderPath.Split(FolderExtensions.FolderDelimiter);

            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(structure, out _);
            var folder       = new CodeExplorerCustomFolderViewModel(null, path.First(), path.First(), null, ref declarations);

            var depth = 1;

            foreach (var _ in path)
            {
                Assert.AreEqual(string.Join(FolderExtensions.FolderDelimiter.ToString(), path.Take(depth++)), folder.FullPath);
                folder = folder.Children.OfType <CodeExplorerCustomFolderViewModel>().FirstOrDefault();
            }
        }
コード例 #14
0
        public void UnfilteredStateIsRestored()
        {
            const string folderName = "Foobar";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _);

            var folder    = new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations);
            var childName = folder.Children.First().Name;

            folder.IsExpanded = false;
            folder.Filter     = childName;
            Assert.IsTrue(folder.IsExpanded);

            folder.Filter = string.Empty;
            Assert.IsFalse(folder.IsExpanded);
        }
コード例 #15
0
        public void Constructor_SetsFolderName(object[] parameters)
        {
            var structure  = ToFolderStructure(parameters.Cast <string>());
            var folderPath = structure.First().Folder;
            var path       = folderPath.Split(FolderExtensions.FolderDelimiter);

            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(structure, out _, out var state);

            using (state)
            {
                var folder = new CodeExplorerCustomFolderViewModel(null, path.First(), path.First(), null, ref declarations);

                foreach (var name in path)
                {
                    Assert.AreEqual(name, folder.Name);
                    folder = folder.Children.OfType <CodeExplorerCustomFolderViewModel>().FirstOrDefault();
                }
            }
        }
コード例 #16
0
        public void FilteredIsFalseForSubsetsOfName()
        {
            const string folderName = "Foobar";

            var testFolder   = (Name : CodeExplorerTestSetup.TestModuleName, Folder : folderName);
            var declarations = CodeExplorerTestSetup.TestProjectWithFolderStructure(new List <(string Name, string Folder)> {
                testFolder
            }, out _);

            var folder = new CodeExplorerCustomFolderViewModel(null, folderName, folderName, null, ref declarations);

            for (var characters = 1; characters <= folderName.Length; characters++)
            {
                folder.Filter = folderName.Substring(0, characters);
                Assert.IsFalse(folder.Filtered);
            }

            for (var position = folderName.Length - 2; position > 0; position--)
            {
                folder.Filter = folderName.Substring(position);
                Assert.IsFalse(folder.Filtered);
            }
        }
コード例 #17
0
        public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration = null)
        {
            var delimiter = GetDelimiter();

            var root = new CodeExplorerCustomFolderViewModel(null, string.Empty, string.Empty, _state.ProjectsProvider, _vbe);

            var items = declaration == null
                ? _state.AllUserDeclarations.ToList()
                : _state.AllUserDeclarations.Where(d => d.ProjectId == declaration.ProjectId).ToList();

            var folders = items.Where(item => ComponentTypes.Contains(item.DeclarationType))
                          .Select(item => item.CustomFolder.Replace("\"", string.Empty))
                          .Distinct()
                          .Select(item => item.Split(delimiter));

            foreach (var folder in folders)
            {
                var currentNode = root;
                var fullPath    = string.Empty;

                foreach (var section in folder)
                {
                    fullPath += string.IsNullOrEmpty(fullPath) ? section : delimiter + section;

                    var node = currentNode.Items.FirstOrDefault(i => i.Name == section);
                    if (node == null)
                    {
                        node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath, _state.ProjectsProvider, _vbe);
                        currentNode.AddChild(node);
                    }

                    currentNode = (CodeExplorerCustomFolderViewModel)node;
                }
            }

            return(root);
        }
コード例 #18
0
 private static void AssertFolderStructureIsCorrect(CodeExplorerCustomFolderViewModel underTest, List <(string Name, string Folder)> structure)