public void TrimWhitespace() { // Given string input = " myfile.html "; string output = "myfile.html"; Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem("MyKey", input) }) }; FileName fileName = new FileName("MyKey"); // When IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.AreEqual(output, documents.First().FilePath(Keys.WriteFileName).FullPath); }
public void MultipleInputDocumentsResultsInMultipleOutputs() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)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); }
public void MatchingStringSplitsAtCorrectLocation() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = { context.GetDocument(@"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); }
public void CollapseRoot() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = GetDocuments( context, "a/2.txt", "b/3.txt", "a/1.txt", "b/x/4.txt", "c/d/5.txt", "6.txt"); Tree tree = new Tree().WithNesting(true, true); // When List <IDocument> documents = tree.Execute(inputs, context).ToList(); // Then Assert.AreEqual(4, documents.Count); CollectionAssert.AreEquivalent( new[] { "a/index.html", "b/index.html", "c/index.html", "6.txt" }, documents.Select(x => x.FilePath(Keys.RelativeFilePath).FullPath)); }
public void NoIgnoreDelimiterOnFirstLine() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)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 FileNameIsConvertedCorrectlyWithReservedChar(string character) { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, Guid.Empty, pipeline); string manyCharactersWow = new string(character[0], 10); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem( Keys.SourceFileName, string.Format("testing {0} some of {0} these {0}", manyCharactersWow)) }) }; FileName fileName = new FileName(); // When IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.AreEqual("testing-some-of-these-", documents.First().FilePath(Keys.WriteFileName).FullPath); }
public void GetsPreviousUpTree() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = GetDocuments( context, "root/a/2.txt", "root/a/3.txt", "root/a/1.txt", "root/b/4.txt"); Tree tree = new Tree().WithNesting(); // When List <IDocument> documents = tree.Execute(inputs, context).ToList(); // Then IDocument document = FindTreeNode(documents[0], "root/b/4.txt"); Assert.AreEqual( "root/b/index.html", document.Document(Keys.Previous).FilePath(Keys.RelativeFilePath).FullPath); }
public void SplitsTree() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = GetDocuments( context, "root/a/2.txt", "root/b/index.html", "root/a/1.txt", "root/b/4.txt"); Tree tree = new Tree() .WithNesting() .WithRoots((doc, ctx) => doc.FilePath(Keys.RelativeFilePath).FullPath.EndsWith("b/index.html")); // When List <IDocument> documents = tree.Execute(inputs, context).ToList(); // Then Assert.AreEqual(2, documents.Count); AssertTree( documents[0], "root/b/index.html", "root/b/4.txt"); AssertTree( documents[1], "index.html", "root/index.html", "root/a/index.html", "root/a/1.txt", "root/a/2.txt"); }
public void WithAllowedCharactersDoesNotReplaceProvidedCharacters() { // Given const string input = "this-is-a-.net-tag"; const string output = "this-is-a-.net-tag"; Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, Guid.Empty, pipeline); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem(Keys.SourceFileName, new FilePath(input)) }) }; FileName fileName = new FileName(); // When fileName = fileName.WithAllowedCharacters(new string[] { "-" }); IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.AreEqual(output, documents.First().FilePath(Keys.WriteFileName).FullPath); }
public void FileNameShouldBeLowercase() { // Given const string input = "FileName With MiXeD CapS"; const string output = "filename-with-mixed-caps"; Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, Guid.Empty, pipeline); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem(Keys.SourceFileName, new FilePath(input)) }) }; FileName fileName = new FileName(); // When IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.AreEqual(output, documents.First().FilePath(Keys.WriteFileName).FullPath); }
public void DashStringDoesNotSplitAtNonmatchingDashes() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)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); }
public void SingleCharWithRepeatedDelimiterWithLeadingSpacesDoesNotSplit() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)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); }
public void SetUp() { Engine = new Engine(); Engine.FileSystem.FileProviders.Add(NormalizedPath.DefaultFileProvider.Scheme, GetFileProvider()); Engine.FileSystem.RootPath = "/"; Pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); Context = new ExecutionContext(Engine, Pipeline); }
public void SetUp() { Engine = new Engine(); Engine.FileSystem.FileProviders.Add(NormalizedPath.DefaultFileProvider.Scheme, GetFileProvider()); Engine.FileSystem.RootPath = "/"; Engine.FileSystem.InputPaths.Clear(); Engine.FileSystem.InputPaths.Add("/TestFiles/Input"); Pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); Context = new ExecutionContext(Engine, Guid.Empty, Pipeline); }
public ExecutionPipelineContext(IExecutionContext context, ExecutionPipeline pipeline, object parameter) : base(context.Executor, parameter) { if (pipeline == null) { throw new ArgumentNullException("pipeline"); } _context = context; _pipeline = pipeline; }
public void ExecutionPipeline_Constructor_InitializesMembers() { //// Arrange ExecutionPipeline pipeline = null; var executorProviderMock = new Mock <IExecutorProvider>(); //// Act pipeline = new ExecutionPipeline(executorProviderMock.Object); //// Assert Assert.IsNotNull(pipeline.Steps); }
public void ExecutionPipeline_Add_ThrowsException_WhenActivityFailsValidation() { //// Arrange var executorProviderMock = new Mock <IExecutorProvider>(); ExecutionPipeline pipeline = new ExecutionPipeline(executorProviderMock.Object); ExecutionActivity invalidActivity = GetInvalidActivity(); //// Act pipeline.Add(invalidActivity); //// Assert Assert.Fail(); }
public void ExecutionPipeline_Add_AddsStep_WhenValid() { //// Arrange var executorProviderMock = new Mock <IExecutorProvider>(); ExecutionPipeline pipeline = new ExecutionPipeline(executorProviderMock.Object); ExecutionActivity validActivity = GetValidActivity(); //// Act pipeline.Add(validActivity); //// Assert Assert.IsTrue(pipeline.Steps.Count == 1); Assert.IsTrue(object.ReferenceEquals(pipeline.Steps.First(), validActivity)); }
public void ReplaceWithName() { // Given IPipeline collection = new ExecutionPipeline("Test", new[] { new CountModule("mykey1").WithName("First"), new CountModule("mykey2").WithName("Second") }); // When collection.Replace("Second", new CountModule("mykey3")); // Then Assert.AreEqual("mykey1", ((CountModule)collection[0]).ValueKey); Assert.AreEqual("mykey3", ((CountModule)collection[1]).ValueKey); }
public void ExecutionPipeline_Add_ThrowsException_WhenActivityHasEmptyHost() { //// Arrange var executorProviderMock = new Mock <ExecutorProvider>(); ExecutionPipeline pipeline = new ExecutionPipeline(executorProviderMock.Object); ExecutionActivity invalidActivity = new CopyFilesActivity() { Host = new HostInfo() }; //// Act pipeline.Add(invalidActivity); //// Assert Assert.Fail(); }
public ActionResult <IEnumerable <WeatherForecast> > Get() { return(ExecutionPipeline.Wrap(() => { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); }) .OnError <Exception>(ex => BadRequest(ex.Message)) .OnSuccess(item => Ok(item)) .Run()); }
public void ReplaceLast() { // Given IPipeline collection = new ExecutionPipeline("Test", new IModule[] { new ReadFiles(ctx => "*.md"), new CountModule("mykey1"), new CountModule("mykey2"), new WriteFiles() }); // When collection.ReplaceLast <CountModule>(new CountModule("replacedKey")); // Then Assert.AreEqual("mykey1", ((CountModule)collection[1]).ValueKey); Assert.AreEqual("replacedKey", ((CountModule)collection[2]).ValueKey); }
public void SitemapGeneratedWithSitemapItemAsString(string hostname, string formatterString, string expected) { // Given Engine engine = new Engine(); if (!string.IsNullOrWhiteSpace(hostname)) { engine.Settings[Keys.Host] = hostname; } ExecutionPipeline contentPipeline = new ExecutionPipeline("Content", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, Guid.Empty, contentPipeline); IDocument doc = context.GetDocument(context.GetContentStream("Test"), new[] { new KeyValuePair <string, object>(Keys.RelativeFilePath, "sub/testfile.html") }); IDocument[] inputs = { doc }; Core.Modules.Metadata.Meta m = new Core.Modules.Metadata.Meta( Keys.SitemapItem, (d, c) => d[Keys.RelativeFilePath].ToString()); var outputs = m.Execute(inputs, context); Func <string, string> formatter = null; if (!string.IsNullOrWhiteSpace(formatterString)) { formatter = f => string.Format(formatterString, f); } // When Sitemap sitemap = new Sitemap(formatter); List <IDocument> results = sitemap.Execute(outputs.ToList(), context).ToList(); foreach (IDocument document in inputs.Concat(outputs.ToList())) { ((IDisposable)document).Dispose(); } // Then Assert.AreEqual(1, results.Count); Assert.That(results[0].Content, Does.Contain($"<loc>{expected}</loc>")); }
public void InsertBeforeLast() { // Given IPipeline collection = new ExecutionPipeline("Test", new IModule[] { new ReadFiles(ctx => "*.md"), new ReadFiles(ctx => "*.md"), new WriteFiles() }); // When collection.InsertBeforeLast <ReadFiles>(new CountModule("foo")); // Then Assert.AreEqual(collection[0].GetType(), typeof(ReadFiles)); Assert.AreEqual(collection[1].GetType(), typeof(CountModule)); Assert.AreEqual(collection[2].GetType(), typeof(ReadFiles)); Assert.AreEqual(collection[3].GetType(), typeof(WriteFiles)); }
public void IgnoresNullOrWhiteSpaceStrings(string input) { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem(Keys.SourceFileName, input) }) }; FileName fileName = new FileName(); // When IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.IsFalse(documents.First().ContainsKey(Keys.WriteFileName)); }
public void FileNameIsConvertedCorrectly(string input, string output) { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = { context.GetDocument(new MetadataItems { new MetadataItem(Keys.SourceFileName, input) }) }; FileName fileName = new FileName(); // When IEnumerable <IDocument> documents = fileName.Execute(inputs, context); // Then Assert.AreEqual(output, documents.First().FilePath(Keys.WriteFileName).FullPath); }
static void Main(string[] args) { ILog logger = LogManager.GetLogger(typeof(Program)); logger.Info("Entered DeploymentAssistant."); var mode = args.FirstOrDefault(); if ((mode == null) || (mode.Equals(RunPipelineMode, StringComparison.CurrentCultureIgnoreCase))) { logger.Info("Executing the default mode. Mode: RunPipeline."); var fileName = string.Empty; if (args.ElementAtOrDefault(args_index_file) != null) { fileName = args.ElementAt(args_index_file); if (!File.Exists(fileName)) { logger.Error("Config File is not available at the given path. Please input a valid file name."); return; } } //// Call pipeline Maker var executionPipeline = ExecutionPipeline.GetExecutionPipeline(); PipelineMaker pipelineMaker = new PipelineMaker(new FileOperations(), executionPipeline); pipelineMaker.Load(fileName); } else if (mode.Equals(DumpConfigMode, StringComparison.CurrentCultureIgnoreCase)) { logger.Info("Executing the config helper mode. Mode: DumpConfig."); var fileName = string.Empty; if (args.ElementAtOrDefault(args_index_file) != null) { fileName = args.ElementAt(args_index_file); } //// Call config Maker ConfigMaker configMaker = new ConfigMaker(new FileOperations()); configMaker.Dump(fileName); } logger.Info("Finished the program."); //Console.Read(); }
public void FlatTree() { // Given Engine engine = new Engine(); ExecutionPipeline pipeline = new ExecutionPipeline("Pipeline", (IModuleList)null); IExecutionContext context = new ExecutionContext(engine, pipeline); IDocument[] inputs = GetDocuments( context, "root/a/b/2.txt", "root/a/3.txt", "root/a/1.txt"); Tree tree = new Tree(); // When List <IDocument> documents = tree.Execute(inputs, context).ToList(); // Then AssertTreeChildren( documents[0], "root/a/b/2.txt"); AssertTreeChildren( documents[1], "root/a/3.txt"); AssertTreeChildren( documents[2], "root/a/1.txt"); AssertTreeChildren( documents[3], "root/a/b/index.html", "root/a/b/2.txt"); AssertTreeChildren( documents[4], "root/a/index.html", "root/a/1.txt", "root/a/3.txt", "root/a/b/index.html"); AssertTreeChildren( documents[5], "root/index.html", "root/a/index.html"); }
public void AlsoWorksWithModules() { // Given IPipeline collection = new ExecutionPipeline("Test", new [] { new CountModule("mykey1") .WithName("First"), new CountModule("mykey2") .WithName("Second"), new Concat(new CountModule("mysubkey1").WithName("inner")) .WithName("Third") }); // When (collection["Third"] as IModuleList) .Replace("inner", new CountModule("newsubkey")); // Then Assert.AreEqual("newsubkey", ((CountModule)((IModuleList)collection["Third"])["inner"]).ValueKey); }
public void ExecutionPipeline_Add_RaisesEvent_AfterAddingStep_AndPassesActivityInEventArgs() { //// Arrange var executorProviderMock = new Mock <IExecutorProvider>(); ExecutionPipeline pipeline = new ExecutionPipeline(executorProviderMock.Object); ExecutionActivity validActivity = GetValidActivity(); bool eventRaised = false; EventArgs addedEventArgs = null; pipeline.StepAdded += (sender, e) => { eventRaised = true; addedEventArgs = e; }; //// Act pipeline.Add(validActivity); //// Assert Assert.IsTrue(eventRaised); Assert.IsTrue(object.ReferenceEquals(((ActivityEventArgs)addedEventArgs).Activity, validActivity)); }