Skip to content

Commit 08976be

Browse files
authored
Merge pull request #385 from bdebaere/feature/fix.tests
- Add culture invariant writer
2 parents a4e3991 + ad62a4a commit 08976be

17 files changed

+111
-64
lines changed

src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using Microsoft.OpenApi.Exceptions;
67
using Microsoft.OpenApi.Interfaces;
@@ -62,13 +63,14 @@ public static void Serialize<T>(
6263
}
6364

6465
IOpenApiWriter writer;
66+
var streamWriter = new FormattingStreamWriter(stream, CultureInfo.InvariantCulture);
6567
switch (format)
6668
{
6769
case OpenApiFormat.Json:
68-
writer = new OpenApiJsonWriter(new StreamWriter(stream));
70+
writer = new OpenApiJsonWriter(streamWriter);
6971
break;
7072
case OpenApiFormat.Yaml:
71-
writer = new OpenApiYamlWriter(new StreamWriter(stream));
73+
writer = new OpenApiYamlWriter(streamWriter);
7274
break;
7375
default:
7476
throw new OpenApiException(string.Format(SRResource.OpenApiFormatNotSupported, format));
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
using System;
5+
using System.IO;
6+
7+
namespace Microsoft.OpenApi.Writers
8+
{
9+
/// <summary>
10+
/// A custom <see cref="StreamWriter"/> which supports setting a <see cref="IFormatProvider"/>.
11+
/// </summary>
12+
public class FormattingStreamWriter : StreamWriter
13+
{
14+
/// <summary>
15+
/// Initializes a new instance of the <see cref="FormattingStreamWriter"/> class.
16+
/// </summary>
17+
/// <param name="stream"></param>
18+
/// <param name="formatProvider"></param>
19+
public FormattingStreamWriter(Stream stream, IFormatProvider formatProvider)
20+
: base(stream)
21+
{
22+
this.FormatProvider = formatProvider;
23+
}
24+
25+
/// <summary>
26+
/// The <see cref="IFormatProvider"/> associated with this <see cref="FormattingStreamWriter"/>.
27+
/// </summary>
28+
public override IFormatProvider FormatProvider { get; }
29+
}
30+
}

src/Microsoft.OpenApi/Writers/SpecialCharacterStringExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
using System;
5+
using System.Globalization;
56
using System.Linq;
67

78
namespace Microsoft.OpenApi.Writers
@@ -188,7 +189,7 @@ internal static string GetYamlCompatibleString(this string input)
188189

189190
// If string can be mistaken as a number, a boolean, or a timestamp,
190191
// wrap it in quote to indicate that this is indeed a string, not a number, a boolean, or a timestamp
191-
if (decimal.TryParse(input, out var _) ||
192+
if (decimal.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out var _) ||
192193
bool.TryParse(input, out var _) ||
193194
DateTime.TryParse(input, out var _))
194195
{

test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using FluentAssertions;
67
using Microsoft.OpenApi.Expressions;
@@ -106,7 +107,7 @@ public OpenApiCallbackTests(ITestOutputHelper output)
106107
public void SerializeAdvancedCallbackAsV3JsonWorks()
107108
{
108109
// Arrange
109-
var outputStringWriter = new StringWriter();
110+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
110111
var writer = new OpenApiJsonWriter(outputStringWriter);
111112
var expected =
112113
@"{
@@ -145,7 +146,7 @@ public void SerializeAdvancedCallbackAsV3JsonWorks()
145146
public void SerializeReferencedCallbackAsV3JsonWorks()
146147
{
147148
// Arrange
148-
var outputStringWriter = new StringWriter();
149+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
149150
var writer = new OpenApiJsonWriter(outputStringWriter);
150151
var expected =
151152
@"{
@@ -167,7 +168,7 @@ public void SerializeReferencedCallbackAsV3JsonWorks()
167168
public void SerializeReferencedCallbackAsV3JsonWithoutReferenceWorks()
168169
{
169170
// Arrange
170-
var outputStringWriter = new StringWriter();
171+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
171172
var writer = new OpenApiJsonWriter(outputStringWriter);
172173
var expected =
173174
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Globalization;
67
using System.IO;
78
using FluentAssertions;
89
using Microsoft.OpenApi.Extensions;
@@ -895,7 +896,7 @@ public OpenApiDocumentTests(ITestOutputHelper output)
895896
public void SerializeAdvancedDocumentAsV3JsonWorks()
896897
{
897898
// Arrange
898-
var outputStringWriter = new StringWriter();
899+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
899900
var writer = new OpenApiJsonWriter(outputStringWriter);
900901
var expected =
901902
@"{
@@ -1409,7 +1410,7 @@ public void SerializeAdvancedDocumentAsV3JsonWorks()
14091410
public void SerializeAdvancedDocumentWithReferenceAsV3JsonWorks()
14101411
{
14111412
// Arrange
1412-
var outputStringWriter = new StringWriter();
1413+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
14131414
var writer = new OpenApiJsonWriter(outputStringWriter);
14141415
var expected =
14151416
@"{
@@ -1724,7 +1725,7 @@ public void SerializeAdvancedDocumentWithReferenceAsV3JsonWorks()
17241725
public void SerializeAdvancedDocumentAsV2JsonWorks()
17251726
{
17261727
// Arrange
1727-
var outputStringWriter = new StringWriter();
1728+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
17281729
var writer = new OpenApiJsonWriter(outputStringWriter);
17291730
var expected = @"{
17301731
""swagger"": ""2.0"",
@@ -2158,7 +2159,7 @@ public void SerializeAdvancedDocumentAsV2JsonWorks()
21582159
public void SerializeAdvancedDocumentWithReferenceAsV2JsonWorks()
21592160
{
21602161
// Arrange
2161-
var outputStringWriter = new StringWriter();
2162+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
21622163
var writer = new OpenApiJsonWriter(outputStringWriter);
21632164
var expected =
21642165
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using FluentAssertions;
67
using Microsoft.OpenApi.Any;
@@ -104,7 +105,7 @@ public OpenApiExampleTests(ITestOutputHelper output)
104105
public void SerializeAdvancedExampleAsV3JsonWorks()
105106
{
106107
// Arrange
107-
var outputStringWriter = new StringWriter();
108+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
108109
var writer = new OpenApiJsonWriter(outputStringWriter);
109110
var expected =
110111
@"{
@@ -149,7 +150,7 @@ public void SerializeAdvancedExampleAsV3JsonWorks()
149150
public void SerializeReferencedExampleAsV3JsonWorks()
150151
{
151152
// Arrange
152-
var outputStringWriter = new StringWriter();
153+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
153154
var writer = new OpenApiJsonWriter(outputStringWriter);
154155
var expected =
155156
@"{
@@ -171,7 +172,7 @@ public void SerializeReferencedExampleAsV3JsonWorks()
171172
public void SerializeReferencedExampleAsV3JsonWithoutReferenceWorks()
172173
{
173174
// Arrange
174-
var outputStringWriter = new StringWriter();
175+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
175176
var writer = new OpenApiJsonWriter(outputStringWriter);
176177
var expected =
177178
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using FluentAssertions;
67
using Microsoft.OpenApi.Models;
@@ -49,7 +50,7 @@ public OpenApiHeaderTests(ITestOutputHelper output)
4950
public void SerializeAdvancedHeaderAsV3JsonWorks()
5051
{
5152
// Arrange
52-
var outputStringWriter = new StringWriter();
53+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
5354
var writer = new OpenApiJsonWriter(outputStringWriter);
5455
var expected =
5556
@"{
@@ -75,7 +76,7 @@ public void SerializeAdvancedHeaderAsV3JsonWorks()
7576
public void SerializeReferencedHeaderAsV3JsonWorks()
7677
{
7778
// Arrange
78-
var outputStringWriter = new StringWriter();
79+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
7980
var writer = new OpenApiJsonWriter(outputStringWriter);
8081
var expected =
8182
@"{
@@ -97,7 +98,7 @@ public void SerializeReferencedHeaderAsV3JsonWorks()
9798
public void SerializeReferencedHeaderAsV3JsonWithoutReferenceWorks()
9899
{
99100
// Arrange
100-
var outputStringWriter = new StringWriter();
101+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
101102
var writer = new OpenApiJsonWriter(outputStringWriter);
102103
var expected =
103104
@"{
@@ -123,7 +124,7 @@ public void SerializeReferencedHeaderAsV3JsonWithoutReferenceWorks()
123124
public void SerializeAdvancedHeaderAsV2JsonWorks()
124125
{
125126
// Arrange
126-
var outputStringWriter = new StringWriter();
127+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
127128
var writer = new OpenApiJsonWriter(outputStringWriter);
128129
var expected =
129130
@"{
@@ -147,7 +148,7 @@ public void SerializeAdvancedHeaderAsV2JsonWorks()
147148
public void SerializeReferencedHeaderAsV2JsonWorks()
148149
{
149150
// Arrange
150-
var outputStringWriter = new StringWriter();
151+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
151152
var writer = new OpenApiJsonWriter(outputStringWriter);
152153
var expected =
153154
@"{
@@ -169,7 +170,7 @@ public void SerializeReferencedHeaderAsV2JsonWorks()
169170
public void SerializeReferencedHeaderAsV2JsonWithoutReferenceWorks()
170171
{
171172
// Arrange
172-
var outputStringWriter = new StringWriter();
173+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
173174
var writer = new OpenApiJsonWriter(outputStringWriter);
174175
var expected =
175176
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using FluentAssertions;
67
using Microsoft.OpenApi.Any;
@@ -79,7 +80,7 @@ public OpenApiLinkTests(ITestOutputHelper output)
7980
public void SerializeAdvancedLinkAsV3JsonWorks()
8081
{
8182
// Arrange
82-
var outputStringWriter = new StringWriter();
83+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
8384
var writer = new OpenApiJsonWriter(outputStringWriter);
8485
var expected =
8586
@"{
@@ -111,7 +112,7 @@ public void SerializeAdvancedLinkAsV3JsonWorks()
111112
public void SerializeReferencedLinkAsV3JsonWorks()
112113
{
113114
// Arrange
114-
var outputStringWriter = new StringWriter();
115+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
115116
var writer = new OpenApiJsonWriter(outputStringWriter);
116117
var expected =
117118
@"{
@@ -133,7 +134,7 @@ public void SerializeReferencedLinkAsV3JsonWorks()
133134
public void SerializeReferencedLinkAsV3JsonWithoutReferenceWorks()
134135
{
135136
// Arrange
136-
var outputStringWriter = new StringWriter();
137+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
137138
var writer = new OpenApiJsonWriter(outputStringWriter);
138139
var expected =
139140
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
using System.Collections.Generic;
5+
using System.Globalization;
56
using System.IO;
67
using FluentAssertions;
78
using Microsoft.OpenApi.Extensions;
@@ -171,7 +172,7 @@ public void SerializeAdvancedParameterAsV3JsonWorks()
171172
public void SerializeReferencedParameterAsV3JsonWorks()
172173
{
173174
// Arrange
174-
var outputStringWriter = new StringWriter();
175+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
175176
var writer = new OpenApiJsonWriter(outputStringWriter);
176177
var expected =
177178
@"{
@@ -193,7 +194,7 @@ public void SerializeReferencedParameterAsV3JsonWorks()
193194
public void SerializeReferencedParameterAsV3JsonWithoutReferenceWorks()
194195
{
195196
// Arrange
196-
var outputStringWriter = new StringWriter();
197+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
197198
var writer = new OpenApiJsonWriter(outputStringWriter);
198199
var expected =
199200
@"{
@@ -216,7 +217,7 @@ public void SerializeReferencedParameterAsV3JsonWithoutReferenceWorks()
216217
public void SerializeReferencedParameterAsV2JsonWorks()
217218
{
218219
// Arrange
219-
var outputStringWriter = new StringWriter();
220+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
220221
var writer = new OpenApiJsonWriter(outputStringWriter);
221222
var expected =
222223
@"{
@@ -238,7 +239,7 @@ public void SerializeReferencedParameterAsV2JsonWorks()
238239
public void SerializeReferencedParameterAsV2JsonWithoutReferenceWorks()
239240
{
240241
// Arrange
241-
var outputStringWriter = new StringWriter();
242+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
242243
var writer = new OpenApiJsonWriter(outputStringWriter);
243244
var expected =
244245
@"{
@@ -261,7 +262,7 @@ public void SerializeReferencedParameterAsV2JsonWithoutReferenceWorks()
261262
public void SerializeParameterWithSchemaReferenceAsV2JsonWorks()
262263
{
263264
// Arrange
264-
var outputStringWriter = new StringWriter();
265+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
265266
var writer = new OpenApiJsonWriter(outputStringWriter);
266267
var expected =
267268
@"{
@@ -287,7 +288,7 @@ public void SerializeParameterWithSchemaReferenceAsV2JsonWorks()
287288
public void SerializeParameterWithSchemaTypeObjectAsV2JsonWorks()
288289
{
289290
// Arrange
290-
var outputStringWriter = new StringWriter();
291+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
291292
var writer = new OpenApiJsonWriter(outputStringWriter);
292293
var expected =
293294
@"{

test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System.Globalization;
45
using System.IO;
56
using FluentAssertions;
67
using Microsoft.OpenApi.Models;
@@ -61,7 +62,7 @@ public OpenApiRequestBodyTests(ITestOutputHelper output)
6162
public void SerializeAdvancedRequestBodyAsV3JsonWorks()
6263
{
6364
// Arrange
64-
var outputStringWriter = new StringWriter();
65+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
6566
var writer = new OpenApiJsonWriter(outputStringWriter);
6667
var expected =
6768
@"{
@@ -91,7 +92,7 @@ public void SerializeAdvancedRequestBodyAsV3JsonWorks()
9192
public void SerializeReferencedRequestBodyAsV3JsonWorks()
9293
{
9394
// Arrange
94-
var outputStringWriter = new StringWriter();
95+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
9596
var writer = new OpenApiJsonWriter(outputStringWriter);
9697
var expected =
9798
@"{
@@ -113,7 +114,7 @@ public void SerializeReferencedRequestBodyAsV3JsonWorks()
113114
public void SerializeReferencedRequestBodyAsV3JsonWithoutReferenceWorks()
114115
{
115116
// Arrange
116-
var outputStringWriter = new StringWriter();
117+
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
117118
var writer = new OpenApiJsonWriter(outputStringWriter);
118119
var expected =
119120
@"{

0 commit comments

Comments
 (0)