public void BuildGenericMethods() { ICodeWorkspace workspace = CodeWorkspace.Create(); INamespaceScope global = workspace.Global; INamespaceScope b = global.FindOrCreateNamespace("CK._g"); Type t = typeof(ContainsGenericMethods <>); workspace.EnsureAssemblyReference(t); b.EnsureUsing(t.Namespace); var c = b.CreateType(header => header.Append("class Specialized<T> : ").AppendCSharpName(t, true, true, true).NewLine()); c.CreateOverride(t.GetMethod("Simple1")) .Append("if (arg.Equals(default(T))) throw new System.ArgumentException();").NewLine() .Append("return default(TResult);"); c.CreateOverride(t.GetMethod("Simple2")) .Append("=> arg2 is T1;"); Assembly a = TestHelper.CreateAssembly(workspace.GetGlobalSource(), workspace.AssemblyReferences); Type tC = a.GetTypes().Single(n => n.Name == "Specialized`1").MakeGenericType(typeof(int)); ContainsGenericMethods <int> gotIt = (ContainsGenericMethods <int>)Activator.CreateInstance(tC); gotIt.Simple1 <bool>(25).Should().BeFalse(); gotIt.Simple2(new object(), "test").Should().BeTrue(); }
public void BaseTest() { ICodeWorkspace workspace = CodeWorkspace.Create(); INamespaceScope global = workspace.Global; INamespaceScope b = global.FindOrCreateNamespace("CK._g"); Type t = typeof(BaseToBeOverridden); workspace.EnsureAssemblyReference(t); b.EnsureUsing("System") .EnsureUsing("System.Collections.Generic") .EnsureUsing(t.Namespace); var c = b.CreateType(h => h.Append("class Specialized : ").AppendCSharpName(t, true, true, true)); c.CreatePassThroughConstructors(t); c.CreateOverride(t.GetMethod("Simple1")) .Append("=> 3712;"); c.CreateOverride(t.GetMethod("VoidMethod")); c.CreateOverride(t.GetMethod("Simple2", BindingFlags.Instance | BindingFlags.NonPublic)) .Append("=> x + '-' + g.ToString();"); c.CreateOverride(t.GetMethod("Simple3", BindingFlags.Instance | BindingFlags.NonPublic)) .Append("g = Guid.NewGuid();").NewLine() .Append(@"x = ""Hello World!"" + Simple2( ""YES"", g );").NewLine() .Append("return this;"); c.CreateOverride(t.GetMethod("VerbatimParameters", BindingFlags.Instance | BindingFlags.NonPublic)).Append(" => @this + @operator;"); Assembly a = TestHelper.CreateAssembly(workspace.GetGlobalSource(), workspace.AssemblyReferences); Type tC = a.GetTypes().Single(n => n.Name == "Specialized"); BaseToBeOverridden gotIt = (BaseToBeOverridden)Activator.CreateInstance(tC, new object[] { 3712 * 3712 }); gotIt.ValFromCtor.Should().Be(3712 * 3712); gotIt.Simple1().Should().Be(3712); string s; Guid g = Guid.Empty; gotIt.Simple3(out s, ref g, 9).Should().BeSameAs(gotIt); s.Should().Be("Hello World!YES-" + g.ToString()); g.Should().NotBeEmpty(); }
public void SqlTest() { ICodeWorkspace workspace = CodeWorkspace.Create(); INamespaceScope global = workspace.Global; INamespaceScope b = global.FindOrCreateNamespace("CK._g"); workspace.EnsureAssemblyReference(typeof(SqlCommand), typeof(SimpleBase)); b.EnsureUsing("System") .EnsureUsing("System.Collections.Generic") .EnsureUsing("Microsoft.Data.SqlClient"); var type = b.CreateType(w => w.Append("public class GGGG : ").AppendCSharpName(typeof(SimpleBase), true, true, true)); type.CreateOverride(typeof(SimpleBase).GetMethod("Do")) .Append( @"if( i.HasValue ) { i *= i; } var c = new SqlCommand(""p""+i.ToString()); var p = c.Parameters.AddWithValue(""@i"", (object)i ?? DBNull.Value); return c;"); var source = workspace.GetGlobalSource(); var references = workspace.AssemblyReferences; Assembly a = TestHelper.CreateAssembly(source, references); Type t = a.GetTypes().Single(n => n.Name == "GGGG"); SimpleBase gotIt = (SimpleBase)Activator.CreateInstance(t); int? k = 67; SqlCommand cmd = gotIt.Do(ref k); k.Should().Be(67 * 67); cmd.CommandText.Should().Be("p" + k); cmd.Parameters.Cast <SqlParameter>().Single().Value.Should().Be(k); }