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));
        }
        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));
        }