示例#1
0
        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]);
        }
示例#2
0
        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]);
        }