public void Merge2ExamplesInOne()
        {
            // First merge two models with default syntax names

            var merger = new MamlMultiModelMerger(null, false, "! ");
            var input  = new Dictionary <string, MamlCommand>();

            input["First"] = GetModel(
                title: "Example 1",
                code: "PS:> 1+1",
                remarks: "Hello"
                );
            input["Second"] = GetModel(
                title: "Example 1",
                code: "PS:> 1+1",
                remarks: "Hello"
                );

            var result = merger.Merge(input);

            // Examples
            Assert.Single(result.Examples);
            Assert.Equal("Example 1", result.Examples.ElementAt(0).Title);

            // next render it as markdown and make sure that we don't crash
            var    renderer = new MarkdownV2Renderer(MAML.Parser.ParserMode.FormattingPreserve);
            string markdown = renderer.MamlModelToString(result, true);
        }
        public void MergeExamplesOrder()
        {
            // First merge two models with default syntax names

            var merger = new MamlMultiModelMerger(null, false, "! ");
            var input  = new Dictionary <string, MamlCommand>();

            input["First"] = GetModel(
                new []
            {
                new MamlExample()
                {
                    Title = "E1"
                },
                new MamlExample()
                {
                    Title = "E2"
                },
            }
                );
            input["Second"] = GetModel(
                new []
            {
                new MamlExample()
                {
                    Title = "E2"
                },
                new MamlExample()
                {
                    Title = "E1"
                },
                new MamlExample()
                {
                    Title = "E3"
                },
            }
                );

            var result = merger.Merge(input);

            // Examples
            Assert.Equal(3, result.Examples.Count);
            Assert.Equal("E1", result.Examples.ElementAt(0).Title);
            Assert.Equal("E2", result.Examples.ElementAt(1).Title);
            Assert.Equal("E3 (Second)", result.Examples.ElementAt(2).Title);

            // next render it as markdown and make sure that we don't crash
            var    renderer = new MarkdownV2Renderer(MAML.Parser.ParserMode.FormattingPreserve);
            string markdown = renderer.MamlModelToString(result, true);
        }
        public void MergeDefaultSyntaxAndCreateMarkdown()
        {
            // First merge two models with default syntax names

            var merger = new MamlMultiModelMerger(null, false, "! ");
            var input  = new Dictionary <string, MamlCommand>();

            input["First"]  = GetModel1();
            input["Second"] = GetModel2();

            var result = merger.Merge(input);

            // Syntax
            Assert.Single(result.Syntax);
            Assert.Null(result.Syntax.ElementAt(0).ParameterSetName);
            Assert.True(result.Syntax.ElementAt(0).IsDefault);

            // Parameters
            Assert.Equal(2, result.Parameters.Count);

            Assert.Equal("Name1", result.Parameters[0].Name);
            Assert.Equal(new string[] { "First" }, result.Parameters[0].Applicable);

            Assert.Equal("Name2", result.Parameters[1].Name);
            Assert.Equal(new string[] { "Second" }, result.Parameters[1].Applicable);

            // next render it as markdown and make sure that we don't crash

            var    renderer = new MarkdownV2Renderer(MAML.Parser.ParserMode.FormattingPreserve);
            string markdown = renderer.MamlModelToString(result, true);

            int yamlLinesCount = markdown.Split('\n').Select(s => s.Trim()).Where(s => s.Equals("```yaml")).Count();

            // verify that ```yaml are all on a separate line
            Assert.Equal(2, yamlLinesCount);
        }
        public void Merge3SimpleModels()
        {
            var merger = new MamlMultiModelMerger(null, false, "! ");
            var input  = new Dictionary <string, MamlCommand>();

            input["First"]  = GetModel1();
            input["Second"] = GetModel2();
            input["Third"]  = GetModel3();

            var result = merger.Merge(input);

            Common.AssertMultilineEqual(result.Synopsis.Text, @"! First, Second

This is the synopsis

! Third

This is the synopsis 3

");

            Assert.Equal("This is a long description.\r\nWith two paragraphs.", result.Description.Text);

            Common.AssertMultilineEqual(result.Notes.Text, @"! First

This is a multiline note.
Second line.
First Command

! Second

This is a multiline note.
Second line.
Second Command

! Third

This is a multiline note.
Second line.
Third Command

");

            // Links
            Assert.Equal(2, result.Links.Count);
            Assert.Equal("[foo]()\r\n\r\n", result.Links.ElementAt(0).LinkName);
            Assert.Equal("[bar]()\r\n\r\n", result.Links.ElementAt(1).LinkName);

            // Examples
            Assert.Equal(2, result.Examples.Count);
            Assert.Equal("Example 1 (Second)", result.Examples.ElementAt(0).Title);
            Assert.Equal("Example 1 (Third)", result.Examples.ElementAt(1).Title);

            // Inputs
            Assert.Equal(2, result.Inputs.Count);
            Assert.Equal("String", result.Inputs.ElementAt(0).TypeName);
            Assert.Equal("Foo", result.Inputs.ElementAt(0).Description);
            Assert.Equal("String", result.Inputs.ElementAt(1).TypeName);
            Assert.Equal("Foo 2", result.Inputs.ElementAt(1).Description);

            // Output
            Assert.Single(result.Outputs);
            Assert.Equal("String", result.Outputs.ElementAt(0).TypeName);
            Assert.Null(result.Outputs.ElementAt(0).Description);

            // Syntax
            Assert.Equal(2, result.Syntax.Count);
            Assert.Equal("ByName", result.Syntax.ElementAt(0).ParameterSetName);
            Assert.Equal(2, result.Syntax.ElementAt(0).Parameters.Count);
            Assert.Equal("Name", result.Syntax.ElementAt(0).Parameters[0].Name);
            Assert.Equal("Remove", result.Syntax.ElementAt(0).Parameters[1].Name);

            Assert.Equal("BySomethingElse", result.Syntax.ElementAt(1).ParameterSetName);

            // Parameters
            Assert.Equal(2, result.Parameters.Count);

            Assert.Equal("Name", result.Parameters[0].Name);
            Assert.Equal(new string[] { "First", "Second", "Third" }, result.Parameters[0].Applicable);

            Assert.Equal("Remove", result.Parameters[1].Name);
            Assert.Equal(new string[] { "Third" }, result.Parameters[1].Applicable);
        }