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