Skip to content

Commit 43d0a8f

Browse files
committed
Merge pull request #92 from NSwag/master
Release v2.18
2 parents 007edea + 17aa940 commit 43d0a8f

File tree

22 files changed

+527
-447
lines changed

22 files changed

+527
-447
lines changed

src/NSwag.Annotations/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
[assembly: AssemblyCompany("Rico Suter")]
66
[assembly: AssemblyProduct("NSwag.Annotations")]
77
[assembly: AssemblyCopyright("Copyright © Rico Suter, 2015")]
8-
[assembly: AssemblyVersion("2.17.*")]
8+
[assembly: AssemblyVersion("2.18.*")]

src/NSwag.CodeGeneration.Tests/ClientGeneration/ArrayParameterTests.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Linq;
43
using System.Text;
54
using System.Threading.Tasks;
@@ -71,9 +70,11 @@ public void When_parameter_is_array_then_TypeScript_is_correct()
7170
var settings = new SwaggerToTypeScriptClientGeneratorSettings { ClassName = "MyClass" };
7271
var generator = new SwaggerToTypeScriptClientGenerator(service, settings);
7372
var code = generator.GenerateFile();
74-
73+
7574
//// Assert
76-
Assert.IsTrue(code.Contains(@"elementId.forEach(item => { url += ""elementId="" + encodeURIComponent("""" + item) + ""&""; });"));
75+
Assert.IsTrue(
76+
code.Contains(
77+
@"elementId.forEach(item => { url += ""elementId="" + encodeURIComponent("""" + item) + ""&""; });"));
7778
}
7879

7980
[TestMethod]
@@ -137,7 +138,10 @@ public void When_parameter_is_array_then_CSharp_is_correct()
137138
var code = generator.GenerateFile();
138139

139140
//// Assert
140-
Assert.IsTrue(code.Contains(@"foreach(var item_ in elementId) { url_ += string.Format(""elementId={0}&"", Uri.EscapeUriString(item_.ToString())); }"));
141+
Assert.IsTrue(
142+
code.Contains(
143+
@"foreach(var item_ in elementId) { url_ += string.Format(""elementId={0}&"", Uri.EscapeUriString(item_.ToString())); }"));
141144
}
145+
142146
}
143147
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System.Collections.Generic;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using NJsonSchema;
4+
using NSwag.CodeGeneration.CodeGenerators.CSharp;
5+
6+
namespace NSwag.CodeGeneration.Tests.ClientGeneration
7+
{
8+
[TestClass]
9+
public class FormParameterTests
10+
{
11+
[TestMethod]
12+
public void When_form_parameters_are_defined_then_MultipartFormDataContent_is_generated()
13+
{
14+
//// Arrange
15+
var service = new SwaggerService();
16+
service.Paths["foo/bar"] = new SwaggerOperations
17+
{
18+
{
19+
SwaggerOperationMethod.Post,
20+
new SwaggerOperation
21+
{
22+
Parameters = new List<SwaggerParameter>
23+
{
24+
new SwaggerParameter
25+
{
26+
Name = "foo",
27+
Kind = SwaggerParameterKind.FormData,
28+
Type = JsonObjectType.String
29+
},
30+
new SwaggerParameter
31+
{
32+
Name = "bar",
33+
IsRequired = true,
34+
Kind = SwaggerParameterKind.FormData,
35+
Type = JsonObjectType.String
36+
}
37+
}
38+
}
39+
}
40+
};
41+
42+
//// Act
43+
var generator = new SwaggerToCSharpClientGenerator(service, new SwaggerToCSharpClientGeneratorSettings
44+
{
45+
46+
});
47+
var code = generator.GenerateFile();
48+
49+
//// Assert
50+
Assert.IsTrue(code.Contains("new MultipartFormDataContent"));
51+
Assert.IsTrue(code.Contains("if (foo != null)"));
52+
Assert.IsTrue(code.Contains("throw new ArgumentNullException(\"bar\");"));
53+
}
54+
}
55+
}

src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
</Choose>
7979
<ItemGroup>
8080
<Compile Include="ClientGeneration\ArrayParameterTests.cs" />
81+
<Compile Include="ClientGeneration\FormParameterTests.cs" />
8182
<Compile Include="CodeGenerationTests.cs" />
8283
<Compile Include="CommandLine\WebApiCommandLineTests.cs" />
8384
<Compile Include="OperationNameGenerator\MultipleClientsFromOperationIdOperationNameGeneratorTests.cs" />

src/NSwag.CodeGeneration.Tests/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@
3131
//
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
34-
// [assembly: AssemblyVersion("2.17.*")]
34+
// [assembly: AssemblyVersion("2.18.*")]
3535
[assembly: AssemblyVersion("1.0.0.0")]
3636
[assembly: AssemblyFileVersion("1.0.0.0")]

src/NSwag.CodeGeneration/CodeGenerators/CSharp/SwaggerToCSharpClientGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//-----------------------------------------------------------------------
2-
// <copyright file="SwaggerToCSharpGenerator.cs" company="NSwag">
2+
// <copyright file="SwaggerToCSharpClientGenerator.cs" company="NSwag">
33
// Copyright (c) Rico Suter. All rights reserved.
44
// </copyright>
55
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
@@ -15,7 +15,7 @@
1515
namespace NSwag.CodeGeneration.CodeGenerators.CSharp
1616
{
1717
/// <summary>Generates the CSharp service client code. </summary>
18-
public class SwaggerToCSharpClientGenerator : SwaggerToCSharpGenerator
18+
public class SwaggerToCSharpClientGenerator : SwaggerToCSharpGeneratorBase
1919
{
2020
private readonly SwaggerService _service;
2121

@@ -44,15 +44,15 @@ public SwaggerToCSharpClientGenerator(SwaggerService service, SwaggerToCSharpCli
4444
/// <summary>Gets the language.</summary>
4545
protected override string Language => "CSharp";
4646

47+
internal override CodeGeneratorBaseSettings BaseSettings => Settings;
48+
4749
/// <summary>Generates the file.</summary>
4850
/// <returns>The file contents.</returns>
4951
public override string GenerateFile()
5052
{
5153
return GenerateFile(_service, Resolver);
5254
}
5355

54-
internal override CodeGeneratorBaseSettings BaseSettings => Settings;
55-
5656
internal override string RenderFile(string clientCode)
5757
{
5858
var template = LoadTemplate("File");

src/NSwag.CodeGeneration/CodeGenerators/CSharp/SwaggerToCSharpGenerator.cs renamed to src/NSwag.CodeGeneration/CodeGenerators/CSharp/SwaggerToCSharpGeneratorBase.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//-----------------------------------------------------------------------
2-
// <copyright file="SwaggerToCSharpGenerator.cs" company="NSwag">
2+
// <copyright file="SwaggerToCSharpGeneratorBase.cs" company="NSwag">
33
// Copyright (c) Rico Suter. All rights reserved.
44
// </copyright>
55
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
@@ -13,11 +13,11 @@
1313
namespace NSwag.CodeGeneration.CodeGenerators.CSharp
1414
{
1515
/// <summary>The CSharp generator base class.</summary>
16-
public abstract class SwaggerToCSharpGenerator : ClientGeneratorBase
16+
public abstract class SwaggerToCSharpGeneratorBase : ClientGeneratorBase
1717
{
1818
internal SwaggerToCSharpTypeResolver Resolver { get; private set; }
1919

20-
internal SwaggerToCSharpGenerator(SwaggerService service, CSharpGeneratorSettings settings)
20+
internal SwaggerToCSharpGeneratorBase(SwaggerService service, CSharpGeneratorSettings settings)
2121
{
2222
Resolver = new SwaggerToCSharpTypeResolver(settings, service.Definitions);
2323
}
@@ -33,7 +33,7 @@ internal override string GetExceptionType(SwaggerOperation operation)
3333
internal override string GetResultType(SwaggerOperation operation)
3434
{
3535
var response = GetSuccessResponse(operation);
36-
if (response == null || response.Schema == null)
36+
if (response?.Schema == null)
3737
return "Task";
3838

3939
return "Task<" + GetType(response.Schema, "Response") + ">";
Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
//-----------------------------------------------------------------------
2-
// <copyright file="SwaggerToCSharpGeneratorSettings.cs" company="NSwag">
3-
// Copyright (c) Rico Suter. All rights reserved.
4-
// </copyright>
5-
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
6-
// <author>Rico Suter, [email protected]</author>
7-
//-----------------------------------------------------------------------
8-
9-
using NJsonSchema.CodeGeneration.CSharp;
10-
11-
namespace NSwag.CodeGeneration.CodeGenerators.CSharp
12-
{
13-
/// <summary>Settings for the <see cref="SwaggerToCSharpGenerator"/>.</summary>
14-
public abstract class SwaggerToCSharpGeneratorSettings : CodeGeneratorBaseSettings
15-
{
16-
/// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpClientGeneratorSettings"/> class.</summary>
17-
protected SwaggerToCSharpGeneratorSettings()
18-
{
19-
AdditionalNamespaceUsages = null;
20-
CSharpGeneratorSettings = new CSharpGeneratorSettings
21-
{
22-
Namespace = "MyNamespace"
23-
};
24-
}
25-
26-
/// <summary>Gets or sets the CSharp generator settings.</summary>
27-
public CSharpGeneratorSettings CSharpGeneratorSettings { get; set; }
28-
29-
/// <summary>Gets or sets the class name of the service client.</summary>
30-
public string ClassName { get; set; }
31-
32-
/// <summary>Gets or sets the additional namespace usages.</summary>
33-
public string[] AdditionalNamespaceUsages { get; set; }
34-
}
1+
//-----------------------------------------------------------------------
2+
// <copyright file="SwaggerToCSharpGeneratorSettings.cs" company="NSwag">
3+
// Copyright (c) Rico Suter. All rights reserved.
4+
// </copyright>
5+
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
6+
// <author>Rico Suter, [email protected]</author>
7+
//-----------------------------------------------------------------------
8+
9+
using NJsonSchema.CodeGeneration.CSharp;
10+
11+
namespace NSwag.CodeGeneration.CodeGenerators.CSharp
12+
{
13+
/// <summary>Settings for the <see cref="SwaggerToCSharpGeneratorBase"/>.</summary>
14+
public abstract class SwaggerToCSharpGeneratorSettings : CodeGeneratorBaseSettings
15+
{
16+
/// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpClientGeneratorSettings"/> class.</summary>
17+
protected SwaggerToCSharpGeneratorSettings()
18+
{
19+
AdditionalNamespaceUsages = null;
20+
CSharpGeneratorSettings = new CSharpGeneratorSettings
21+
{
22+
Namespace = "MyNamespace"
23+
};
24+
}
25+
26+
/// <summary>Gets or sets the CSharp generator settings.</summary>
27+
public CSharpGeneratorSettings CSharpGeneratorSettings { get; set; }
28+
29+
/// <summary>Gets or sets the class name of the service client.</summary>
30+
public string ClassName { get; set; }
31+
32+
/// <summary>Gets or sets the additional namespace usages.</summary>
33+
public string[] AdditionalNamespaceUsages { get; set; }
34+
}
3535
}

src/NSwag.CodeGeneration/CodeGenerators/CSharp/SwaggerToCSharpWebApiControllerGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//-----------------------------------------------------------------------
2-
// <copyright file="SwaggerToCSharpGenerator.cs" company="NSwag">
2+
// <copyright file="SwaggerToCSharpWebApiControllerGenerator.cs" company="NSwag">
33
// Copyright (c) Rico Suter. All rights reserved.
44
// </copyright>
55
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
@@ -15,7 +15,7 @@
1515
namespace NSwag.CodeGeneration.CodeGenerators.CSharp
1616
{
1717
/// <summary>Generates the CSharp service client code. </summary>
18-
public class SwaggerToCSharpWebApiControllerGenerator : SwaggerToCSharpGenerator
18+
public class SwaggerToCSharpWebApiControllerGenerator : SwaggerToCSharpGeneratorBase
1919
{
2020
private readonly SwaggerService _service;
2121

@@ -43,15 +43,15 @@ public SwaggerToCSharpWebApiControllerGenerator(SwaggerService service, SwaggerT
4343
/// <summary>Gets the language.</summary>
4444
protected override string Language => "CSharp";
4545

46+
internal override CodeGeneratorBaseSettings BaseSettings => Settings;
47+
4648
/// <summary>Generates the file.</summary>
4749
/// <returns>The file contents.</returns>
4850
public override string GenerateFile()
4951
{
5052
return GenerateFile(_service, Resolver);
5153
}
5254

53-
internal override CodeGeneratorBaseSettings BaseSettings => Settings;
54-
5555
internal override string RenderFile(string clientCode)
5656
{
5757
var template = LoadTemplate("File");

src/NSwag.CodeGeneration/CodeGenerators/CSharp/Templates/Client.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,22 @@ public partial class <class> <if(hasBaseType)>: <endif><if(hasBaseClass)><baseCl
105105
<if(operation.IsGetOrDelete)>
106106
var response_ = await client_.<operation.HttpMethodUpper>Async(url_, cancellationToken).ConfigureAwait(false);
107107
<else>
108-
var response_ = await client_.<operation.HttpMethodUpper>Async(url_, new StringContent(string.Empty), cancellationToken).ConfigureAwait(false);
108+
<if(operation.HasFormParameters)>
109+
var content_ = new MultipartFormDataContent();
110+
<operation.FormParameters:{parameter |
111+
<if(parameter.IsOptional)>
112+
if (<parameter.VariableNameLower> != null)
113+
<else>
114+
if (<parameter.VariableNameLower> == null)
115+
throw new ArgumentNullException("<parameter.VariableNameLower>");
116+
else
117+
<endif>
118+
content_.Add(new StringContent(<parameter.VariableNameLower>.ToString()), "<parameter.Name>");
119+
}>
120+
<else>
121+
var content_ = new StringContent(string.Empty);
122+
<endif>
123+
var response_ = await client_.<operation.HttpMethodUpper>Async(url_, content_, cancellationToken).ConfigureAwait(false);
109124
<endif>
110125
ProcessResponse(client_, response_);
111126
<endif>

0 commit comments

Comments
 (0)