public void FlatFileExtractorTestsTextFile() { FlatFileExtractor FlatFileExtractor = new FlatFileExtractor(); Action <PipelineContext, IProducerConsumerCollection <string>, ManualResetEvent> action = FlatFileExtractor.GetPausableWorkItem(); List <string> ResultList = new List <string>(); ConcurrentQueue <string> results = new ConcurrentQueue <string>(); PipelineContext pipelineContext = new PipelineContext() { FirstLineContainsHeaders = false, SourceFilePath = @"..\..\..\D2S.LibraryTests\ExtractorTests.txt" }; FlatFileExtractor.SetContext(pipelineContext); action(pipelineContext, results, null); ResultList = results.ToList(); foreach (string s in ResultList) { Console.WriteLine(s); } Assert.AreEqual(expected: "This is a line", actual: ResultList[0]); Assert.AreEqual(expected: "this is also a line", actual: ResultList[1]); Assert.AreEqual(expected: "EOF", actual: ResultList[2]); }
public void PausingFileExtractorTest() { FlatFileExtractor FlatFileExtractor = new FlatFileExtractor(); Action <PipelineContext, IProducerConsumerCollection <string>, ManualResetEvent> action = FlatFileExtractor.GetPausableWorkItem(); List <string> ResultList = new List <string>(); PipelineContext pipelineContext = new PipelineContext() { FirstLineContainsHeaders = false, SourceFilePath = @"..\..\..\D2S.LibraryTests\ExtractorTests.txt" }; FlatFileExtractor.SetContext(pipelineContext); // pass an unset resetevent to prevent immediate execution ManualResetEvent pauseEvent = new ManualResetEvent(false); // run method asynchronously ConcurrentQueue <string> results = new ConcurrentQueue <string>(); Task work = Task.Factory.StartNew( () => action(pipelineContext, results, pauseEvent) ); Task.Delay(50).Wait(); //wait a small amount of time //affirm that resultset is still empty as we have not unpaused the work Assert.IsTrue(results.Count == 0); //now unpause and affirm the work is completed pauseEvent.Set(); work.Wait(); //syncronously waiting on work ResultList = results.ToList(); foreach (string s in ResultList) { Console.WriteLine(s); } Assert.AreEqual(expected: "This is a line", actual: ResultList[0]); Assert.AreEqual(expected: "this is also a line", actual: ResultList[1]); Assert.AreEqual(expected: "EOF", actual: ResultList[2]); }