private static FileElement AddNewFile(FolderElement folderElement, string fileName, int fileSize)
    {
      var fileElement = new FileElement(fileName, fileSize);
      folderElement.Add(fileElement);

      return fileElement;
    }
    public void IsSelected_ChangeThePropertyValue_ValueIsSetCorrectly()
    {
      var folerElement = new FolderElement("folder");
      folerElement.IsSelected = true;
      Assert.IsTrue(folerElement.IsSelected);

      folerElement.IsSelected = false;
      Assert.IsFalse(folerElement.IsSelected);
    }
        private FolderElement InspectDirectory()
        {
            Stack <FolderElement> stack = new Stack <FolderElement>();
            var rootElement             = new FolderElement(TargetDirectory);

            stack.Push(rootElement);
            var errors = new StringBuilder();

            while (stack.Count > 0)
            {
                try
                {
                    var currentFolderElement = stack.Pop();
                    var directoryName        = currentFolderElement.Name;

                    var fileEntries = Directory.EnumerateFiles(directoryName);
                    foreach (var fileName in fileEntries)
                    {
                        var fileInfo    = new FileInfo(fileName);
                        var fileElement = new FileElement(fileName, fileInfo.Length);
                        currentFolderElement.Add(fileElement);

                        _BusyWindow.ShowCurrentInspectingElement(fileName);
                    }

                    var subDirectoryEntries = Directory.EnumerateDirectories(directoryName);
                    foreach (var subDirectory in subDirectoryEntries)
                    {
                        var folderElement = new FolderElement(subDirectory);
                        currentFolderElement.Add(folderElement);

                        _BusyWindow.ShowCurrentInspectingElement(subDirectory);

                        stack.Push(folderElement);
                    }
                }
                catch (UnauthorizedAccessException ex)
                {
                    errors.AppendLine(ex.Message);
                }
                catch (FileNotFoundException ex)
                {
                    errors.AppendLine(ex.Message);
                }
                catch (Exception ex)
                {
                    errors.AppendLine(ex.Message);
                }
            }

            ProcessDetailedErrors = errors.ToString();

            return(rootElement);
        }
 public void Size_IncreseElementSize_ParentSizeAlsoIncreased()
 {
   var folderElement = new FolderElement("root");
   var fileElement1 = new FileElement("file1.txt", 10);
   var fileElement2 = new FileElement("file2.txt", 50);
   folderElement.Add(fileElement1);
   folderElement.Add(fileElement2);
   // change the size from 10 to 100
   fileElement1.Size = 100;
   Assert.AreEqual(150, folderElement.Size);
 }
    public void Add_CreateNewFolderThenAddANewFolder_TheFolderSizeIsZero()
    {
      // arrange
      var folder1 = new FolderElement("f1");

      // assign
      _FolderElementTested.Add(folder1);

      // assert
      var actual = _FolderElementTested.Size;
      var expected = 0;
      Assert.AreEqual(expected, actual);
    }
    // Initialize the directories as below
    // - root
    //    - root-file1.text
    //    - root-file2.text
    //    - sub
    //        - sub file1.txt
    //        - sub file2.txt
    private void InitTheElementsList()
    {
      var rootFolder = new FolderElement("root");
      var rootFile1 = new FileElement("root-file1.text", 100);
      var rootFile2 = new FileElement("root-file1.text", 100);
      var subFolder = new FolderElement("sub");
      var subFile1 = new FileElement("sub file1.txt", 300);
      var subFile2 = new FileElement("sub file2.txt", 400);
      
      rootFolder.Add(rootFile1);
      rootFolder.Add(rootFile2);
      rootFolder.Add(subFolder);

      subFolder.Add(subFile1);
      subFolder.Add(subFile2);

      _SizeCounterViewModel.ElementList.Add(rootFolder);
    }
 public void Init()
 {
   _FolderElementTested = new FolderElement("folder element");
 }
    public void Add_CreateNewFolderThenAddAFolderIncludesFile_TheFolderSizeIsIncreased()
    {
      // arrange
      var folder1 = new FolderElement("f1");
      AddNewFile(folder1, 100);

      // assign
      _FolderElementTested.Add(folder1);

      // assert
      var actual = _FolderElementTested.Size;
      var expected = 100;
      Assert.AreEqual(expected, actual);
    }
    public void ShortName_TestForOnlyRootPathEndWithSlash_TheRootPathWithSlashIsTheShortName()
    {
      var testPath = @"C:\";
      var folderElement = new FolderElement(testPath);

      var expected = @"C:\";
      var actual = folderElement.ShortName;

      Assert.AreEqual(expected, actual);
    }
    public void ShortName_TestForOnlyNormalPathEndWithSlash_TheLastFolderNameIsTheShortName()
    {
      var testPath = @"C:\Folder1\";
      var folderElement = new FolderElement(testPath);

      var expected = @"Folder1";
      var actual = folderElement.ShortName;

      Assert.AreEqual(expected, actual);
    }
    public void Add_AddFileTo2LevelFolders_TheRootFolderSizeIsCorrect()
    {
      var rootFolder = new FolderElement("root");
      AddNewFile(rootFolder, 100);

      var leafLevel1Folder = new FolderElement("Leaf_Level_1");
      var leafLevel2Folder = new FolderElement("Leaf_Level_2");
      rootFolder.Add(leafLevel1Folder);
      leafLevel1Folder.Add(leafLevel2Folder);

      AddNewFile(leafLevel2Folder, 1000);

      Assert.AreEqual(1100, rootFolder.Size);
    }
    private void ParseDirectory(string directory, FolderElement currentFolderElement)
    {
      //TODO: change the recursive to do-while
      var fileEntries = Directory.GetFiles(directory);
      foreach (var fileName in fileEntries)
      {
        var fileInfo = new FileInfo(fileName);
        var fileElement = new FileElement(fileName, fileInfo.Length);
        currentFolderElement.Add(fileElement);
      }

      var subDirectoryEntries = Directory.GetDirectories(directory);
      foreach (var subDirectory in subDirectoryEntries)
      {
        var folderElement = new FolderElement(subDirectory);
        currentFolderElement.Add(folderElement);
        ParseDirectory(subDirectory, folderElement);
      }
    }
    public void Children_AddFileTo2LevelFolders_TheChildrenAreAllRight()
    {
      var rootFolder = new FolderElement("root");
      var rootFile = AddNewFile(rootFolder, "rootFile", 100);

      var leafLevel1Folder = new FolderElement("Leaf_Level_1");
      var leafLevel2Folder = new FolderElement("Leaf_Level_2");
      rootFolder.Add(leafLevel1Folder);
      leafLevel1Folder.Add(leafLevel2Folder);

      // act
      var actualChildrenCount = rootFolder.Children.Count;

      Assert.AreEqual(2, actualChildrenCount);
      Assert.AreSame(rootFile, rootFolder.Children[0]);
      Assert.AreSame(leafLevel1Folder, rootFolder.Children[1]);

      Assert.AreEqual(1, leafLevel1Folder.Children.Count);
      Assert.AreSame(leafLevel2Folder, leafLevel1Folder.Children[0]);
    }
    public void Parent_AddFolderBToFolderA_AShouldBeParentOfB()
    {
      // arrange
      var rootFolder = new FolderElement("root");
      rootFolder.Add(_FolderElementTested);

      Assert.AreSame(rootFolder, _FolderElementTested.Parent);
    }
 private static FileElement AddNewFile(FolderElement folderElement, int fileSize)
 {
   return AddNewFile(folderElement, "file1", fileSize);
 }
    public void Remove_AddFileTo2LevelFoldersAndThenRemoveTheSubLevelFolder_TheRootFolderSizeIsCorrect()
    {
      var rootFolder = new FolderElement("root");
      AddNewFile(rootFolder, "rootFile", 100);

      var leafLevel1Folder = new FolderElement("Leaf_Level_1");
      var leafLevel2Folder = new FolderElement("Leaf_Level_2");
      rootFolder.Add(leafLevel1Folder);
      leafLevel1Folder.Add(leafLevel2Folder);

      AddNewFile(leafLevel2Folder, "leaf2", 1000);

      // act
      rootFolder.Remove(leafLevel1Folder);

      Assert.AreEqual(100, rootFolder.Size);
    }
 public void Remove_RemoveExistingFolder_SizeIsRecalculated()
 {
   // arrange
   var folder1 = new FolderElement("f1");
   AddNewFile(folder1, 100);
   _FolderElementTested.Add(folder1);
   AddNewFile(_FolderElementTested, 200);
   // assign
   _FolderElementTested.Remove(folder1);
   // asset
   Assert.AreEqual(200, _FolderElementTested.Size);
 }
    public void Children_AddFileTo2LevelFoldersAndThenRemoveTheSubLevelFolder_TheChildrenAreUpdated()
    {
      var rootFolder = new FolderElement("root");
      var rootFile = AddNewFile(rootFolder, "rootFile", 100);

      var leafLevel1Folder = new FolderElement("Leaf_Level_1");
      var leafLevel2Folder = new FolderElement("Leaf_Level_2");
      rootFolder.Add(leafLevel1Folder);
      leafLevel1Folder.Add(leafLevel2Folder);

      AddNewFile(leafLevel2Folder, "leaf2", 1000);

      // act
      rootFolder.Remove(leafLevel1Folder);

      Assert.AreEqual(1, rootFolder.Children.Count);
      Assert.AreSame(rootFile, rootFolder.Children[0]);
    }
    private FolderElement InspectDirectory()
    {
      var rootElement = new FolderElement(TargetDirectory);
      ParseDirectory(TargetDirectory, rootElement);

      return rootElement;
    }
    public void Add_AddFileToFolder_FolderParentSizeShouldRecalculate()
    {
      // arrange
      var rootFolder = new FolderElement("root");
      rootFolder.Add(_FolderElementTested);

      // assign
      const int fileSize = 100;
      AddNewFile(_FolderElementTested, fileSize);

      // assert
      var actual = _FolderElementTested.Parent.Size;
      var expected = fileSize;
      Assert.AreEqual(expected, actual);
    }