public void ShouldEnumerateLinesOfFile() { var block = FileLinesEnumerator.GetFileLinesEnumeratorBlock(); var file = new File { FullPath = @"TestFolder\TextFile1.txt" }; block.Post(file); var line = block.ReceiveWithTimeout(); block.Complete(); block.EnsureCompleted(); Assert.AreSame(file, line.File); Assert.AreEqual(1, line.Row); Assert.AreEqual("Мама мыла раму", line.Line); }
public void ShouldSkipEmptyLinesOfFile() { var block = FileLinesEnumerator.GetFileLinesEnumeratorBlock(); var file = new File { FullPath = @"TestFolder\Subfolder\TextFile2.txt" }; block.Post(file); block.ReceiveWithTimeout(); var line = block.ReceiveWithTimeout(); block.ReceiveWithTimeout(); block.Complete(); block.EnsureCompleted(); Assert.AreSame(file, line.File); Assert.AreEqual(3, line.Row); Assert.AreEqual("Mother was washing window frame", line.Line); }
public void ShouldThrowFileNotFoundExceptionWhenFileIsNotFound() { var block = FileLinesEnumerator.GetFileLinesEnumeratorBlock(); var file = new File { FullPath = @"TestFolder\UnkownFile.txt" }; block.Post(file); try { block.EnsureCompleted(); Assert.Fail(); } catch (AggregateException ex) { Assert.IsInstanceOfType(ex.GetBaseException(), typeof(System.IO.FileNotFoundException)); } }
public async Task ParseFilesAsync(string folderPath, string searchPattern) { var repository = repositoryFactory(); await repository.TruncateDataAsync(); var filesEnumerator = FilesEnumerator.GetFilesEnumeratorBlock(); var fileCreator = FileCreator.GetFileCreatorBlock(); filesEnumerator.LinkToAndPropagateCompleted(fileCreator); var fileLinesEnumerator = FileLinesEnumerator.GetFileLinesEnumeratorBlock(); fileCreator.LinkToAndPropagateCompleted(fileLinesEnumerator); var lineSplitter = LineSplitter.GetLineSplitterBlock(); fileLinesEnumerator.LinkToAndPropagateCompleted(lineSplitter); var fileWordCreator = FileWordCreator.GetFileWordCreatorBlock(); lineSplitter.LinkToAndPropagateCompleted(fileWordCreator); var fileWordSaver = FileWordSaver.GetFileWordSaverBlock(repositoryFactory); fileWordCreator.LinkToAndPropagateCompleted(fileWordSaver); var nullTarget = DataflowBlock.NullTarget <FileWord>(); fileWordSaver.LinkTo(nullTarget); filesEnumerator.Post(new FilesEnumerator.EnumerateFolderTask { Folder = folderPath, SearchPattern = searchPattern }); filesEnumerator.Complete(); await fileWordSaver.Completion; }