Exemplo n.º 1
0
        static void Main(string[] args)
        {
            // Use some IoC to initialize
            IParser<string> parser = new SyncStringToStringParser();
            IConsumerUnit consumer = new ConsumerUnit(parser, Program.PrintResults);

            IInputQueue<string> inputQueue = new StringInputQueue();
            IOutputQueue<string> outputQueue = new StringOutputQueue();

            IExtractor<string, string> extractor = new AsyncStringToStringExtractor(5, new RealWebClient());
            IProducerUnit producer = new ProducerUnit(inputQueue, outputQueue, extractor);
            producer.Consumer = consumer;

            // Retrieve input from file
            string relative = "Input/InputFile.txt";
            string absolute = Path.GetFullPath(relative);
            string[] lines = File.ReadAllLines(absolute);

            // Add input to producer
            producer.AddInput(lines);

            // Start processing
            producer.StartProcessing();
            Console.WriteLine("Processing started.");

            Console.ReadLine();
        }
        public void Enqueue_AddItem_CorrectSize()
        {
            // Arrange
            IOutputQueue<string> outputQueue = new StringOutputQueue();

            // Act
            int empty = outputQueue.GetSize();
            outputQueue.Enqueue("test string");
            int filled = outputQueue.GetSize();

            // Assert
            Assert.AreEqual(0, empty);
            Assert.AreEqual(1, filled);
        }
        public void Extracting_ValidInput_ValidOutput()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            IOutputQueue<string> outputQueue = new StringOutputQueue();
            inputQueue.Enqueue("https://www.google.sk/");

            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new MockWebClient());
            bool finished = false;

            // Act
            extractor.Extract(inputQueue, outputQueue, () => finished = true);

            // Assert
            string output = outputQueue.Dequeue();
            Assert.IsNotNull(output);
            Assert.IsTrue(finished);
        }
        public void Dequeue_AddAndRemoveItem_CorrectSize()
        {
            // Arrange
            IOutputQueue<string> outputQueue = new StringOutputQueue();
            string original = "test string";

            // Act
            int empty = outputQueue.GetSize();
            outputQueue.Enqueue(original);
            int filled = outputQueue.GetSize();
            string retrieved = outputQueue.Dequeue();
            int removed = outputQueue.GetSize();

            // Assert
            Assert.AreEqual(0, empty);
            Assert.AreEqual(1, filled);
            Assert.AreEqual(0, removed);
            Assert.AreEqual(original, retrieved);
        }
        public void StartProcessing_WebException_DoNotPropagateException()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Web_scraping");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Foxfire");

            IOutputQueue<string> outputQueue = new StringOutputQueue();
            // Use ExceptionWebClient to simulate Web Exception
            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new ExceptionWebClient());
            IProducerUnit producer = new ProducerUnit(inputQueue, outputQueue, extractor);

            // Act
            producer.StartProcessing();

            // Assert
            int outputQueueLength = 0;
            while (outputQueue.Dequeue() != null)
            {
                outputQueueLength++;
            }
            Assert.AreEqual(0, outputQueueLength);
        }
        public void StartProcessing_ValidInput_GetCorrectOutput()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Web_scraping");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Firefox");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Foxfire");

            IOutputQueue<string> outputQueue = new StringOutputQueue();
            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new MockWebClient());
            IProducerUnit producer = new ProducerUnit(inputQueue, outputQueue, extractor);

            // Act
            producer.StartProcessing();

            // Assert
            int outputQueueLength = 0;
            while (outputQueue.Dequeue() != null)
            {
                outputQueueLength++;
            }
            Assert.AreEqual(3, outputQueueLength);
        }