public void AddOutputAddsMetalsharpFile() { var file = new MetalsharpFile("fileText", "filePath"); var project = new MetalsharpProject().AddOutput(file); Assert.True(project.OutputFiles.Contains(file)); }
public void AddOutputThrowsGivenNonexistantPath() { var nonexistentPath = "\\Does\\Not\\Exist"; var project = new MetalsharpProject(); Assert.Throws <ArgumentException>(() => project.AddOutput(nonexistentPath)); Assert.Throws <ArgumentException>(() => project.AddOutput(nonexistentPath, "Dir")); }
public void MarkdownCopiesMetadata() { var project = new MetalsharpProject("Scenario\\Plugins\\FileMarkdown.md") .Use(proj => proj.InputFiles.ToList().ForEach(i => i.Metadata.Add("test", true))) .Use <Markdown>(); Assert.True((bool)project.OutputFiles[0].Metadata["test"]); }
public void RemoveOutputByPredicateSelectsFilesCorrectly() { var file = new MetalsharpFile("text", "File.txt"); var project = new MetalsharpProject() .AddOutput(file) .RemoveOutput(f => f.Text == "text"); Assert.False(project.OutputFiles.Contains(file)); }
public void GetOutputFilesFromCollectionReturnsCorrectFiles() { var project = new MetalsharpProject() .AddOutput("Scenario\\Directory1") .AddOutput("Scenario\\Plugins") .UseCollections("test", file => file.Name.Contains("file")); Assert.Contains(project.GetOutputFilesFromCollection("test"), i => i.Name == "file1"); Assert.DoesNotContain(project.GetOutputFilesFromCollection("test"), i => i.Name == "FileMarkdown"); }
public void RemoveOutputByPathRemovesFilesCorrectly() { var file = new MetalsharpFile("text", "File.txt"); var project = new MetalsharpProject() .AddOutput(file) .RemoveOutput(file.FilePath); Assert.False(project.OutputFiles.Contains(file)); }
public void CollectionsCorrectlyGroupsOutputFiles() { var project = new MetalsharpProject() .AddOutput("Scenario\\Directory1") .AddOutput("Scenario\\Plugins") .UseCollections("test", file => file.Name.Contains("file")); Assert.Contains(project.GetOutputCollection("test"), i => Path.GetFileNameWithoutExtension(i) == "file1"); Assert.DoesNotContain(project.GetOutputCollection("test"), i => Path.GetFileNameWithoutExtension(i) == "FileMarkdown"); }
public void MoveOutputByPredicateSelectsFilesCorrectly() { var file = new MetalsharpFile("text", "dir1\\File.txt"); var project = new MetalsharpProject() .AddOutput(file) .MoveOutput(f => f.Text == "text", "dir2"); Assert.True(project.OutputFiles[0].Directory == "dir2"); }
public void MoveInputByPathMovesFilesCorrectly() { var file = new MetalsharpFile("text", "dir1\\File.txt"); var project = new MetalsharpProject() .AddInput(file) .MoveInput("dir1", "dir2"); Assert.True(project.InputFiles[0].Directory == "dir2"); }
public void MetadataSinglePairAddsAndOverwrites() { var project = new MetalsharpProject(); project.Meta("key", "value1"); Assert.True(project.Metadata.ContainsKey("key")); Assert.True(project.Metadata["key"].ToString() == "value1"); project.Meta("key", "value2"); Assert.True(project.Metadata["key"].ToString() == "value2"); }
public void AddOutputAddsFilesToCorrectDirectory(string diskPath, string virtualPath) { var project = new MetalsharpProject().AddOutput(diskPath, virtualPath); foreach (var file in project.OutputFiles) { var newPath = (Directory.Exists(diskPath) ? diskPath : Path.GetDirectoryName(diskPath)) + string.Concat(file.FilePath.Skip(virtualPath.Length)); Assert.True(File.Exists(newPath)); } }
public void UseInvokesAfterUseEvent() { var wasExecuted = false; var project = new MetalsharpProject(); project.AfterUse += (sender, e) => { Assert.True(wasExecuted); }; project.Use(proj => wasExecuted = true); }
public void UseInvokesBeforeUseEevent() { var wasExecuted = false; var project = new MetalsharpProject(); project.BeforeUse += (sender, e) => { Assert.False(wasExecuted); }; project.Use(proj => wasExecuted = true); }
public void RemoveFilesByPredicateEquivalentToInputAndOutput() { var file = new MetalsharpFile("text", "File.txt"); var project = new MetalsharpProject() .AddInput(file) .AddOutput(file) .RemoveFiles(f => f.Text == "text"); Assert.False(project.InputFiles.Contains(file)); Assert.False(project.OutputFiles.Contains(file)); }
public void MoveFilesByPredicateEquivalentToInputAndOutput() { var file = new MetalsharpFile("text", "dir1\\File.txt"); var project = new MetalsharpProject() .AddInput(file) .AddOutput(file) .MoveFiles(f => f.Text == "text", "dir2"); Assert.True(project.InputFiles[0].Directory == "dir2"); Assert.True(project.OutputFiles[0].Directory == "dir2"); }
/// <summary> /// Invokes the plugin /// </summary> /// <param name="project"></param> public void Execute(MetalsharpProject project) { project.InputFiles.RemoveAll(file => file.Metadata.TryGetValue("draft", out var _isDraft) && _isDraft is bool isDraft && isDraft ); project.OutputFiles.RemoveAll(file => file.Metadata.TryGetValue("draft", out var _isDraft) && _isDraft is bool isDraft && isDraft ); }
public void MetadataMultiplePairsAddAndOverwrite() { var project = new MetalsharpProject(); project.Meta(("key1", "value1"), ("key2", "value1"), ("key3", "value1")); Assert.True(project.Metadata.ContainsKey("key1")); Assert.True(project.Metadata.ContainsKey("key2")); Assert.True(project.Metadata.ContainsKey("key3")); Assert.True(project.Metadata["key1"].ToString() == "value1"); Assert.True(project.Metadata["key2"].ToString() == "value1"); Assert.True(project.Metadata["key3"].ToString() == "value1"); project.Meta(("key1", "value2"), ("key2", "value2"), ("key3", "value2")); Assert.True(project.Metadata["key1"].ToString() == "value2"); Assert.True(project.Metadata["key2"].ToString() == "value2"); Assert.True(project.Metadata["key3"].ToString() == "value2"); }
public void DebugLogsAftereUse() { var project = new MetalsharpProject(); var uses = 0; project.UseDebug(i => { // onLog will be called after UseDebug is called, // Need to prevent the assertion before the use of TestPlugin if (uses == 1) { Assert.True((bool)project.Metadata["test"]); } else { uses++; } }); project.Use <TestPlugin>(); }
public void BuildInvokesAfterBuildEvent() { var wasInvoked = false; if (File.Exists("OutputFile4.txt")) { File.Delete("OutputFile4.txt"); } var project = new MetalsharpProject().AddOutput(new MetalsharpFile("text", "OutputFile4.txt")); project.AfterBuild += (sender, e) => { wasInvoked = true; // File may or may not exist here - cannot test this? }; project.Build(proj => Assert.False(wasInvoked), new BuildOptions()); Assert.True(wasInvoked); }
public void BuildInvokesBeforeBuildEvent() { var wasInvoked = false; if (File.Exists("OutputFile3.txt")) { File.Delete("OutputFile3.txt"); } var project = new MetalsharpProject().AddOutput(new MetalsharpFile("text", "OutputFile3.txt")); project.BeforeBuild += (sender, e) => { wasInvoked = true; Assert.False(File.Exists("OutputFile3.txt")); }; project.Build(proj => Assert.True(wasInvoked), new BuildOptions()); Assert.True(wasInvoked); }
/// <summary> /// Invokes the plugin /// </summary> /// <param name="project"></param> public void Execute(MetalsharpProject project) { foreach (var file in project.OutputFiles.Where(i => i.Extension == "html")) { if (file.Metadata.TryGetValue("layout", out var _layoutFile) && _layoutFile is string layoutFile && File.Exists(layoutFile)) { var regex = new Regex("\\{\\{(\\s)*content(\\s)*\\}\\}"); var res = regex.Replace(File.ReadAllText(layoutFile), file.Text); foreach (var meta in file.Metadata) { regex = new Regex("\\{\\{(\\s)*" + meta.Key + "(\\s)*\\}\\}"); if (regex.IsMatch(res)) { res = regex.Replace(res, meta.Value.ToString()); } } file.Text = res; } } }
/// <summary> /// Invoke the Drafts plugin /// </summary> /// <returns></returns> public static MetalsharpProject UseDrafts(this MetalsharpProject project) => project.Use(new Drafts());
public void AddOutputSinglePathAddsCorrectNumberOfFiles(string path, int expectedFileCount) { var project = new MetalsharpProject().AddOutput(path); Assert.True(project.OutputFiles.Count == expectedFileCount); }
public void UsePluginInstanceExecutesPlugin() { var project = new MetalsharpProject().Use(new TestPlugin()); Assert.True((bool)project.Metadata["test"]); }
/// <summary> /// Invoke the Layout plugin /// </summary> /// <returns></returns> /// <param name="filePath">The path to the layout file</param> public static MetalsharpProject UseLayout(this MetalsharpProject project, string filePath) => project.Use(new Layout());
public void UsePluginTypeExecutesPlugin() { var project = new MetalsharpProject().Use <TestPlugin>(); Assert.True((bool)project.Metadata["test"]); }
public void MarkdownGeneratesHtmlFile() { var project = new MetalsharpProject("Scenario\\Plugins\\FileMarkdown.md").UseMarkdown(); Assert.Contains(project.OutputFiles, i => i.Extension == ".html"); }
public void FrontmatterParsesYamlFrontmatter() { var project = new MetalsharpProject("Scenario\\Plugins\\FileYamlFrontmatter.md").UseFrontmatter(); Assert.True(ToBoolean(project.InputFiles[0].Metadata["test"].ToString())); }
public void FrontmatterParsesJsonFrontmatter() { var project = new MetalsharpProject("Scenario\\Plugins\\FileJsonFrontmatter.md").UseFrontmatter(); Assert.True((bool)project.InputFiles[0].Metadata["test"]); }
public void FrontmatterSucceedsWithoutFrontmatter() { var project = new MetalsharpProject("Scenario\\Plugins\\FileMarkdown.md").UseFrontmatter(); Assert.True(project.InputFiles[0].Metadata.Count == 0); }