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); }