public void DisplaySize_FileIsMaximumMBytes_DisplayGbFormat()
    {
      var fileElement = new FileElement("file1.text", 1024*1024*1024 - 1);

      var actual = fileElement.DisplaySize;
      Assert.AreEqual("1.0 G", actual);
    }
    public void DisplaySize_FileIs1023Bytes_Display1023bytes()
    {
      var fileElement = new FileElement("file1.text", 1023);

      var actual = fileElement.DisplaySize;
      Assert.AreEqual("1023 Byte(s)", actual);
    }
    public void DisplaySize_FileIs1025Bytes_DisplayKbFormat()
    {
      var fileElement = new FileElement("file1.text", 1025);

      var actual = fileElement.DisplaySize;
      Assert.AreEqual("1.0 K", actual);
    }
    private static FileElement AddNewFile(FolderElement folderElement, string fileName, int fileSize)
    {
      var fileElement = new FileElement(fileName, fileSize);
      folderElement.Add(fileElement);

      return fileElement;
    }
    public void ShortName_NormalFullPath_OnlyReturnTheFileName()
    {
      var fileElement = new FileElement(@"C:\folder1\1.txt", 100);
      var expected = "1.txt";
      var actual = fileElement.ShortName;

      Assert.AreEqual(expected, actual);
    }
        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);
 }
    // 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 DisplayString_FileNameIsFullPath_DisplayFormatIsCorrect()
 {
   var fileElement = new FileElement(@"c:\folder1\file1.txt", 1024);
   var actualDisplayString = fileElement.DisplayString;
   Assert.AreEqual("file1.txt [1.0 K]", actualDisplayString);
 }
    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);
      }
    }