public static string GenerateCode <T>(this T builder) where T : ICodeBlockBuilder { SourceCodeBuilder sb = new SourceCodeBuilder(); builder.GenerateCode(sb); return(sb.ToString()); }
public Type CreateDynamicAssertType() { if (ReceivedStatement == null) { ReceivedStatement = "Received(1)"; } if (ArgStatement == null) { ArgStatement = $"Arg.Any<{RequestType.Name}>()"; } if (ReturnsStatement == null) { ReturnsStatement = $"new {ResponseType.Name}()"; } SourceCodeBuilder code = new SourceCodeBuilder(); code.AppendLine("using System;"); code.AppendLine("using System.Threading.Tasks;"); code.AppendLine($"using {typeof(IDynamicMock).Namespace};"); code.AppendLine($"using {typeof(NSubstitute.Substitute).Namespace};"); code.AppendLine($"using {typeof(ICommandHandler<,>).Namespace};"); code.AppendLine($"using {typeof(MockRegister).Namespace};"); code.AppendLine($"using {RequestType.Namespace};"); code.AppendLine("namespace DynamicUtils").OpenBlock(); code.AppendLine($"public class DynamicMock : {typeof(IDynamicMock).Name}").OpenBlock(); code.AppendLine("private MockRegister _register;"); code.AppendLine($"public async Task Execute()").OpenBlock(); var handler = $"_register.GetHandler<{RequestType.Name},{ResponseType.Name}>()"; if (IsAssertion) { code.AppendLine($"await {handler}.{ReceivedStatement}.Execute({ArgStatement});"); } else { code.AppendLine($"{handler}.Execute({ArgStatement}).Returns({ReturnsStatement});"); } code.CloseBlock(); code.AppendLine($"public DynamicMock(MockRegister register)").OpenBlock(); code.AppendLine("this._register = register;").CloseBlock(); code.CloseBlock().CloseBlock(); TypeCompiler compiler = new TypeCompiler(); var assertationAssembly = compiler.FastLoad(code.ToString(), RequestType.Assembly, typeof(ValueTask <>).Assembly, Assembly.Load("System.Threading.Tasks.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51")); return(assertationAssembly.GetType("DynamicUtils.DynamicMock")); }
public void GivenIHaveWrittenCommandAndResultAs(string commandTypes, Table table) { var lines = table.CreateSet <CSharpCode>().ToArray(); SourceCodeBuilder sb = new SourceCodeBuilder(); sb.AppendLine("using System;"); sb.AppendLine("namespace Test").OpenBlock(); sb.AppendLines(lines.Select(x => x.Code)).CloseBlock(); TypeCompiler compiler = new TypeCompiler(); var typeAssembly = compiler.FastLoad(sb.ToString()); foreach (var commandType in commandTypes.Split(',')) { _data.Types[commandType] = typeAssembly.GetType($"Test.{commandType}"); } _data.Types["UserEntity"] = typeAssembly.GetType("Test.UserEntity"); }