Exemplo n.º 1
0
        public async Task Pipeline_WithSteps_InvokesInjectedSteps()
        {
            var mockHttpContext = Mock.Of <HttpContext>();

            var firstMockStep = new Mock <IExtractionStep>();

            firstMockStep.Setup(m => m.CanExtract(It.IsAny <HttpContext>())).Returns(true);
            firstMockStep.Setup(m => m.ExtractAsync(It.IsAny <HttpContext>())).ReturnsAsync("ExtractedContent");

            var secondMockStep = new Mock <IExtractionStep>();

            secondMockStep.Setup(m => m.CanExtract(It.IsAny <HttpContext>())).Returns(true);
            secondMockStep.Setup(m => m.ExtractAsync(It.IsAny <HttpContext>())).ReturnsAsync("ExtractedContent");

            List <IExtractionStep> steps = new List <IExtractionStep>
            {
                firstMockStep.Object,
                secondMockStep.Object
            };

            var pipeline = new ExtractionPipeline(steps);

            var extractedContent = await pipeline.ExecuteAsync(mockHttpContext);

            extractedContent.Should().NotBeNullOrWhiteSpace();
            firstMockStep.Verify(m => m.CanExtract(mockHttpContext), Times.Once);
            firstMockStep.Verify(m => m.ExtractAsync(mockHttpContext), Times.Once);
            secondMockStep.Verify(m => m.CanExtract(mockHttpContext), Times.Once);
            secondMockStep.Verify(m => m.ExtractAsync(mockHttpContext), Times.Once);
        }
Exemplo n.º 2
0
        public async Task Pipeline_EncountersError_RaisesException()
        {
            var mockHttpContext = Mock.Of <HttpContext>();

            var mockStep = new Mock <IExtractionStep>();

            mockStep.Setup(m => m.CanExtract(It.IsAny <HttpContext>())).Throws(new Exception());

            List <IExtractionStep> steps = new List <IExtractionStep>
            {
                mockStep.Object
            };

            var pipeline = new ExtractionPipeline(steps);

            var exception = await Assert.ThrowsAsync <PipelineExtractionFailureException>(() => pipeline.ExecuteAsync(mockHttpContext));

            exception.Message.Should().BeEquivalentTo("Failed to extract from configured steps");
        }
Exemplo n.º 3
0
        public async Task Pipeline_WithStepThatCannotExtract_IsSkipped()
        {
            var mockHttpContext = Mock.Of <HttpContext>();

            var mockStep = new Mock <IExtractionStep>();

            mockStep.Setup(m => m.CanExtract(It.IsAny <HttpContext>())).Returns(false);
            mockStep.Setup(m => m.ExtractAsync(It.IsAny <HttpContext>())).ReturnsAsync(string.Empty);

            List <IExtractionStep> steps = new List <IExtractionStep>
            {
                mockStep.Object
            };

            var pipeline = new ExtractionPipeline(steps);

            var extractedContent = await pipeline.ExecuteAsync(mockHttpContext);

            extractedContent.Should().BeNullOrWhiteSpace();
            mockStep.Verify(m => m.CanExtract(mockHttpContext), Times.Once);
            mockStep.Verify(m => m.ExtractAsync(mockHttpContext), Times.Never);
        }
Exemplo n.º 4
0
        public void extractTest()
        {
            var pattern1 = new TextExtractionPattern().withLookAround(@"\: ", string.Empty).withPattern(@"\w+ \r\n");
            var pattern2 = new TextExtractionPattern().withLookAround(@"\-", string.Empty).withPattern(@"\s[가-힣]+");

            var testExtractionBlocks = new List <ExtractionBlock>()
            {
                new ExtractionBlock()
                {
                    order = 1, name = "english", extractionStrategy = new PatternMatchingExtraction(pattern1)
                }
                , new ExtractionBlock()
                {
                    order = 2, name = "korean", extractionStrategy = new PatternMatchingExtraction(pattern2)
                }
            };

            var testTransformationBlocks = new List <TransformationBlock>()
            {
                new TransformationBlock()
                {
                    order = 1,
                    name  = "remove specialized character",
                    targetExtractionId     = 1,
                    transformationStrategy = new RemoveSpecializedSymbol()
                },
                new TransformationBlock()
                {
                    order = 2,
                    name  = "remove gap of english",
                    targetExtractionId     = 1,
                    transformationStrategy = new RemoveGap()
                },
                new TransformationBlock()
                {
                    order = 3,
                    name  = "remove gap of korean",
                    targetExtractionId     = 2,
                    transformationStrategy = new RemoveGap()
                }
            };

            var pipeline        = new ExtractionPipeline(testExtractionBlocks, testTransformationBlocks);
            var extractedResult = pipeline.extract(testTextObject_);
            var target1         = extractedResult.First(r => r.id == 1);
            var target2         = extractedResult.First(r => r.id == 2);

            var result1 = new ExtractionResult(1, "english", new List <string>()
            {
                "star", "cow", "dog"
            });
            var result2 = new ExtractionResult(2, "korean", new List <string>()
            {
                "별", "소", "개", "물음표"
            });

            Assert.AreEqual(target1.id, result1.id);
            Assert.AreEqual(target1.name, result1.name);
            CollectionAssert.AreEqual(target1.result.ToList(), result1.result);
            Assert.AreEqual(target2.id, result2.id);
            Assert.AreEqual(target2.name, result2.name);
            CollectionAssert.AreEqual(target2.result.ToList(), result2.result);
        }