public void TestTokenizeAndOptimize()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(tokenizer.Tokenize("Hello\r\nWorld!"))
            .Should().Equal(new MarkdownToken("Hello World!"));
        }
        public void TestLineBreak3()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("\r\n").Should().Equal(new MarkdownToken(MarkdownTokenType.Whitespace));
            tokenizer.Tokenize("\n").Should().Equal(new MarkdownToken(MarkdownTokenType.Whitespace));
        }
        public void TestBold2()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("__").Should().Equal(
                new MarkdownToken(MarkdownTokenType.Underscore),
                new MarkdownToken(MarkdownTokenType.Underscore)
                );
        }
        public void TestBold1()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("**").Should().Equal(
                new MarkdownToken(MarkdownTokenType.Star),
                new MarkdownToken(MarkdownTokenType.Star)
                );
        }
        public void TestLineBreak4()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("Hello,\r\nWorld!").Should().Equal(
                new MarkdownToken(MarkdownTokenType.Text, "Hello,"),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Text, "World!")
                );
        }
        public void TestOptimizeTwoTextTokens()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(new[]
            {
                new MarkdownToken("Foo"),
                new MarkdownToken("bar")
            }).Should().Equal(new MarkdownToken("Foobar"));
        }
        public void TestOptimizeTwoNoneTokens()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(new[]
            {
                new MarkdownToken(MarkdownTokenType.None),
                new MarkdownToken(MarkdownTokenType.None)
            }).Should().BeEmpty();
        }
        public void TestBrackets()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("[(])")
            .Should().Equal(
                new MarkdownToken(MarkdownTokenType.SquareBracketOpen),
                new MarkdownToken(MarkdownTokenType.BracketOpen),
                new MarkdownToken(MarkdownTokenType.SquareBracketClose),
                new MarkdownToken(MarkdownTokenType.BracketClose)
                );
        }
        public void TestOptimizeSpaceTokens()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(new[]
            {
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace)
            }).Should().Equal(new MarkdownToken(MarkdownTokenType.Whitespace));
        }
        public void TestOptimizeSpaceAndTextTokens()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(new[]
            {
                new MarkdownToken("Foo"),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken(MarkdownTokenType.Whitespace),
                new MarkdownToken("b"),
                new MarkdownToken("a"),
                new MarkdownToken("r")
            }).Should().Equal(
                new MarkdownToken("Foo bar")
                );
        }
        public void TestTilde1()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("~").Should().Equal(new MarkdownToken(MarkdownTokenType.Tilde));
        }
        public void TestLineBreak2()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("  \n").Should().Equal(new MarkdownToken(MarkdownTokenType.LineBreak));
        }
        public void TestOptimizeEmpty()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Optimize(new MarkdownToken[0]).Should().BeEmpty();
        }
        public void TestSpace2()
        {
            var tokenizer = new MarkdownTokenizer();

            tokenizer.Tokenize("\t").Should().Equal(new MarkdownToken(MarkdownTokenType.Whitespace));
        }