public void CreateComponentDsl()
        {
            // not so much a test, as an example of how you could construct a
            // "DSL" like syntax to represent a monorail view component with 
            // section overrides.

            var people = new List<Person>
                             {
                                 new Person {FirstName = "Alex", LastName = "Henderson"},
                                 new Person {FirstName = "Joe", LastName = "Bloggs"}
                             };

            var compDsl = new ComponentDsl();

            compDsl.Add
                (
                GridComponent => compDsl.Component
                                     (
                                     compDsl.Parameters
                                         (
                                         source => people
                                         ),
                                     header => compDsl.Section
                                                   (
                                                   tr => compDsl.As
                                                             (
                                                             th => compDsl.As
                                                                       (
                                                                       compDsl.Text("Names")
                                                                       )
                                                             )
                                                   ),
                                     item => compDsl.Section
                                                 (
                                                 tr => compDsl.As
                                                           (
                                                           td => compDsl.As
                                                                     (
                                                                     compDsl.Item<Person>(p => p.FirstName + " " + p.LastName)
                                                                     )
                                                           )
                                                 )
                                     )
                );

            var dsl = new StandardDsl();

            dsl.Add
                (
                html => dsl.As
                            (
                            body => compDsl
                            )
                );

            Console.WriteLine(DslToXml.ToXml(dsl));
        }
        public void CreateSimpleDsl()
        {
            var dsl = new StandardDsl();

            dsl.Add
                (
                table => dsl.As
                             (
                             tr => dsl.As
                                       (
                                       td => dsl.Text("header1"),
                                       td => dsl.Text("header2")
                                       )
                             )
                );

            string expected = @"<?xml version=""1.0"" encoding=""utf-16""?><table><tr><td>header1</td><td>header2</td></tr></table>";

            Assert.AreEqual(expected, DslToXml.ToXml(dsl));
        }
        public void CreateDslWithForEach()
        {
            var headers = new List<string> {"header1", "header2", "header3"};

            var innerDsl = new StandardDsl();
            innerDsl.Add(
                headers.ForEach(text =>
                                td => innerDsl.Text(text)
                    )
                );

            var dsl = new StandardDsl();

            dsl.Add(
                table => dsl.As(
                             tr => dsl.As(innerDsl)));


            Console.WriteLine(DslToXml.ToXml(dsl));
        }