Esempio n. 1
0
        public void GenericObjectCreate()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass(Define.Class("TestClass").Generic("T")
                      .AddFields(
                          Define.Field(MemberAttributes.Private, "T", "_s")
                          )
                      .AddProperty("T", MemberAttributes.Public, "S", "_s")
                      ).AddClass(Define.Class("cls")
                                 .AddMethod(MemberAttributes.Public | MemberAttributes.Static, CodeDom.TypeRef("TestClass", "T"), () => "foo",
                                            Emit.declare(CodeDom.TypeRef("TestClass", "T"), "cc",
                                                         () => CodeDom.@new(CodeDom.TypeRef("TestClass", "T"))),
                                            Emit.@return((Var cc) => cc))
                                 .Generic("T")
                                 );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass`1");

            Assert.IsNotNull(TestClass);
        }
Esempio n. 2
0
        public void DefaultExpression()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Static | MemberAttributes.Public, () => "foo",
                       Emit.stmt(() => CodeDom.Call(CodeDom.TypeRef("cls"), "zoo")(default(int)))
                       )
            .AddMethod(MemberAttributes.Static | MemberAttributes.Private, (int i) => "zoo",
                       Emit.stmt((int i) => Console.WriteLine(i))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Esempio n. 3
0
        public void TestPureClasses()
        {
            using (Stream stream = Resources.GetXmlDocumentStream("pure-classes"))
            {
                WXMLModel model = WXMLModel.LoadFromXml(XmlReader.Create(stream), new TestXmlUrlResolver());
                Assert.IsNotNull(model);

                var wxmlDocumentSet = model.GetWXMLDocumentSet(new WXMLModelWriterSettings());

                Assert.IsNotNull(wxmlDocumentSet);

                CodeDomGenerator c = new CodeDomGenerator();
                c.AddNamespace("test")
                .AddInterface(Define.Interface("MyInterface")
                              .AddProperty(typeof(int), MemberAttributes.Public, "ID")
                              .AddProperty(typeof(string), MemberAttributes.Public, "Name")
                              //.AddGetProperty(CodeDom.TypeRef(typeof(IQueryable<>), "MyInterface2"), MemberAttributes.Public, "e4s")
                              )
                .AddInterface(Define.Interface("MyInterface2")
                              .AddProperty(typeof(int), MemberAttributes.Public, "ID")
                              .AddProperty(CodeDom.TypeRef(new CodeTypeReference("MyInterface")), MemberAttributes.Public, "prop1")
                              )
                ;

                Assembly a = TestCSCodeInternal(model, new WXMLCodeDomGeneratorSettings(),
                                                c.GetCompileUnit(CodeDomGenerator.Language.CSharp));

                Assert.IsNotNull(a);

                Type t = a.GetType("e3");

                Assert.IsNotNull(t);

                Assert.IsTrue(t.GetInterfaces().Any(i => i.Name == "MyInterface"));

                a = TestVBCodeInternal(model, new WXMLCodeDomGeneratorSettings(),
                                       c.GetCompileUnit(CodeDomGenerator.Language.VB));

                Assert.IsNotNull(a);

                t = a.GetType("e3");

                Assert.IsNotNull(t);

                Assert.IsTrue(t.GetInterfaces().Any(i => i.Name == "MyInterface"));
            }
        }
Esempio n. 4
0
        public void ArrayComplexTypeCreate()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                       Emit.declare("cls[]", "d"),
                       Emit.declare(CodeDom.TypeRef(typeof(List <>), "cls"), "d2"),
                       Emit.assignVar("d", (Var d2) => d2.Call("ToArray"))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Esempio n. 5
0
        public void Builder_GenericMethod()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass").Generic("T")
                                               .AddFields(
                                                   Define.Field(MemberAttributes.Private, "T", "_s")
                                                   )
                                               .AddProperty("T", MemberAttributes.Public, "S", "_s")
                                               ).AddClass(Define.Class("cls")
                                                          .AddMethod(MemberAttributes.Public | MemberAttributes.Static, CodeDom.TypeRef(new CodeTypeReference("TestClass"), new CodeTypeReference("T")), () => "foo",
                                                                     Emit.declare(CodeDom.TypeRef(new CodeTypeReference("TestClass"), new CodeTypeReference("T")), "cc",
                                                                                  () => CodeDom.@new(CodeDom.TypeRef(new CodeTypeReference("TestClass"), new CodeTypeReference("T")))),
                                                                     Emit.@return((Var cc) => cc))
                                                          .Generic("T")
                                                          .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo2",
                                                                     Emit.stmt(() => CodeDom.Call(CodeDom.TypeRef(new CodeTypeReference("cls")), "foo", typeof(int)))
                                                                     )
                                                          .AddMethod(MemberAttributes.Static, () => "foo3",
                                                                     Emit.@return()
                                                                     ).Generic("T", true, typeof(object))
                                                          .AddMethod(MemberAttributes.Static, () => "foo5",
                                                                     Emit.@return()
                                                                     ).Generic("T", true, "System.Object")
                                                          .AddMethod(MemberAttributes.Static, () => "foo6",
                                                                     Emit.@return()
                                                                     ).Generic("T", true, new CodeTypeReference(typeof(object)))
                                                          .AddMethod(MemberAttributes.Static, () => "foo4",
                                                                     Emit.@return()
                                                                     ).Generic("T", typeof(ValueType))
                                                          .AddMethod(MemberAttributes.Static, () => "foo7",
                                                                     Emit.@return()
                                                                     ).Generic("T", new CodeTypeReference(typeof(ValueType)))
                                                          .AddMethod(MemberAttributes.Static, () => "foo8",
                                                                     Emit.@return()
                                                                     ).Generic("T", "cls")
                                                          );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass`1");

            Assert.IsNotNull(TestClass);

            Type realType = TestClass.MakeGenericType(new Type[] { typeof(string) });

            Assert.IsNotNull(realType);

            Type clsType = ass.GetType("Samples.cls");

            Assert.IsNotNull(clsType);

            System.Reflection.MethodInfo mi = clsType.GetMethod("foo");

            Assert.IsNotNull(mi);

            System.Reflection.MethodInfo rmi = mi.MakeGenericMethod(typeof(string));

            object t = rmi.Invoke(null, null);

            Assert.IsNotNull(t);
        }