public void ItBuildsWithAClass()
        {
            var builder = new AbstractSyntaxBuilder();

            builder.WithClass();

            var result = builder.Build();

            Assert.AreEqual(1, result.Types.Length);
        }
        public void Test3()
        {
            var builder      = new AbstractSyntaxBuilder();
            var classBuilder = builder.WithClass()
                               .WithName("Foo");

            var constructorBuilder = classBuilder.WithConstructor()
                                     .WithVisibility(AccessType.Public);

            var methodBuilder = classBuilder.WithMethod()
                                .WithName("Bar");

            methodBuilder.WithBody()
            .WithLine("for(var i = 0; i < 10; i++)")
            .WithLine("{{")
            .WithLine("}}");

            var secondMethodBuilder = classBuilder.WithMethod()
                                      .WithName("FooBar")
                                      .WithVisibility(AccessType.Public)
                                      .WithTypeParameter("T")
                                      .WithTypeParameter("U");

            secondMethodBuilder.WithParameter()
            .WithName("barFoo")
            .WithType("T");

            secondMethodBuilder.WithParameter()
            .WithName("fooBar")
            .WithType("U");

            secondMethodBuilder.WithTypeConstraint()
            .WithName("T")
            .WithBase(ConstraintBaseType.Struct);

            secondMethodBuilder.WithTypeConstraint()
            .WithName("U")
            .WithBase(ConstraintBaseType.Struct)
            .WithConstraint("IDisposable");

            var ast = builder.Build();

            var renderer = new CSharpRenderer();

            var result = renderer.Render(ast);

            var location = System.Reflection.Assembly.GetExecutingAssembly().Location;

            System.IO.File.WriteAllText(location + ".result3.cs", result);
        }