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