public void NoTypeRepository_Compiles(string input) { var sut = new ModelBuilderExtensionGenerator(); var code = sut.CreateModelBuilder(input); GetMethodDelegate(code); }
public void GeneratedCode_Compiles() { var sut = new ModelBuilderExtensionGenerator(); var code = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()"); GetMethodDelegate(code); }
public void Execute(GeneratorExecutionContext context) { var currentAssemblyName = context.Compilation.Assembly.Name; var namespaceName = NameBuilder.GetNamespace(currentAssemblyName); var modelBuilderGenerator = new ModelBuilderExtensionGenerator(); var mvcExtension = modelBuilderGenerator.CreateModelBuilder($"{namespaceName}.TypeRepository.Instance"); context.AddSource("LaDeakJsonMergePatchModelBuilderExtension", SourceText.From(mvcExtension, Encoding.UTF8)); }
public void Adds_ITypeRepository_MvcOptions_ServiceRegistrations() { var sut = new ModelBuilderExtensionGenerator(); var code = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()"); var mvcBuilder = Substitute.For <IMvcBuilder>(); var services = Substitute.For <IServiceCollection>(); mvcBuilder.Services.Returns(services); GetMethodDelegate(code)(mvcBuilder, null, null); services.Received().Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(ITypeRepository))); services.Received().Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>))); }
public void AddsJsonMergePatchInputReader_ToMvcOptions() { var sut = new ModelBuilderExtensionGenerator(); var code = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()"); var mvcBuilder = Substitute.For <IMvcBuilder>(); var services = Substitute.For <IServiceCollection>(); mvcBuilder.Services.Returns(services); IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions> optionsSetup = null; services.When(y => y.Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>)))) .Do(callInfo => optionsSetup = (callInfo[0] as ServiceDescriptor).ImplementationInstance as IConfigureOptions <Microsoft.AspNetCore.Mvc.MvcOptions>); var options = new Microsoft.AspNetCore.Mvc.MvcOptions(); GetMethodDelegate(code)(mvcBuilder, null, null); optionsSetup.Configure(options); Assert.Contains(options.InputFormatters, x => x is JsonMergePatchInputReader); }
public void PassesCustom_TypeRepository_RegistersToServices() { var sut = new ModelBuilderExtensionGenerator(); var code = sut.CreateModelBuilder("new LaDeak.JsonMergePatch.SourceGenerator.AspNetCore.Tests.TypeRepositoryHook()"); var mvcBuilder = Substitute.For <IMvcBuilder>(); var services = Substitute.For <IServiceCollection>(); mvcBuilder.Services.Returns(services); ITypeRepository registeredTypeRepository = null; services.When(y => y.Add(Arg.Is <ServiceDescriptor>(x => x.ServiceType == typeof(ITypeRepository)))) .Do(callInfo => registeredTypeRepository = (callInfo[0] as ServiceDescriptor).ImplementationInstance as ITypeRepository); var options = new Microsoft.AspNetCore.Mvc.MvcOptions(); var typeRepository = new TypeRepositoryHook(); GetMethodDelegate(code)(mvcBuilder, null, typeRepository); Assert.Same(typeRepository, registeredTypeRepository); }