private void TestEscaping(string prefix, string open, string close, string content, string expectedContent,
                                  int expectedTagCount = 0, string expectedTagName = "", string expectedTagContent = "", IDictionary <string, string> args = null)
        {
            var doc    = new MacroDocParser(prefix, open, close);
            var result = doc.Parse(content);

            Assert.AreEqual(result.Content, expectedContent);
            Assert.AreEqual(result.Tags.Count, expectedTagCount);

            if (result.Tags.Count == 0)
            {
                return;
            }

            var first = result.Tags[0];

            if (!string.IsNullOrEmpty(expectedTagName))
            {
                Assert.AreEqual(first.Name, expectedTagName);
            }

            if (!string.IsNullOrEmpty(expectedTagContent))
            {
                Assert.AreEqual(first.InnerContent, expectedTagContent);
            }

            foreach (var pair in args)
            {
                Assert.IsTrue(first.Attributes.Contains(pair.Key));
                Assert.AreEqual(first.Attributes[pair.Key], pair.Value);
            }
        }
        private void Test1(string prefix, string open, string close, string content,
                           string expectedTagName, string expectedTagContent, IDictionary <string, string> args,
                           int expectedTagPosition = 0, string expectedContent = "")
        {
            var doc    = new MacroDocParser(prefix, open, close);
            var result = doc.Parse(content);
            var first  = result.Tags[0];

            Assert.AreEqual(result.Content, expectedContent);
            Assert.AreEqual(result.Tags.Count, 1);
            Assert.AreEqual(first.Position, expectedTagPosition);
            Assert.AreEqual(first.Name, expectedTagName);
            Assert.AreEqual(first.InnerContent, expectedTagContent);
            if (args == null)
            {
                return;
            }

            foreach (var pair in args)
            {
                Assert.IsTrue(first.Attributes.Contains(pair.Key));
                Assert.AreEqual(first.Attributes[pair.Key], pair.Value);
            }
        }