Пример #1
0
        public void DefineClosureType_ArgumentChecks()
        {
            var rtc = new RuntimeCompiler();

            var atb = rtc.GetNewClosureTypeBuilder();

            AssertEx.ThrowsException <ArgumentNullException>(() => rtc.DefineClosureType(closureTypeBuilder: null, Array.Empty <KeyValuePair <string, Type> >()), ex => Assert.AreEqual("closureTypeBuilder", ex.ParamName));
            AssertEx.ThrowsException <ArgumentNullException>(() => rtc.DefineClosureType(atb, fields: null), ex => Assert.AreEqual("fields", ex.ParamName));
        }
Пример #2
0
        public void ClosureType_Empty()
        {
            var rtc = new RuntimeCompiler();

            var ctb = rtc.GetNewClosureTypeBuilder();

            rtc.DefineClosureType(ctb, Array.Empty <KeyValuePair <string, Type> >());

            var clt = ctb.CreateType();

            Assert.IsTrue(clt.IsClosureClass());

            Assert.IsTrue(clt.IsDefined(typeof(CompilerGeneratedAttribute), inherit: false));
        }
Пример #3
0
        public void ClosureType_NonTrivial()
        {
            ClosureType_NonTrivial_Impl(() =>
            {
                var rtc = new RuntimeCompiler();

                var ctb = rtc.GetNewClosureTypeBuilder();

                rtc.DefineClosureType(ctb, new[]
                {
                    new KeyValuePair <string, Type>("bar", typeof(int)),
                    new KeyValuePair <string, Type>("foo", typeof(string)),
                });

                return(ctb.CreateType());
            });
        }
Пример #4
0
        public void ClosureType_Visibility()
        {
            var props = new[] { new KeyValuePair <string, Type>("bar", typeof(Bar)) };

            Assert.ThrowsException <InvalidOperationException>(() => RuntimeCompiler.CreateClosureType(props));
            Assert.ThrowsException <InvalidOperationException>(() => { var rtc = new RuntimeCompiler(); var atb = rtc.GetNewClosureTypeBuilder(); rtc.DefineClosureType(atb, props); });
        }