Beispiel #1
0
        public void TestExceptionHandling()
        {
            //try catch
            //try finally
            //throw
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(string), () => "foo",
                       Emit.trycatch(Emit.@throw(() => new ApplicationException()))
                       .AddCatch(typeof(ApplicationException), "ex",
                                 Emit.@return(() => "ok")
                                 )
                       .AddFinally(Emit.stmt(() => Console.WriteLine())))
            ;

            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);
        }
Beispiel #2
0
        public void Builder_Interface()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass(Define.Class("TestClass", TypeAttributes.Public)
                      .Implements(typeof(IDisposable))
                      .AddMethod(MemberAttributes.Private, () => "Dispose",
                                 Emit.@throw(() => new NotImplementedException())
                                 ).Implements(typeof(IDisposable))
                      ).AddInterface(Define.Interface("Ixxx")
                                     .AddMethod(MemberAttributes.Public, () => "First")
                                     .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second")
                                     .AddProperty("TestClass", MemberAttributes.Public, "Third")
                                     .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth")
                                     .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth")
                                     ).AddClass("xxx").Implements(new CodeTypeReference("Ixxx"))
            .AddMethod(MemberAttributes.Private, () => "First",
                       Emit.@throw(() => new NotImplementedException())
                       ).Implements(new CodeTypeReference("Ixxx"))
            .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second",
                       Emit.@throw(() => new NotImplementedException())
                       ).Implements(new CodeTypeReference("Ixxx"))
            .AddProperty("TestClass", MemberAttributes.Public, "Third",
                         CodeDom.CombineStmts(Emit.@throw(() => new NotImplementedException())),
                         Emit.@throw(() => new NotImplementedException())
                         ).Implements("Ixxx")
            .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth",
                            Emit.@throw(() => new NotImplementedException())
                            ).Implements(new CodeTypeReference("Ixxx"))
            .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth"
                      ).Implements("Ixxx")
            .AddField(typeof(int), "_z", () => 100)
            ;

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

            Assert.IsNotNull(TestClass);

            ass = c.Compile(CodeDomGenerator.Language.VB);

            Assert.IsNotNull(ass);

            TestClass = ass.GetType("Samples.xxx");

            Assert.IsNotNull(TestClass);
        }
Beispiel #3
0
        public void Builder_Property()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass")
                                               .AddFields(
                                                   Define.Field(MemberAttributes.Private, typeof(string), "_s")
                                                   )
                                               .AddProperty(
                                                   Define.Property(typeof(string), MemberAttributes.Public, "Test",
                                                                   CodeDom.CombineStmts(Emit.@return(() => [email protected] <string>("_s"))),
                                                                   Emit.assignField("_s", (string value) => value)
                                                                   )
                                                   )
                                               .AddProperty(
                                                   Define.Property(typeof(string), MemberAttributes.Public, "Test2", "_s")
                                                   )
                                               .AddProperty(typeof(string), MemberAttributes.Public, "Test3", "_s")
                                               .AddProperty("TestClass", MemberAttributes.Public, "Test4",
                                                            CodeDom.CombineStmts(Emit.@return(() => CodeDom.@this)),
                                                            Emit.@throw(() => new NotImplementedException(
                                                                            CodeDom.Property <string>(CodeDom.VarRef("value"), "Test")
                                                                            ))
                                                            )
                                               .AddMethod(MemberAttributes.Public, typeof(string), (int a) => "Test1",
                                                          Emit.assignProperty("Test", () => Guid.NewGuid().ToString()),
                                                          Emit.@return((int a) =>
                                                                       a.ToString() + [email protected] <string>("Test")))
                                               );

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

            Assert.IsNotNull(TestClass);

            object t = TestClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);

            Assert.IsNotNull(t);

            string s = TestClass.InvokeMember("Test1", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, t,
                                              new object[] { 4 }) as string;

            Assert.IsNotNull(s);

            string TestProperty = s.Substring(1);

            Assert.AreEqual(TestProperty, TestClass.InvokeMember("Test", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty, null, t, null));
        }