Esempio n. 1
0
        public void AddOutputAddsMetalsharpFile()
        {
            var file    = new MetalsharpFile("fileText", "filePath");
            var project = new MetalsharpProject().AddOutput(file);

            Assert.True(project.OutputFiles.Contains(file));
        }
Esempio n. 2
0
        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"));
        }
Esempio n. 3
0
        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"]);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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");
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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");
        }
Esempio n. 8
0
        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");
        }
Esempio n. 9
0
        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");
        }
Esempio n. 10
0
        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");
        }
Esempio n. 11
0
        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));
            }
        }
Esempio n. 12
0
        public void UseInvokesAfterUseEvent()
        {
            var wasExecuted = false;
            var project     = new MetalsharpProject();

            project.AfterUse += (sender, e) =>
            {
                Assert.True(wasExecuted);
            };

            project.Use(proj => wasExecuted = true);
        }
Esempio n. 13
0
        public void UseInvokesBeforeUseEevent()
        {
            var wasExecuted = false;
            var project     = new MetalsharpProject();

            project.BeforeUse += (sender, e) =>
            {
                Assert.False(wasExecuted);
            };

            project.Use(proj => wasExecuted = true);
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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");
        }
Esempio n. 16
0
        /// <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
                                          );
        }
Esempio n. 17
0
        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");
        }
Esempio n. 18
0
        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>();
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        /// <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;
                }
            }
        }
Esempio n. 22
0
 /// <summary>
 /// Invoke the Drafts plugin
 /// </summary>
 /// <returns></returns>
 public static MetalsharpProject UseDrafts(this MetalsharpProject project) =>
 project.Use(new Drafts());
Esempio n. 23
0
        public void AddOutputSinglePathAddsCorrectNumberOfFiles(string path, int expectedFileCount)
        {
            var project = new MetalsharpProject().AddOutput(path);

            Assert.True(project.OutputFiles.Count == expectedFileCount);
        }
Esempio n. 24
0
        public void UsePluginInstanceExecutesPlugin()
        {
            var project = new MetalsharpProject().Use(new TestPlugin());

            Assert.True((bool)project.Metadata["test"]);
        }
Esempio n. 25
0
 /// <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());
Esempio n. 26
0
        public void UsePluginTypeExecutesPlugin()
        {
            var project = new MetalsharpProject().Use <TestPlugin>();

            Assert.True((bool)project.Metadata["test"]);
        }
Esempio n. 27
0
        public void MarkdownGeneratesHtmlFile()
        {
            var project = new MetalsharpProject("Scenario\\Plugins\\FileMarkdown.md").UseMarkdown();

            Assert.Contains(project.OutputFiles, i => i.Extension == ".html");
        }
Esempio n. 28
0
        public void FrontmatterParsesYamlFrontmatter()
        {
            var project = new MetalsharpProject("Scenario\\Plugins\\FileYamlFrontmatter.md").UseFrontmatter();

            Assert.True(ToBoolean(project.InputFiles[0].Metadata["test"].ToString()));
        }
Esempio n. 29
0
        public void FrontmatterParsesJsonFrontmatter()
        {
            var project = new MetalsharpProject("Scenario\\Plugins\\FileJsonFrontmatter.md").UseFrontmatter();

            Assert.True((bool)project.InputFiles[0].Metadata["test"]);
        }
Esempio n. 30
0
        public void FrontmatterSucceedsWithoutFrontmatter()
        {
            var project = new MetalsharpProject("Scenario\\Plugins\\FileMarkdown.md").UseFrontmatter();

            Assert.True(project.InputFiles[0].Metadata.Count == 0);
        }