public static void Main() { var document = OpenApiDocument.FromUrlAsync("https://*****:*****@"..\..\..\..\Squidex.ClientLibrary\Management\Generated.cs", code); }
private static void GenerateCSharp(OpenApiDocument document) { var generatorSettings = new CSharpClientGeneratorSettings { ExceptionClass = "NotifoException", GenerateOptionalParameters = true, GenerateClientInterfaces = true, GenerateBaseUrlProperty = true, OperationNameGenerator = new TagNameGenerator(), UseBaseUrl = true }; generatorSettings.CSharpGeneratorSettings.ExcludedTypeNames = new[] { "JsonInheritanceConverter" }; generatorSettings.CSharpGeneratorSettings.ArrayBaseType = "System.Collections.Generic.List"; generatorSettings.CSharpGeneratorSettings.ArrayInstanceType = "System.Collections.Generic.List"; generatorSettings.CSharpGeneratorSettings.ArrayType = "System.Collections.Generic.List"; generatorSettings.CSharpGeneratorSettings.DictionaryBaseType = "System.Collections.Generic.Dictionary"; generatorSettings.CSharpGeneratorSettings.DictionaryInstanceType = "System.Collections.Generic.Dictionary"; generatorSettings.CSharpGeneratorSettings.DictionaryType = "System.Collections.Generic.Dictionary"; generatorSettings.CSharpGeneratorSettings.Namespace = "Notifo.SDK"; generatorSettings.CSharpGeneratorSettings.RequiredPropertiesMustBeDefined = false; var codeGenerator = new CSharpClientGenerator(document, generatorSettings); var code = codeGenerator.GenerateFile(); code = code.Replace("https://*****:*****@"..\..\..\..\Notifo.SDK\Generated.cs", code); }
static async Task Main(string[] args) { System.Net.WebClient wclient = new System.Net.WebClient(); var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("https://app.amphoradata.com/swagger/v1/swagger.json")); wclient.Dispose(); var settings = new CSharpClientGeneratorSettings { //ClassName = "AmphoraClient", CSharpGeneratorSettings = { Namespace = "AmphoraData.Client", } }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var directory = System.IO.Directory.GetCurrentDirectory(); var filePath = $"{directory}/client/AmphoraClient.cs"; System.IO.File.Delete(filePath); Console.WriteLine($"Deleted {filePath}"); System.IO.File.WriteAllText(filePath, code); Console.WriteLine($"Wrote {filePath}"); }
private CSharpClientGenerator CreateCSharpGenerator(OpenApiDocument apiDoc) { var settings = new CSharpClientGeneratorSettings { GenerateDtoTypes = true, AdditionalContractNamespaceUsages = _usings, AdditionalNamespaceUsages = _usings }; settings.CodeGeneratorSettings.InlineNamedAny = true; settings.CSharpGeneratorSettings.Namespace = Config.OutputNamespace; settings.CSharpGeneratorSettings.ClassStyle = CSharpClassStyle.Inpc; var generator = new NSwag.CodeGeneration.OperationNameGenerators. MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator(); var csgen = new CSharpClientGenerator(apiDoc, settings); csgen.Settings.GenerateOptionalParameters = true; csgen.Settings.GenerateResponseClasses = true; csgen.Settings.SerializeTypeInformation = true; csgen.Settings.OperationNameGenerator = generator; return(csgen); }
/// <summary> /// Generates a /// </summary> /// <param name="outputFile"></param> /// <param name="handler"></param> /// <returns></returns> public NSwagRunner GenerateCSharpClient(FilePath outputFile, Action <CSharpClientGeneratorSettings> handler) { var settings = new CSharpClientGeneratorSettings(); handler?.Invoke(settings); return(GenerateCSharpClient(outputFile, settings)); }
public static async Task Main(string[] args) { // Read the Open API YAML specification OpenApiDocument document = await OpenApiYamlDocument.FromUrlAsync("https://raw.githubusercontent.com/netlify/open-api/master/swagger.yml"); // Generate the code CSharpClientGeneratorSettings clientSettings = new CSharpClientGeneratorSettings { ClassName = nameof(NetlifyClient), CSharpGeneratorSettings = { Namespace = nameof(NetlifySharp), PropertyNameGenerator = new PascalCasePropertyNameGenerator() }, ParameterNameGenerator = new CamelCaseParameterNameGenerator(), ExceptionClass = nameof(NetlifyException), InjectHttpClient = false, UseHttpClientCreationMethod = true }; clientSettings.CSharpGeneratorSettings.TemplateFactory = new CustomTemplateFactory( clientSettings.CSharpGeneratorSettings.TemplateFactory, clientSettings); CSharpClientGenerator generator = new CSharpClientGenerator(document, clientSettings); string code = generator.GenerateFile(); // Make the constructor private so we can write our own code = code.Replace($"public {clientSettings.ClassName}(", $"private {clientSettings.ClassName}("); // Write to a file in the client project System.IO.File.WriteAllText($"../../src/NetlifySharp/{clientSettings.ClassName}.Generated.cs", code); }
static void Main(string[] args) { var serviceSettings = new CSharpClientGeneratorSettings { ClassName = "ContentAppService", ClientBaseClass = "ContentManagementAppService", ClientBaseInterface = "IApplicationService", GenerateClientClasses = true, GenerateClientInterfaces = true, GenerateDtoTypes = true, CSharpGeneratorSettings = { Namespace = "ContentManagement.Content" } }; GenerateCodeInterfaceAndService(serviceSettings, "ContentAppService.cs"); //var serviceSettingsDtos = new CSharpClientGeneratorSettings //{ // ClassName = "ContentAppServiceDto", // ClientBaseClass = "", // ClientBaseInterface = "", // GenerateClientClasses = false, // GenerateClientInterfaces = false, // GenerateDtoTypes = true, // CSharpGeneratorSettings = // { // Namespace = "ContentManagement.Content" // } //}; //GenerateCode(serviceSettingsDtos, "ContentAppServiceDto.cs"); }
public string ToCSharpCode(OpenApiDocument document) { //System.Net.WebClient wclient = new System.Net.WebClient(); //var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("Https://SwaggerSpecificationURL.json")); //wclient.Dispose(); var settings = new CSharpClientGeneratorSettings { ClassName = "AlibabaApiClient", CSharpGeneratorSettings = { Namespace = "AlibabaSDK" }, GenerateSyncMethods = true }; //settings.CodeGeneratorSettings.TemplateDirectory = ""; settings.CodeGeneratorSettings.GenerateDefaultValues = true; settings.CodeGeneratorSettings.PropertyNameGenerator = new MyCSharpPropertyNameGenerator(); var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); return(code); }
public string ToCSharpCodeClient(OpenApiDocument document, string _namespace, string className, string[] namespaceUsages) { //System.Net.WebClient wclient = new System.Net.WebClient(); //var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("Https://SwaggerSpecificationURL.json")); //wclient.Dispose(); var settings = new CSharpClientGeneratorSettings { ClassName = className,//"AlibabaApiClient", CSharpGeneratorSettings = { Namespace = _namespace//"AlibabaSDK" }, GenerateSyncMethods = true, GenerateDtoTypes = false, GenerateClientInterfaces = true, GenerateExceptionClasses = false, GenerateOptionalParameters = true, AdditionalNamespaceUsages = namespaceUsages//new[] { "AlibabaSDK.Models" } }; //settings.CodeGeneratorSettings.TemplateDirectory = ""; settings.CodeGeneratorSettings.GenerateDefaultValues = true; settings.CodeGeneratorSettings.PropertyNameGenerator = new MyCSharpPropertyNameGenerator(); settings.CodeGeneratorSettings.TemplateDirectory = @"D:\Users\mccj\Source\Repos\AlibabaSDKFor1688\src\tools\AlibabaSDKFor1688GenerationApp\Templates"; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); return(code); }
public string ToCSharpCode(OpenApiDocument document, string _namespace) { var settings = new CSharpClientGeneratorSettings { CSharpGeneratorSettings = { Namespace = _namespace,//"AlibabaSDK" }, //GenerateSyncMethods = true, ////GenerateDtoTypes = false, //GenerateClientInterfaces = true, //GenerateExceptionClasses = false, //GenerateOptionalParameters = true, }; //settings.CodeGeneratorSettings.TemplateDirectory = ""; settings.CodeGeneratorSettings.GenerateDefaultValues = true; settings.CodeGeneratorSettings.PropertyNameGenerator = new MyCSharpPropertyNameGenerator(); settings.CSharpGeneratorSettings.GenerateJsonMethods = false; settings.CSharpGeneratorSettings.RequiredPropertiesMustBeDefined = false; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); return(code); }
public static async void GenerateCodeInterfaceAndService(CSharpClientGeneratorSettings settings, string serviceName) { System.Net.WebClient wclient = new System.Net.WebClient(); string url = @"https://cloud.squidex.io/api/content/ilearn/swagger/v1/swagger.json"; var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString(url)); wclient.Dispose(); var generator = new CSharpClientGenerator(document, settings); string allCode = generator.GenerateFile(); int indexSplitInterfaceAndApp = IndexOfOccurence(allCode, "[System.CodeDom.Compiler.GeneratedCode(\"NSwag\", \"13.10.1.0 (NJsonSchema v10.3.3.0 (Newtonsoft.Json v12.0.0.0))\")]", 2); int indexSplitDto = IndexOfOccurence(allCode, "[System.CodeDom.Compiler.GeneratedCode(\"NJsonSchema\"", 1); string nameSpace = "namespace ContentManagement.Content {\n"; //Interface Service string interfaceCode = allCode.Remove(indexSplitInterfaceAndApp) + "}"; File.WriteAllText(baseLocation + "I" + serviceName, interfaceCode); //ServiceCode int length = indexSplitDto - indexSplitInterfaceAndApp; string serviceCode = nameSpace + allCode.Substring(indexSplitInterfaceAndApp, length) + "}"; File.WriteAllText(baseLocation + serviceName, serviceCode); string dtoCode = nameSpace + allCode.Substring(indexSplitDto); File.WriteAllText(baseLocation + "Dto" + serviceName, dtoCode); }
private static string GenerateNSwagTemplateFromDocument(OpenApiDocument document) { var settings = new CSharpClientGeneratorSettings { ClassName = UrsaApplication.PackingParameters.ClassName, GenerateClientInterfaces = true, CSharpGeneratorSettings = { Namespace = UrsaApplication.PackingParameters.Namespace, TypeNameGenerator = new DefaultTypeNameGenerator { ReservedTypeNames = new[] { UrsaApplication.PackingParameters.Namespace, UrsaApplication.PackingParameters.ClassName }, }, GenerateOptionalPropertiesAsNullable = false } }; var generator = new CSharpClientGenerator(document, settings); return(generator.GenerateFile()); }
public async Task When_generating_csharp_with_any_inheritance_then_inheritance_is_generated() { // Arrange var json = @"{ ""openapi"": ""3.0.0"", ""components"": { ""schemas"": { ""SessionStateResent"": { ""allOf"": [ { ""$ref"": ""#/components/schemas/SportsbookEventBody"" }, { ""type"": ""object"", ""additionalProperties"": false } ] }, ""SportsbookEventBody"": { ""type"": ""object"", ""additionalProperties"": false } } } }"; var document = await OpenApiDocument.FromJsonAsync(json); // Act var settings = new CSharpClientGeneratorSettings(); var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("class SessionStateResent : SportsbookEventBody", code); }
public async Task <IActionResult> GenerateCSharpClient(GenerateCSharpClientRequest request) { try { OpenApiDocument document; try { document = await OpenApiDocument.FromUrlAsync(request.SwaggerContractEndpoint.AbsoluteUri); } catch (HttpRequestException ex) { return(StatusCode(404, ex.Message)); } var settings = new CSharpClientGeneratorSettings { ClassName = "{controller}Client", }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); return(StatusCode(200, code)); } catch (Exception ex) { return(StatusCode(500, new ServerError500Response(ex) { Endpoint = request.SwaggerContractEndpoint })); } }
/// <summary> /// /// </summary> /// <param name="outputFile"></param> /// <param name="settings"></param> /// <returns></returns> public NSwagRunner GenerateCSharpClient(FilePath outputFile, CSharpClientGeneratorSettings settings = null) { settings = settings ?? new CSharpClientGeneratorSettings(); var generator = new CSharpClientGenerator(Document, settings); WriteToFile(outputFile, generator.GenerateFile()); return(this); }
/// <summary>Initializes a new instance of the <see cref="CSharpExceptionDescriptionModel" /> class.</summary> /// <param name="type">The type.</param> /// <param name="description">The description.</param> /// <param name="controllerName">Name of the controller.</param> /// <param name="settings">The settings.</param> public CSharpExceptionDescriptionModel(string type, string description, string controllerName, CSharpClientGeneratorSettings settings) { _type = type; _settings = settings; _controllerName = controllerName; Description = !string.IsNullOrEmpty(description) ? description : "A server side error occurred."; }
public async Task When_same_response_is_referenced_multiple_times_in_operation_then_class_is_generated() { // Arrange string json = @"{ ""openapi"": ""3.0.0"", ""paths"": { ""/v1/exceptions/get"": { ""get"": { ""operationId"": ""Exceptions_GetException"", ""responses"": { ""200"": { ""$ref"": ""#/components/responses/BusinessExceptionResponse"", }, ""400"": { ""$ref"": ""#/components/responses/BusinessExceptionResponse"", } } } } }, ""components"": { ""schemas"": { ""BusinessException"": { ""type"": ""object"", ""additionalProperties"": false } }, ""responses"": { ""BusinessExceptionResponse"": { ""description"": ""List of NSwagStudio bugs"", ""content"": { ""application/json"": { ""schema"": { ""type"": ""array"", ""items"": { ""$ref"": ""#/components/schemas/BusinessException"" } } } } } } } }"; var document = await OpenApiDocument.FromJsonAsync(json); // Act var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("System.Threading.Tasks.Task<System.Collections.Generic.ICollection<BusinessException>>", code); Assert.Contains("class BusinessException", code); }
private static int GenerateCSharpClient(GenerateClientOptions options) { try { var swaggerJson = GetSwaggerJson(); #pragma warning disable S4462 var document = OpenApiDocument.FromJsonAsync(swaggerJson).Result; #pragma warning restore S4462 var filePath = options.CsFilePath.GetRootedPath(); Console.WriteLine($"Start generate client code with nswag. OutputPath: {filePath}"); var settings = new CSharpClientGeneratorSettings { GenerateClientInterfaces = true, OperationNameGenerator = new SingleClientFromOperationIdOperationNameGenerator(), ExceptionClass = "MetadataIntegrationServiceClientException", UseHttpClientCreationMethod = true, InjectHttpClient = true, ClassName = "MetadataIntegrationServiceClient", GenerateBaseUrlProperty = false, UseBaseUrl = false, ClientBaseClass = "ClientBaseClass", UseHttpRequestMessageCreationMethod = true, GenerateUpdateJsonSerializerSettingsMethod = true, CSharpGeneratorSettings = { Namespace = "SimairaDigital.Backend.ItemManagement.Client", InlineNamedTuples = true, GenerateJsonMethods = true, }, }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); if (File.Exists(filePath)) { File.Delete(filePath); } File.WriteAllText(filePath, code); return(0); } catch (Exception e) { Console.WriteLine(e); return(-1); } }
public static async void GenerateCode(CSharpClientGeneratorSettings settings, string serviceName) { System.Net.WebClient wclient = new System.Net.WebClient(); string url = @"https://cloud.squidex.io/api/content/ilearn/swagger/v1/swagger.json"; var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString(url)); wclient.Dispose(); var generator = new CSharpClientGenerator(document, settings); string allCode = generator.GenerateFile(); File.WriteAllText(baseLocation + serviceName, allCode); }
async static Task GenerateCSharpClient(string url, string generatePath) => await GenerateClient( document : await OpenApiDocument.FromUrlAsync(url), generatePath : generatePath, generateCode : (OpenApiDocument document) => { var settings = new CSharpClientGeneratorSettings { UseBaseUrl = false }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); return(code); } );
public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code() { // Arrange var document = CreateDocument(); // Act var settings = new CSharpClientGeneratorSettings(); settings.CSharpGeneratorSettings.JsonLibrary = NJsonSchema.CodeGeneration.CSharp.CSharpJsonLibrary.SystemTextJson; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("new System.Text.Json.JsonSerializerOptions()", code); }
public async Task When_response_is_referenced_any_then_class_is_generated() { // Arrange var json = @"{ ""openapi"": ""3.0.0"", ""paths"": { ""/v1/exceptions/get"": { ""post"": { ""operationId"": ""Exceptions_GetException"", ""responses"": { ""200"": { ""content"": { ""application/json"": { ""schema"": { ""$ref"": ""#/components/schemas/BusinessException"" } } } } } } } }, ""components"": { ""schemas"": { ""BusinessException"": { ""type"": ""object"", ""additionalProperties"": false } } } }"; var document = await OpenApiDocument.FromJsonAsync(json); // Act var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("System.Threading.Tasks.Task<BusinessException>", code); Assert.DoesNotContain("System.Threading.Tasks.Task<object>", code); Assert.Contains("class BusinessException", code); }
public async Task Generate() { var rig = await new SwaggerIntegration().Start(); try { //System.Threading.Thread.Sleep(10000); var response = await rig.HttpTestClient.GetAsync("/swagger/v1/swagger.json"); response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync(); var document = await OpenApiDocument.FromJsonAsync(responseString); var settings = new CSharpClientGeneratorSettings { ClassName = "{controller}Api", AdditionalContractNamespaceUsages = new string[] { "" }, AdditionalNamespaceUsages = new string[] { "Echo.Ecommerce.Host.Controllers", "Echo.Ecommerce.Host.Models", "Microsoft.AspNetCore.Mvc.ModelBinding", "Microsoft.AspNetCore.Mvc" }, CSharpGeneratorSettings = { Namespace = "Echo.Ecommerce.Host.WebApi" }, GenerateClientClasses = true, GenerateResponseClasses = false, GenerateDtoTypes = false }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var json = document.ToJson(); json = json.Replace("localhost", "swagger: 2.0"); string path = System.IO.Path.Join(Environment.CurrentDirectory, "..//..//..//RestApi.cs"); System.IO.File.WriteAllText(path, code); System.IO.File.WriteAllText(System.IO.Path.Join(Environment.CurrentDirectory, "..//..//..//..//Echo-Ecommerce-Web//swagger.json"), json); } catch (Exception ex) { Assert.Fail("Exception:" + ex.Message); } finally { rig.Stop(); } }
public void When_generating_CSharp_code_with_NewtonsoftJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code() { // Arrange var document = CreateDocument(); // Act var settings = new CSharpClientGeneratorSettings(); settings.CSharpGeneratorSettings.JsonLibrary = NJsonSchema.CodeGeneration.CSharp.CSharpJsonLibrary.NewtonsoftJson; settings.CSharpGeneratorSettings.JsonSerializerSettingsTransformationMethod = "TestJsonSerializerSettingsTransformationMethod"; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("TestJsonSerializerSettingsTransformationMethod(new Newtonsoft.Json.JsonSerializerSettings { })", code); }
public async Task <string> Generate() { var response = await httpClient.GetAsync(swaggerEndpoint); var document = await OpenApiDocument.FromJsonAsync(await response.Content.ReadAsStringAsync()); var settings = new CSharpClientGeneratorSettings { ClientBaseClass = ClientBaseClass, InjectHttpClient = true, UseBaseUrl = false, ExceptionClass = "SwaggerException" }; settings.CSharpGeneratorSettings.Namespace = ClientNamespace; return(new CSharpClientGenerator(document, settings).GenerateFile()); }
static async Task Main(string[] args) { var document = await OpenApiDocument.FromUrlAsync("https://localhost:5001/swagger/v1/swagger.json"); var settings = new CSharpClientGeneratorSettings { CSharpGeneratorSettings = { Namespace = "ImageRecognition.API.Client", } }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var fullPath = DetermienFullFilePath("ImageRecognitionClient.cs"); File.WriteAllText(fullPath, code); }
static async Task Generate(string source, string target, string name, bool repeat = false) { var document = await OpenApiYamlDocument.FromUrlAsync(source); var settings = new CSharpClientGeneratorSettings { ClassName = "{controller}Client", ExposeJsonSerializerSettings = true, CSharpGeneratorSettings = { Namespace = name } }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); File.WriteAllText(target, code); }
/// <summary>Initializes a new instance of the <see cref="CSharpClientTemplateModel" /> class.</summary> /// <param name="controllerName">Name of the controller.</param> /// <param name="controllerClassName">The class name of the controller.</param> /// <param name="operations">The operations.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="document">The Swagger document.</param> /// <param name="settings">The settings.</param> public CSharpClientTemplateModel( string controllerName, string controllerClassName, IEnumerable <CSharpOperationModel> operations, JsonSchema exceptionSchema, OpenApiDocument document, CSharpClientGeneratorSettings settings) : base(controllerName, settings) { _document = document; _exceptionSchema = exceptionSchema; _settings = settings; Class = controllerClassName; Operations = operations; BaseClass = _settings.ClientBaseClass?.Replace("{controller}", controllerName); ExceptionClass = _settings.ExceptionClass.Replace("{controller}", controllerName); }
static async Task Main(string[] args) { var document = await InputSetting.GetOpenApiDoc(); var settings = new CSharpClientGeneratorSettings { ClassName = InputSetting.ClassName, CSharpGeneratorSettings = { Namespace = InputSetting.NameSpace }, // OperationNameGenerator = new MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator() OperationNameGenerator = new CustomSingleClientFromPathSegmentsOperationNameGenerator() // OperationNameGenerator = new MultipleClientsFromPathSegmentsOperationNameGenerator() }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); await File.WriteAllTextAsync($"{settings.ClassName}.cs", code); }
public void When_generating_CSharp_code_with_SystemTextJson_and_JsonConverters_then_output_contains_expected_code() { // Arrange var document = CreateDocument(); //// Act var settings = new CSharpClientGeneratorSettings(); settings.CSharpGeneratorSettings.JsonLibrary = NJsonSchema.CodeGeneration.CSharp.CSharpJsonLibrary.SystemTextJson; settings.CSharpGeneratorSettings.JsonConverters = new[] { "CustomConverter1", "CustomConverter2" }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); // Assert Assert.Contains("new System.Text.Json.JsonSerializerOptions(); var converters = new System.Text.Json.Serialization.JsonConverter[] { new CustomConverter1(), new CustomConverter2() }", code); Assert.Contains("foreach(var converter in converters)", code); Assert.Contains("settings.Converters.Add(converter)", code); }