示例#1
0
            public void MultipleInputDocumentsResultsInMultipleOutputs()
            {
                // Given
                Engine            engine   = new Engine();
                Pipeline          pipeline = new Pipeline("Pipeline", null);
                IExecutionContext context  = new ExecutionContext(engine, pipeline);

                IDocument[] inputs =
                {
                    context.GetDocument(@"AA
-
XX"),
                    context.GetDocument(@"BB
-
YY")
                };
                string      frontMatterContent = string.Empty;
                FrontMatter frontMatter        = new FrontMatter(new Execute((x, ctx) =>
                {
                    frontMatterContent += x.Content;
                    return(new[] { x });
                }));

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(2, documents.Count());
                Assert.AreEqual(@"AA
BB
", frontMatterContent);
                Assert.AreEqual(@"XX", documents.First().Content);
                Assert.AreEqual(@"YY", documents.Skip(1).First().Content);
            }
示例#2
0
            public void SingleCharWithSingleDelimiterSplitsAtCorrectLocation()
            {
                // Given
                Engine            engine   = new Engine();
                Pipeline          pipeline = new Pipeline("Pipeline", null);
                IExecutionContext context  = new ExecutionContext(engine, pipeline);

                IDocument[] inputs =
                {
                    context.GetDocument(@"FM1
FM2
!
Content1
Content2")
                };
                string      frontMatterContent = null;
                FrontMatter frontMatter        = new FrontMatter('!', new Execute((x, ctx) =>
                {
                    frontMatterContent = x.Content;
                    return(new[] { x });
                }));

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(1, documents.Count());
                Assert.AreEqual(@"FM1
FM2
", frontMatterContent);
                Assert.AreEqual(@"Content1
Content2", documents.First().Content);
            }
示例#3
0
            public void SingleCharWithRepeatedDelimiterWithLeadingSpacesDoesNotSplit()
            {
                // Given
                Engine            engine   = new Engine();
                Pipeline          pipeline = new Pipeline("Pipeline", null);
                IExecutionContext context  = new ExecutionContext(engine, pipeline);

                IDocument[] inputs =
                {
                    context.GetDocument(@"FM1
FM2
  !!!!
Content1
Content2")
                };
                bool        executed    = false;
                FrontMatter frontMatter = new FrontMatter('!', new Execute((x, ctx) =>
                {
                    executed = true;
                    return(new[] { x });
                }));

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(1, documents.Count());
                Assert.IsFalse(executed);
                Assert.AreEqual(@"FM1
FM2
  !!!!
Content1
Content2", documents.First().Content);
            }
示例#4
0
        public void MatchingStringSplitsAtCorrectLocation()
        {
            // Given
            Engine engine = new Engine();

            engine.Trace.AddListener(new TestTraceListener());
            Metadata          metadata = new Metadata(engine);
            Pipeline          pipeline = new Pipeline("Pipeline", engine, null);
            IExecutionContext context  = new ExecutionContext(engine, pipeline);

            IDocument[] inputs             = { new Document(metadata, pipeline).Clone(@"FM1
FM2
ABC
Content1
Content2") };
            string      frontMatterContent = null;
            FrontMatter frontMatter        = new FrontMatter("ABC", new Execute((x, ctx) =>
            {
                frontMatterContent = x.Content;
                return(new[] { x });
            }));

            // When
            IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

            // Then
            Assert.AreEqual(1, documents.Count());
            Assert.AreEqual(@"FM1
FM2
", frontMatterContent);
            Assert.AreEqual(@"Content1
Content2", documents.First().Content);
        }
示例#5
0
        public void DashStringDoesNotSplitAtNonmatchingDashes()
        {
            // Given
            Engine engine = new Engine();

            engine.Trace.AddListener(new TestTraceListener());
            Metadata          metadata = new Metadata(engine);
            Pipeline          pipeline = new Pipeline("Pipeline", engine, null);
            IExecutionContext context  = new ExecutionContext(engine, pipeline);

            IDocument[] inputs      = { new Document(metadata, pipeline).Clone(@"FM1
FM2
---
Content1
Content2") };
            bool        executed    = false;
            FrontMatter frontMatter = new FrontMatter("-", new Execute((x, ctx) =>
            {
                executed = true;
                return(new[] { x });
            }));

            // When
            IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

            // Then
            Assert.AreEqual(1, documents.Count());
            Assert.IsFalse(executed);
            Assert.AreEqual(@"FM1
FM2
---
Content1
Content2", documents.First().Content);
        }
示例#6
0
            public void NoIgnoreDelimiterOnFirstLine()
            {
                // Given
                Engine            engine   = new Engine();
                Pipeline          pipeline = new Pipeline("Pipeline", null);
                IExecutionContext context  = new ExecutionContext(engine, pipeline);

                IDocument[] inputs =
                {
                    context.GetDocument(@"---
FM1
FM2
---
Content1
Content2")
                };
                string      frontMatterContent = null;
                FrontMatter frontMatter        = new FrontMatter(new Execute((x, ctx) =>
                {
                    frontMatterContent = x.Content;
                    return(new[] { x });
                })).IgnoreDelimiterOnFirstLine(false);

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(1, documents.Count());
                Assert.AreEqual("\n", frontMatterContent);
                Assert.AreEqual(@"FM1
FM2
---
Content1
Content2", documents.First().Content);
            }
            public void EmptyFirstLineWithDelimiterTreatsAsFrontMatter()
            {
                // Given
                IExecutionContext context = new TestExecutionContext();

                IDocument[] inputs =
                {
                    new TestDocument(@"
---
FM1
FM2
---
Content1
Content2")
                };
                string      frontMatterContent = null;
                FrontMatter frontMatter        = new FrontMatter(new Execute((x, ctx) =>
                {
                    frontMatterContent = x.Content;
                    return(new[] { x });
                }));

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(1, documents.Count());
                Assert.AreEqual(
                    @"
", frontMatterContent);
                Assert.AreEqual(
                    @"FM1
FM2
---
Content1
Content2", documents.First().Content);
            }
            public void SingleCharWithRepeatedDelimiterWithExtraLinesSplitsAtCorrectLocation()
            {
                // Given
                IExecutionContext context = new TestExecutionContext();

                IDocument[] inputs =
                {
                    new TestDocument(@"FM1
FM2

!!!!

Content1
Content2")
                };
                string      frontMatterContent = null;
                FrontMatter frontMatter        = new FrontMatter('!', new Execute((x, ctx) =>
                {
                    frontMatterContent = x.Content;
                    return(new[] { x });
                }));

                // When
                IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

                // Then
                Assert.AreEqual(1, documents.Count());
                Assert.AreEqual(
                    @"FM1
FM2

", frontMatterContent);
                Assert.AreEqual(
                    @"
Content1
Content2", documents.First().Content);
            }
示例#9
0
        public void SingleCharWithRepeatedDelimiterWithExtraLinesSplitsAtCorrectLocation()
        {
            // Given
            Engine engine = new Engine();

            engine.Trace.AddListener(new TestTraceListener());
            Pipeline          pipeline = new Pipeline("Pipeline", engine, null);
            IExecutionContext context  = new ExecutionContext(engine, pipeline);

            IDocument[] inputs             = { new Document(engine, pipeline).Clone(@"FM1
FM2

!!!!

Content1
Content2") };
            string      frontMatterContent = null;
            FrontMatter frontMatter        = new FrontMatter('!', new Execute((x, ctx) =>
            {
                frontMatterContent = x.Content;
                return(new[] { x });
            }));

            // When
            IEnumerable <IDocument> documents = frontMatter.Execute(inputs, context);

            // Then
            Assert.AreEqual(1, documents.Count());
            Assert.AreEqual(@"FM1
FM2

", frontMatterContent);
            Assert.AreEqual(@"
Content1
Content2", documents.First().Content);
        }