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