Example #1
0
        public static string GenerateCode <T>(this T builder)
            where T : ICodeBlockBuilder
        {
            SourceCodeBuilder sb = new SourceCodeBuilder();

            builder.GenerateCode(sb);
            return(sb.ToString());
        }
Example #2
0
        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");
        }