Skip to content

Commit 9079f4b

Browse files
authored
Feature : Add Net 8.0 (#347)
1 parent 653aed1 commit 9079f4b

13 files changed

+155
-87
lines changed

src/Directory.build.props

+7-7
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@
2727
</PropertyGroup>
2828

2929
<ItemGroup Condition="'$(IsTestProject)' != 'true'">
30-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
30+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
3131
</ItemGroup>
3232

3333
<ItemGroup Condition="'$(IsTestProject)' == 'true'">
3434
<PackageReference Include="ReactiveUI.Testing" Version="19.*" />
35-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
36-
<PackageReference Include="xunit" Version="2.6.1" />
37-
<PackageReference Include="xunit.runner.console" Version="2.6.1" />
38-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
35+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
36+
<PackageReference Include="xunit" Version="2.6.2" />
37+
<PackageReference Include="xunit.runner.console" Version="2.6.2" />
38+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4" />
3939
<PackageReference Include="Xunit.StaFact" Version="1.1.11" />
40-
<PackageReference Include="Verify.Xunit" Version="22.1.4" />
40+
<PackageReference Include="Verify.Xunit" Version="22.5.0" />
4141
<PackageReference Include="FluentAssertions" Version="6.12.0" />
4242
<PackageReference Include="PublicApiGenerator" Version="11.0.0" />
4343
<PackageReference Include="coverlet.msbuild" Version="6.0.0" PrivateAssets="All" />
@@ -52,7 +52,7 @@
5252
<ItemGroup>
5353
<PackageReference Include="Nerdbank.GitVersioning" Version="3.6.133" PrivateAssets="all" />
5454
<PackageReference Include="stylecop.analyzers" Version="1.2.0-beta.507" PrivateAssets="all" />
55-
<PackageReference Include="Roslynator.Analyzers" Version="4.6.1" PrivateAssets="All" />
55+
<PackageReference Include="Roslynator.Analyzers" Version="4.6.2" PrivateAssets="All" />
5656
</ItemGroup>
5757

5858
<ItemGroup>

src/Directory.build.targets

-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
77
<DefineConstants>$(DefineConstants);NET_45;XAML</DefineConstants>
88
</PropertyGroup>
9-
<PropertyGroup Condition="$(TargetFramework.StartsWith('uap'))">
10-
<DefineConstants>$(DefineConstants);NETFX_CORE;XAML;WINDOWS_UWP</DefineConstants>
11-
</PropertyGroup>
129
<PropertyGroup Condition="$(TargetFramework.StartsWith('Xamarin.iOS'))">
1310
<DefineConstants>$(DefineConstants);MONO;UIKIT;COCOA</DefineConstants>
1411
</PropertyGroup>

src/Fusillade.Tests/API/ApiApprovalBase.cs

-48
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v7.0", FrameworkDisplayName=".NET 7.0")]
2+
namespace Fusillade
3+
{
4+
public interface IRequestCache
5+
{
6+
System.Threading.Tasks.Task<byte[]> Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct);
7+
System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct);
8+
}
9+
public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler
10+
{
11+
protected LimitingHttpMessageHandler() { }
12+
protected LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { }
13+
public abstract void ResetLimit(long? maxBytesToRead = default);
14+
}
15+
public static class NetCache
16+
{
17+
public static System.Net.Http.HttpMessageHandler Background { get; set; }
18+
public static System.Net.Http.HttpMessageHandler Offline { get; set; }
19+
public static Punchclock.OperationQueue OperationQueue { get; set; }
20+
public static Fusillade.IRequestCache? RequestCache { get; set; }
21+
public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; }
22+
public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; }
23+
}
24+
public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler
25+
{
26+
public OfflineHttpMessageHandler(System.Func<System.Net.Http.HttpRequestMessage, string, System.Threading.CancellationToken, System.Threading.Tasks.Task<byte[]>>? retrieveBodyFunc) { }
27+
protected override System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { }
28+
}
29+
public enum Priority
30+
{
31+
Explicit = 0,
32+
Speculative = 10,
33+
Background = 20,
34+
UserInitiated = 100,
35+
}
36+
public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler
37+
{
38+
public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func<System.Net.Http.HttpRequestMessage, System.Net.Http.HttpResponseMessage, string, System.Threading.CancellationToken, System.Threading.Tasks.Task>? cacheResultFunc = null) { }
39+
public override void ResetLimit(long? maxBytesToRead = default) { }
40+
protected override System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { }
41+
public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { }
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName=".NET 8.0")]
2+
namespace Fusillade
3+
{
4+
public interface IRequestCache
5+
{
6+
System.Threading.Tasks.Task<byte[]> Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct);
7+
System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct);
8+
}
9+
public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler
10+
{
11+
protected LimitingHttpMessageHandler() { }
12+
protected LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { }
13+
public abstract void ResetLimit(long? maxBytesToRead = default);
14+
}
15+
public static class NetCache
16+
{
17+
public static System.Net.Http.HttpMessageHandler Background { get; set; }
18+
public static System.Net.Http.HttpMessageHandler Offline { get; set; }
19+
public static Punchclock.OperationQueue OperationQueue { get; set; }
20+
public static Fusillade.IRequestCache? RequestCache { get; set; }
21+
public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; }
22+
public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; }
23+
}
24+
public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler
25+
{
26+
public OfflineHttpMessageHandler(System.Func<System.Net.Http.HttpRequestMessage, string, System.Threading.CancellationToken, System.Threading.Tasks.Task<byte[]>>? retrieveBodyFunc) { }
27+
protected override System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { }
28+
}
29+
public enum Priority
30+
{
31+
Explicit = 0,
32+
Speculative = 10,
33+
Background = 20,
34+
UserInitiated = 100,
35+
}
36+
public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler
37+
{
38+
public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func<System.Net.Http.HttpRequestMessage, System.Net.Http.HttpResponseMessage, string, System.Threading.CancellationToken, System.Threading.Tasks.Task>? cacheResultFunc = null) { }
39+
public override void ResetLimit(long? maxBytesToRead = default) { }
40+
protected override System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { }
41+
public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { }
42+
}
43+
}

src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.Net4_7.verified.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace Fusillade
88
}
99
public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler
1010
{
11-
public LimitingHttpMessageHandler() { }
12-
public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { }
11+
protected LimitingHttpMessageHandler() { }
12+
protected LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { }
1313
public abstract void ResetLimit(long? maxBytesToRead = default);
1414
}
1515
public static class NetCache
@@ -28,10 +28,10 @@ namespace Fusillade
2828
}
2929
public enum Priority
3030
{
31+
Explicit = 0,
3132
Speculative = 10,
32-
UserInitiated = 100,
3333
Background = 20,
34-
Explicit = 0,
34+
UserInitiated = 100,
3535
}
3636
public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler
3737
{

src/Fusillade.Tests/API/ApiApprovalTests.cs

+4-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// See the LICENSE file in the project root for full license information.
55

66
using System.Diagnostics.CodeAnalysis;
7+
using System.Threading.Tasks;
78
using VerifyXunit;
89
using Xunit;
910

@@ -14,15 +15,13 @@ namespace Fusillade.APITests
1415
/// </summary>
1516
[ExcludeFromCodeCoverage]
1617
[UsesVerify]
17-
public class ApiApprovalTests : ApiApprovalBase
18+
public class ApiApprovalTests
1819
{
1920
/// <summary>
2021
/// Tests to make sure the akavache project is approved.
2122
/// </summary>
23+
/// <returns>A <see cref="Task"/> representing the asynchronous unit test.</returns>
2224
[Fact]
23-
public void FusilladeTests()
24-
{
25-
CheckApproval(typeof(OfflineHttpMessageHandler).Assembly);
26-
}
25+
public Task FusilladeTests() => typeof(OfflineHttpMessageHandler).Assembly.CheckApproval(["Fusillade"]);
2726
}
2827
}
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright (c) 2021 .NET Foundation and Contributors. All rights reserved.
2+
// Licensed to the .NET Foundation under one or more agreements.
3+
// The .NET Foundation licenses this file to you under the MIT license.
4+
// See the LICENSE file in the project root for full license information.
5+
6+
using System;
7+
using System.Diagnostics.CodeAnalysis;
8+
using System.Reflection;
9+
using System.Runtime.CompilerServices;
10+
using System.Threading.Tasks;
11+
using PublicApiGenerator;
12+
using VerifyXunit;
13+
14+
namespace Fusillade.APITests;
15+
16+
/// <summary>
17+
/// A helper for doing API approvals.
18+
/// </summary>
19+
public static class ApiExtensions
20+
{
21+
/// <summary>
22+
/// Checks to make sure the API is approved.
23+
/// </summary>
24+
/// <param name="assembly">The assembly that is being checked.</param>
25+
/// <param name="namespaces">The namespaces.</param>
26+
/// <param name="filePath">The caller file path.</param>
27+
/// <returns>
28+
/// A Task.
29+
/// </returns>
30+
public static async Task CheckApproval(this Assembly assembly, string[] namespaces, [CallerFilePath] string filePath = "")
31+
{
32+
var generatorOptions = new ApiGeneratorOptions { AllowNamespacePrefixes = namespaces };
33+
var apiText = assembly.GeneratePublicApi(generatorOptions);
34+
var result = await Verifier.Verify(apiText, null, filePath)
35+
.UniqueForRuntimeAndVersion()
36+
.ScrubEmptyLines()
37+
.ScrubLines(l =>
38+
l.StartsWith("[assembly: AssemblyVersion(", StringComparison.InvariantCulture) ||
39+
l.StartsWith("[assembly: AssemblyFileVersion(", StringComparison.InvariantCulture) ||
40+
l.StartsWith("[assembly: AssemblyInformationalVersion(", StringComparison.InvariantCulture) ||
41+
l.StartsWith("[assembly: System.Reflection.AssemblyMetadata(", StringComparison.InvariantCulture));
42+
}
43+
}

src/Fusillade.Tests/Fusillade.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>net6.0</TargetFrameworks>
3+
<TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
44
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">$(TargetFrameworks);net472</TargetFrameworks>
55
<NoWarn>$(NoWarn);1591;CA1707;SA1633</NoWarn>
66
<IsPackable>false</IsPackable>

src/Fusillade.Tests/Http/BaseHttpSchedulerSharedTests.cs

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ namespace Fusillade.Tests
1414
public class BaseHttpSchedulerSharedTests : HttpSchedulerSharedTests
1515
{
1616
/// <inheritdoc/>
17-
protected override LimitingHttpMessageHandler CreateFixture(HttpMessageHandler innerHandler)
18-
{
19-
return new RateLimitedHttpMessageHandler(innerHandler, Priority.UserInitiated, opQueue: new OperationQueue(4));
20-
}
17+
protected override LimitingHttpMessageHandler CreateFixture(HttpMessageHandler innerHandler) =>
18+
new RateLimitedHttpMessageHandler(innerHandler, Priority.UserInitiated, opQueue: new OperationQueue(4));
2119
}
2220
}

src/Fusillade.Tests/Http/TestHttpMessageHandler.cs

+6-13
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,12 @@ namespace Fusillade.Tests
1515
/// <summary>
1616
/// Tests the main http scheduler.
1717
/// </summary>
18-
public class TestHttpMessageHandler : HttpMessageHandler
18+
/// <remarks>
19+
/// Initializes a new instance of the <see cref="TestHttpMessageHandler"/> class.
20+
/// </remarks>
21+
/// <param name="createResult">Creates a http response.</param>
22+
public class TestHttpMessageHandler(Func<HttpRequestMessage, IObservable<HttpResponseMessage>> createResult) : HttpMessageHandler
1923
{
20-
private readonly Func<HttpRequestMessage, IObservable<HttpResponseMessage>> _block;
21-
22-
/// <summary>
23-
/// Initializes a new instance of the <see cref="TestHttpMessageHandler"/> class.
24-
/// </summary>
25-
/// <param name="createResult">Creates a http response.</param>
26-
public TestHttpMessageHandler(Func<HttpRequestMessage, IObservable<HttpResponseMessage>> createResult)
27-
{
28-
_block = createResult;
29-
}
30-
3124
/// <inheritdoc/>
3225
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
3326
{
@@ -36,7 +29,7 @@ protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage reques
3629
return Observable.Throw<HttpResponseMessage>(new OperationCanceledException()).ToTask();
3730
}
3831

39-
return _block(request).ToTask(cancellationToken);
32+
return createResult(request).ToTask(cancellationToken);
4033
}
4134
}
4235
}

src/Fusillade/Fusillade.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.0;net6.0;net7.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.0;net6.0;net7.0;net8.0</TargetFrameworks>
44
<PackageId>fusillade</PackageId>
55
<Nullable>enable</Nullable>
66
<WarningsAsErrors>CS8625;CS8604;CS8600;CS8614;CS8603;CS8618;CS8619</WarningsAsErrors>

src/global.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "7.0.400",
3+
"version": "8.0.10",
44
"rollForward": "latestMinor"
55
},
66
"msbuild-sdks": {

0 commit comments

Comments
 (0)