Exemple #1
0
        public void ContextEnumeratorClassWithAsTreeExtension_PropertyParent_MustWork()
        {
            // Создать линейный список
            // Сформировать из него дерево посредством тестируемого класса
            // Сфомировать дерево рекурсивно
            // Сравнить два дерева
            var items = TreeItemHelper.Generate_ForParentCheck();

            // classic method
            var recursiveTree = GetSubLevel(0, items);

            // no recursive method
            var noRecursiveTree = new List <TreeItem>();

            // Шаблон формирования дерева с использованием итератора с контекстом
            foreach (TreeNodeContext <TreeItem> node in items.Where(a => a.ParentId == 0).AsTreeWithContext(item => items.Where(a => a.ParentId == item.Id).OrderBy(a => a.Id)))
            {
                var treeItem = node.Value;

                if (node.Parent != null)
                {
                    // Если у текущего элемента есть родитель - добавим его к этому родителю
                    node.Parent.Childs.Add(treeItem);
                }
                else
                {
                    // Если у текущего элемента нет родителя, значит, это корневой элемент
                    noRecursiveTree.Add(treeItem);
                }
            }

            CompareTrees(recursiveTree, noRecursiveTree);
        }
Exemple #2
0
        public bool NewFolder(out FolderInfo folderInfo)
        {
            folderInfo = null;
            var dirPath    = TreeItemHelper.GetDirPath(FullPath);
            var folderName = TreeItemHelper.GetCreateFolderName("NewFolder", dirPath);
            var folderPath = Path.Combine(dirPath, folderName);

            if (Directory.CreateDirectory(folderPath).Exists)
            {
                folderInfo = LoadFolder(folderName, dirPath);
                IsExpanded = true;
                return(true);
            }
            return(false);
        }
Exemple #3
0
        public bool NewController(out ControllerInfo controllerInfo)
        {
            controllerInfo = null;
            var dirPath        = TreeItemHelper.GetDirPath(FullPath);
            var controllerName = TreeItemHelper.GetCreateControllerName("Controller", ControllerInfo.EXTENSION, dirPath);
            var controllerPath = Path.Combine(dirPath, controllerName);

            if (!File.Exists(controllerPath))
            {
                controllerInfo = LoadController(controllerName, dirPath);
                IsExpanded     = true;
                controllerInfo.Save();
                return(true);
            }
            return(false);
        }
Exemple #4
0
        public void Dispose_MustBeExecuting_Ok()
        {
            // Данные для теста
            var items = TreeItemHelper.Generate_ForDisposeTest();

            // Подсчёт вызовов
            var counter = new Counter();

            // Тестовые итераторы
            var head = new CustomEnumerable(items.Where(a => a.ParentId == 0), counter);                                                                    // 1 call = 1 disposing

            IEnumerable <TreeItem> GetChildren(TreeItem item) => new CustomEnumerable(items.Where(a => a.ParentId == item.Id).OrderBy(a => a.Id), counter); // 4 elements = 5 calls = 5 disposing (try get subelements at Id=5)

            // Шаблон формирования дерева с использованием итератора с контекстом
            using (var enumerator = new TreeEnumerator <TreeItem>(head, GetChildren))
            {
                while (enumerator.MoveNext())
                {
                }
            }

            // total 6 calls
            Assert.Equal(6, counter.DisposeCount);
        }
Exemple #5
0
        public void Reset_MustNotSupportedException_Ok()
        {
            // Данные для теста
            var items = TreeItemHelper.Generate_ForDisposeTest();

            // Подсчёт вызовов
            var counter = new Counter();

            // Тестовые итераторы
            var head = new CustomEnumerable(items.Where(a => a.ParentId == 0), counter);                                                                    // 1 call = 1 disposing

            IEnumerable <TreeItem> GetChildren(TreeItem item) => new CustomEnumerable(items.Where(a => a.ParentId == item.Id).OrderBy(a => a.Id), counter); // 4 elements = 5 calls = 5 disposing (try get subelements at Id=5)

            // Шаблон формирования дерева с использованием итератора с контекстом
            using (var enumerator = new TreeEnumerator <TreeItem>(head, GetChildren))
            {
                int i = 0;
                while (enumerator.MoveNext())
                {
                    // i = 0 - current=head
                    // i = 1 - current=sub 1 head 1
                    // i = 2 - current=sub 1 head 2
                    // i = 3 - current=sub 1 head 3
                    // i = 4 - current=sub 1 head 4

                    if (i == 4)
                    {
                        // enumerator has stack with 5 elements
                        Assert.Throws <NotSupportedException>(() => enumerator.Reset());
                        break;
                    }

                    i++;
                }
            }
        }