diff --git a/src/Refitter.SourceGenerator.Tests/Build/ProjectFileContents.cs b/src/Refitter.SourceGenerator.Tests/Build/ProjectFileContents.cs
index 6360e50db..ed27886ec 100644
--- a/src/Refitter.SourceGenerator.Tests/Build/ProjectFileContents.cs
+++ b/src/Refitter.SourceGenerator.Tests/Build/ProjectFileContents.cs
@@ -9,14 +9,14 @@ public static class ProjectFileContents
true
-
+
-
-
-
-
+
+
+
+
@@ -36,14 +36,14 @@ public static class ProjectFileContents
true
-
+
-
-
-
-
+
+
+
+
diff --git a/src/Refitter.SourceGenerator.Tests/Refitter.SourceGenerator.Tests.csproj b/src/Refitter.SourceGenerator.Tests/Refitter.SourceGenerator.Tests.csproj
index edb56da92..81bad3298 100644
--- a/src/Refitter.SourceGenerator.Tests/Refitter.SourceGenerator.Tests.csproj
+++ b/src/Refitter.SourceGenerator.Tests/Refitter.SourceGenerator.Tests.csproj
@@ -21,7 +21,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/src/Refitter.Tests/Build/BuildHelper.cs b/src/Refitter.Tests/Build/BuildHelper.cs
index b37af55ff..cf73edca0 100644
--- a/src/Refitter.Tests/Build/BuildHelper.cs
+++ b/src/Refitter.Tests/Build/BuildHelper.cs
@@ -19,6 +19,7 @@ public static bool BuildCSharp(string targetFramework, params string[] generated
var projectContent = targetFramework switch
{
"net9.0" => ProjectFileContents.Net90App,
+ "net10.0" => ProjectFileContents.Net100App,
_ => ProjectFileContents.Net80App
};
File.WriteAllText(projectFile, projectContent);
diff --git a/src/Refitter.Tests/Build/ProjectFileContents.cs b/src/Refitter.Tests/Build/ProjectFileContents.cs
index 730fb25d9..c222bbc9c 100644
--- a/src/Refitter.Tests/Build/ProjectFileContents.cs
+++ b/src/Refitter.Tests/Build/ProjectFileContents.cs
@@ -9,14 +9,14 @@ public static class ProjectFileContents
true
-
-
-
+
+
+
-
-
-
-
+
+
+
+
@@ -36,14 +36,41 @@ public static class ProjectFileContents
true
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+";
+
+ public const string Net100App = @"
+
+
+ net10.0
+ true
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Refitter.Tests/Scenarios/GenerateJsonSerializerContextPolymorphismTests.cs b/src/Refitter.Tests/Scenarios/GenerateJsonSerializerContextPolymorphismTests.cs
index 234c94513..2b36b8715 100644
--- a/src/Refitter.Tests/Scenarios/GenerateJsonSerializerContextPolymorphismTests.cs
+++ b/src/Refitter.Tests/Scenarios/GenerateJsonSerializerContextPolymorphismTests.cs
@@ -64,7 +64,7 @@ public class GenerateJsonSerializerContextPolymorphismTests
packages
-
+
""";
diff --git a/src/Refitter.Tests/Scenarios/Refit11CompatibilityTests.cs b/src/Refitter.Tests/Scenarios/Refit11CompatibilityTests.cs
new file mode 100644
index 000000000..4d138a368
--- /dev/null
+++ b/src/Refitter.Tests/Scenarios/Refit11CompatibilityTests.cs
@@ -0,0 +1,306 @@
+using FluentAssertions;
+using Refitter.Core;
+using Refitter.Tests.Build;
+using Refitter.Tests.Resources;
+using Refitter.Tests.TestUtilities;
+using TUnit.Core;
+
+namespace Refitter.Tests.Scenarios;
+
+public class Refit11CompatibilityTests
+{
+ private const string Refit11TargetFramework = "net10.0";
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV2, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var generatedCode = await GenerateCode(version, filename);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_IApiResponse_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ ReturnIApiResponse = true
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_IObservableResponse_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ ReturnIObservable = true
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Multiple_Interfaces_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ MultipleInterfaces = MultipleInterfaces.ByEndpoint
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Multiple_Interfaces_ByTag_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ MultipleInterfaces = MultipleInterfaces.ByTag
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Dependency_Injection_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ DependencyInjectionSettings = new DependencyInjectionSettings
+ {
+ BaseUrl = "https://petstore3.swagger.io/api/v3"
+ }
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Polly_Error_Handler_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ DependencyInjectionSettings = new DependencyInjectionSettings
+ {
+ BaseUrl = "https://petstore3.swagger.io/api/v3",
+ TransientErrorHandler = TransientErrorHandler.Polly
+ }
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Microsoft_Http_Resilience_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ DependencyInjectionSettings = new DependencyInjectionSettings
+ {
+ BaseUrl = "https://petstore3.swagger.io/api/v3",
+ TransientErrorHandler = TransientErrorHandler.HttpResilience
+ }
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Cancellation_Tokens_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ UseCancellationTokens = true
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Operation_Headers_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ GenerateOperationHeaders = true
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3WithBearerAuthenticationHeaders, "SwaggerPetstoreWithBearerAuthenticationHeaders.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3WithBearerAuthenticationHeaders, "SwaggerPetstoreWithBearerAuthenticationHeaders.yaml")]
+ public async Task Can_Build_Generated_Code_With_Bearer_Authentication_Method_Style_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ AuthenticationHeaderStyle = AuthenticationHeaderStyle.Method
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3WithBearerAuthenticationHeaders, "SwaggerPetstoreWithBearerAuthenticationHeaders.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3WithBearerAuthenticationHeaders, "SwaggerPetstoreWithBearerAuthenticationHeaders.yaml")]
+ public async Task Can_Build_Generated_Code_With_Bearer_Authentication_Parameter_Style_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ AuthenticationHeaderStyle = AuthenticationHeaderStyle.Parameter
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Immutable_Records_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ ImmutableRecords = true
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_Internal_Type_Accessibility_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ TypeAccessibility = TypeAccessibility.Internal
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_NonNullable_Reference_Types_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ CodeGeneratorSettings = new CodeGeneratorSettings
+ {
+ GenerateNullableReferenceTypes = true,
+ GenerateOptionalPropertiesAsNullable = true
+ }
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ [Test]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreJsonV3, "SwaggerPetstore.json")]
+ [Arguments(SampleOpenSpecifications.SwaggerPetstoreYamlV3, "SwaggerPetstore.yaml")]
+ public async Task Can_Build_Generated_Code_With_JsonSerializerContext_Using_Refit_11(SampleOpenSpecifications version, string filename)
+ {
+ var settings = new RefitGeneratorSettings
+ {
+ GenerateJsonSerializerContext = true,
+ Naming = new NamingSettings
+ {
+ UseOpenApiTitle = false,
+ InterfaceName = "ISwaggerPetstore"
+ }
+ };
+ var generatedCode = await GenerateCode(version, filename, settings);
+ BuildHelper
+ .BuildCSharp(Refit11TargetFramework, generatedCode)
+ .Should()
+ .BeTrue();
+ }
+
+ private static async Task GenerateCode(
+ SampleOpenSpecifications version,
+ string filename,
+ RefitGeneratorSettings? settings = null)
+ {
+ var swaggerFile = await TestFile.CreateSwaggerFile(EmbeddedResources.GetSwaggerPetstore(version), filename);
+ if (settings is null)
+ {
+ settings = new RefitGeneratorSettings { OpenApiPath = swaggerFile };
+ }
+ else
+ {
+ settings.OpenApiPath = swaggerFile;
+ }
+
+ var sut = await RefitGenerator.CreateAsync(settings);
+ return sut.Generate();
+ }
+}
diff --git a/test/ConsoleApp/Directory.Build.props b/test/ConsoleApp/Directory.Build.props
index a42db01a2..2c476dd28 100644
--- a/test/ConsoleApp/Directory.Build.props
+++ b/test/ConsoleApp/Directory.Build.props
@@ -31,8 +31,8 @@
-
-
+
+
diff --git a/test/HelloWorld/HelloWorld/HelloWorld.csproj b/test/HelloWorld/HelloWorld/HelloWorld.csproj
index 2af4c2d7a..8d4b78bcc 100644
--- a/test/HelloWorld/HelloWorld/HelloWorld.csproj
+++ b/test/HelloWorld/HelloWorld/HelloWorld.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/test/MSBuild/Refitter.MSBuild.Tests.csproj b/test/MSBuild/Refitter.MSBuild.Tests.csproj
index a2db32fb0..18b574b83 100644
--- a/test/MSBuild/Refitter.MSBuild.Tests.csproj
+++ b/test/MSBuild/Refitter.MSBuild.Tests.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/test/MinimalApi/MinimalApi.csproj b/test/MinimalApi/MinimalApi.csproj
index 51ae68f1b..106105182 100644
--- a/test/MinimalApi/MinimalApi.csproj
+++ b/test/MinimalApi/MinimalApi.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/test/MultipleFiles/Client/Client.csproj b/test/MultipleFiles/Client/Client.csproj
index 448b5c810..0a184f6ce 100644
--- a/test/MultipleFiles/Client/Client.csproj
+++ b/test/MultipleFiles/Client/Client.csproj
@@ -6,8 +6,8 @@
-
-
+
+