public void CannotGetDirectoryThatDoesNotExist()
        {
            var state = new FileSystemState();
            var root  = state.GetRootDirectory();

            var isGetDirectorySuccess = _directoryController.TryGetDirectory("Test", root, out var target);

            Assert.IsFalse(isGetDirectorySuccess);
            Assert.IsNull(target);
        }
        private bool TryGetTargetDirectory(string targetDirectoryPath, out Directory targetDirectory, out string errorMessage)
        {
            // There are three options here - first is that this is an absolute path, which means that the first character is a path delimiter
            if (_pathDelimiters.Contains(targetDirectoryPath.FirstOrDefault()))
            {
                var rootDirectory = _fileSystemState.GetRootDirectory();
                return(TryGetTargetDirectory(rootDirectory, targetDirectoryPath, out targetDirectory, out errorMessage));
            }

            // Second is that this is a relative path, but begins with a `~` symbol, which means the home directory is the starting point of the path
            if (_homeDirectorySymbol.Equals(targetDirectoryPath.FirstOrDefault().ToString(), StringComparison.InvariantCultureIgnoreCase))
            {
                var rootDirectory             = _fileSystemState.GetRootDirectory();
                var isGetHomeDirectorySuccess = _directoryController.TryGetDirectory("home", rootDirectory, out var homeDirectory);
                return(TryGetTargetDirectory(homeDirectory, targetDirectoryPath, out targetDirectory, out errorMessage, ignoreFirstHomeSymbol: true));
            }

            // Third is that this is a relative path that does not begin with a `~` symbol, which means that the current directory is the starting point of the path
            var currentDirectory = _fileSystemState.GetCurrentDirectory();

            return(TryGetTargetDirectory(currentDirectory, targetDirectoryPath, out targetDirectory, out errorMessage));
        }
        private string ChangeDirectoryToHome()
        {
            var rootDirectory             = _fileSystemState.GetRootDirectory();
            var isGetHomeDirectorySuccess = _directoryController.TryGetDirectory(_homeDirectoryName, rootDirectory, out var homeDirectory);

            if (!isGetHomeDirectorySuccess)
            {
                return($"Error - Failed to get `{_homeDirectoryName}` directory in `{rootDirectory.Name}`");
            }

            var isSetCurrentDirectoryAsHomeSuccess = _fileSystemState.TrySetCurrentDirectory(homeDirectory);

            if (!isSetCurrentDirectoryAsHomeSuccess)
            {
                return($"Error - Failed to set current directory to `{_homeDirectoryName}` directory");
            }

            return($"Current working directory changed");
        }