Skip to content

Commit aeade9e

Browse files
committed
Merge branch 'feature/net50'
+semver: breaking
2 parents e49f606 + c0f1313 commit aeade9e

16 files changed

+241
-161
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Reflection;
3+
using AutoFixture;
4+
using AutoFixture.Xunit2;
5+
6+
namespace BencodeNET.Tests.AutoFixture
7+
{
8+
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
9+
public class RepeatCountAttribute : CustomizeAttribute
10+
{
11+
private int Count { get; }
12+
13+
public RepeatCountAttribute(int count)
14+
{
15+
Count = count;
16+
}
17+
18+
public override ICustomization GetCustomization(ParameterInfo parameter)
19+
{
20+
return new RepeatCountCustomization(Count);
21+
}
22+
}
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using AutoFixture;
2+
3+
namespace BencodeNET.Tests.AutoFixture
4+
{
5+
public class RepeatCountCustomization : ICustomization
6+
{
7+
private int Count { get; }
8+
9+
public RepeatCountCustomization(int count)
10+
{
11+
Count = count;
12+
}
13+
14+
public void Customize(IFixture fixture)
15+
{
16+
fixture.RepeatCount = Count;
17+
}
18+
}
19+
}

BencodeNET.Tests/AutoMockedDataAttribute.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,31 @@
55

66
namespace BencodeNET.Tests
77
{
8-
public class AutoMockedDataAttribute : AutoDataAttribute
8+
public class AutoMockedDataAttribute : CompositeDataAttribute
99
{
1010
public AutoMockedDataAttribute()
11-
: base(() => new Fixture().Customize(new AutoNSubstituteCustomization {ConfigureMembers = true}))
11+
: this(new BaseAutoMockedDataAttribute())
1212
{ }
13-
}
1413

15-
public class InlineAutoMockedDataAttribute : CompositeDataAttribute
16-
{
17-
public InlineAutoMockedDataAttribute()
18-
: this(new AutoMockedDataAttribute())
14+
public AutoMockedDataAttribute(params object[] values)
15+
: this(new BaseAutoMockedDataAttribute(), values)
1916
{ }
2017

21-
public InlineAutoMockedDataAttribute(params object[] values)
22-
: this(new AutoMockedDataAttribute(), values)
18+
private AutoMockedDataAttribute(BaseAutoMockedDataAttribute baseAutoDataAttribute, params object[] values)
19+
: base(new InlineDataAttribute(values), baseAutoDataAttribute)
2320
{ }
2421

25-
public InlineAutoMockedDataAttribute(AutoMockedDataAttribute autoDataAttributeAttribute, params object[] values)
26-
: base(new InlineDataAttribute(values), autoDataAttributeAttribute)
27-
{ }
22+
private class BaseAutoMockedDataAttribute : AutoDataAttribute
23+
{
24+
public BaseAutoMockedDataAttribute()
25+
: base(Configure)
26+
{
27+
}
28+
29+
private static IFixture Configure()
30+
{
31+
return new Fixture().Customize(new AutoNSubstituteCustomization { ConfigureMembers = true });
32+
}
33+
}
2834
}
2935
}
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net472;netcoreapp2.0;netcoreapp2.2;netcoreapp3.0</TargetFrameworks>
5-
<LangVersion>7.3</LangVersion>
4+
<TargetFrameworks>net472;netcoreapp2.1;netcoreapp3.1;net5.0</TargetFrameworks>
5+
<LangVersion>9</LangVersion>
66
</PropertyGroup>
77

88
<ItemGroup>
@@ -15,14 +15,19 @@
1515
</ItemGroup>
1616

1717
<ItemGroup>
18-
<PackageReference Include="AutoFixture" Version="4.11.0" />
19-
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="4.11.0" />
20-
<PackageReference Include="AutoFixture.Xunit2" Version="4.11.0" />
21-
<PackageReference Include="FluentAssertions" Version="5.9.0" />
22-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
23-
<PackageReference Include="NSubstitute" Version="4.2.1" />
18+
<PackageReference Include="AutoFixture" Version="4.15.0" />
19+
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="4.15.0" />
20+
<PackageReference Include="AutoFixture.Xunit2" Version="4.15.0" />
21+
<PackageReference Include="FluentAssertions" Version="5.10.3" />
22+
<PackageReference Include="FluentAssertions.Analyzers" Version="0.11.4" />
23+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
24+
<PackageReference Include="NSubstitute" Version="4.2.2" />
25+
<PackageReference Include="NSubstitute.Analyzers.CSharp" Version="1.0.14" />
2426
<PackageReference Include="xunit" Version="2.4.1" />
25-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
27+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
28+
<PrivateAssets>all</PrivateAssets>
29+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
30+
</PackageReference>
2631
</ItemGroup>
2732

2833
</Project>

BencodeNET.Tests/Torrents/TorrentParserTests.cs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using BencodeNET.IO;
55
using BencodeNET.Objects;
66
using BencodeNET.Parsing;
7+
using BencodeNET.Tests.AutoFixture;
78
using BencodeNET.Torrents;
89
using FluentAssertions;
910
using NSubstitute;
@@ -129,10 +130,10 @@ public void CreationDate_InvalidValue_ReturnsEpoch()
129130
}
130131

131132
[Theory]
132-
[InlineAutoMockedData("utf8")]
133-
[InlineAutoMockedData("UTF8")]
134-
[InlineAutoMockedData("utf-8")]
135-
[InlineAutoMockedData("UTF-8")]
133+
[AutoMockedData("utf8")]
134+
[AutoMockedData("UTF8")]
135+
[AutoMockedData("utf-8")]
136+
[AutoMockedData("UTF-8")]
136137
public void Encoding_UTF8_CanBeParsed(string encoding)
137138
{
138139
// Arrange
@@ -148,8 +149,8 @@ public void Encoding_UTF8_CanBeParsed(string encoding)
148149
}
149150

150151
[Theory]
151-
[InlineAutoMockedData("ascii")]
152-
[InlineAutoMockedData("ASCII")]
152+
[AutoMockedData("ascii")]
153+
[AutoMockedData("ASCII")]
153154
public void Encoding_ASCII_CanBeParsed(string encoding)
154155
{
155156
// Arrange
@@ -165,10 +166,10 @@ public void Encoding_ASCII_CanBeParsed(string encoding)
165166
}
166167

167168
[Theory]
168-
[InlineAutoMockedData("")]
169-
[InlineAutoMockedData("asdf")]
170-
[InlineAutoMockedData("1")]
171-
[InlineAutoMockedData("UTF 8")]
169+
[AutoMockedData("")]
170+
[AutoMockedData("asdf")]
171+
[AutoMockedData("1")]
172+
[AutoMockedData("UTF 8")]
172173
public void Encoding_InvalidValidAsNull(string encoding)
173174
{
174175
// Arrange
@@ -202,27 +203,28 @@ public void Info_PieceLength_IsParsed(long pieceSize)
202203

203204
[Theory]
204205
[AutoMockedData]
205-
public void Info_Pieces_IsParsed(byte[] pieces)
206+
public void Info_Pieces_IsParsed([RepeatCount(20)] byte[] pieces)
206207
{
207208
// Arrange
208209
ParsedData = ValidSingleFileTorrentData;
209210
var info = ParsedData.Get<BDictionary>(TorrentFields.Info);
210211
info[TorrentInfoFields.Pieces] = new BString(pieces);
212+
pieces.Should().HaveCount(20);
211213

212214
// Act
213215
var parser = new TorrentParser(BencodeParser);
214-
var torrent = parser.Parse((BencodeReader)null);
216+
var torrent = parser.Parse((BencodeReader) null);
215217

216218
// Assert
217219
torrent.Pieces.Should().Equal(pieces);
218220
}
219221

220222
[Theory]
221-
[InlineAutoMockedData(-1, false)]
222-
[InlineAutoMockedData(0, false)]
223-
[InlineAutoMockedData(1, true)]
224-
[InlineAutoMockedData(42, false)]
225-
[InlineAutoMockedData(12345, false)]
223+
[AutoMockedData(-1, false)]
224+
[AutoMockedData(0, false)]
225+
[AutoMockedData(1, true)]
226+
[AutoMockedData(42, false)]
227+
[AutoMockedData(12345, false)]
226228
public void Info_Private_ShouldBeTrueOnlyIfValueIsOne(int value, bool expectedResult)
227229
{
228230
// Arrange

BencodeNET.Tests/Torrents/TorrentTests.cs

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Text;
4+
using AutoFixture.Xunit2;
45
using BencodeNET.Exceptions;
56
using BencodeNET.Objects;
67
using BencodeNET.Torrents;
@@ -135,6 +136,27 @@ public void DisplayNameUtf8_UnknownFileMode_ThrowsBencodeException()
135136
act.Should().Throw<BencodeException>();
136137
}
137138

139+
[Theory]
140+
[AutoMockedData]
141+
public void Pieces_Setter_NullValue_ThrowsArgumentNullException([NoAutoProperties] Torrent torrent)
142+
{
143+
Action act = () => torrent.Pieces = null;
144+
145+
act.Should().ThrowExactly<ArgumentNullException>();
146+
}
147+
148+
[Theory]
149+
[AutoMockedData]
150+
public void Pieces_Setter_NotMultipleOf20_ThrowsArgumentException([NoAutoProperties] Torrent torrent)
151+
{
152+
var pieces = new byte[] { 66, 115, 135, 19, 149, 125, 229, 85, 68, 117, 252, 185, 243, 247, 139, 38, 11, 37, 60 };
153+
pieces.Should().NotHaveCount(20);
154+
155+
Action act = () => torrent.Pieces = pieces;
156+
157+
act.Should().ThrowExactly<ArgumentException>();
158+
}
159+
138160
[Fact]
139161
public void PiecesAsHexString_Get_ReturnsHexUppercaseWithoutDashes()
140162
{
@@ -167,9 +189,9 @@ public void PiecesAsHexString_Set_NullThrowsArgumentException()
167189
}
168190

169191
[Theory]
170-
[InlineAutoMockedData("qwer")]
171-
[InlineAutoMockedData("123456789012345678901234567890123456789")]
172-
[InlineAutoMockedData("12345678901234567890123456789012345678901")]
192+
[AutoMockedData("qwer")]
193+
[AutoMockedData("123456789012345678901234567890123456789")]
194+
[AutoMockedData("12345678901234567890123456789012345678901")]
173195
public void PiecesAsHexString_Set_LengthNotMultipleOf40ShouldThrowArgumentException(string value)
174196
{
175197
var torrent = new Torrent();
@@ -178,15 +200,15 @@ public void PiecesAsHexString_Set_LengthNotMultipleOf40ShouldThrowArgumentExcept
178200
}
179201

180202
[Theory]
181-
[InlineAutoMockedData("a")]
182-
[InlineAutoMockedData("b")]
183-
[InlineAutoMockedData("c")]
184-
[InlineAutoMockedData("G")]
185-
[InlineAutoMockedData("H")]
186-
[InlineAutoMockedData("T")]
187-
[InlineAutoMockedData(".")]
188-
[InlineAutoMockedData("*")]
189-
[InlineAutoMockedData("[")]
203+
[AutoMockedData("a")]
204+
[AutoMockedData("b")]
205+
[AutoMockedData("c")]
206+
[AutoMockedData("G")]
207+
[AutoMockedData("H")]
208+
[AutoMockedData("T")]
209+
[AutoMockedData(".")]
210+
[AutoMockedData("*")]
211+
[AutoMockedData("[")]
190212
public void PiecesAsHexString_Set_ValueWithNonUppercaseHexCharacterShouldThrowArgumentException(string value)
191213
{
192214
var torrent = new Torrent();

BencodeNET/BencodeNET.csproj

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.0;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
5-
<LangVersion>7.3</LangVersion>
4+
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp2.1;net5.0</TargetFrameworks>
5+
<LangVersion>9</LangVersion>
66
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
77
<GenerateDocumentationFile>True</GenerateDocumentationFile>
88
<CodeAnalysisRuleSet>BencodeNET.ruleset</CodeAnalysisRuleSet>
@@ -38,17 +38,22 @@
3838

3939
<!--Dev dependencies -->
4040
<ItemGroup>
41-
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.4.16" PrivateAssets="All" />
41+
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.8.55" PrivateAssets="All" />
4242
</ItemGroup>
4343

44-
<!-- Shared dependencies -->
45-
<ItemGroup>
44+
<!-- Non .NET 5.0 dependencies -->
45+
<ItemGroup Condition=" '$(TargetFramework)' != 'net5.0' ">
4646
<PackageReference Include="System.IO.Pipelines" Version="4.6.0" />
4747
</ItemGroup>
4848

49+
<!-- .NET 5.0 dependencies -->
50+
<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">
51+
<PackageReference Include="System.IO.Pipelines" Version="5.0.1" />
52+
</ItemGroup>
53+
4954
<!-- .NET Standard 2.0 dependencies -->
5055
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
51-
<PackageReference Include="System.Buffers" Version="4.5.0" />
56+
<PackageReference Include="System.Buffers" Version="4.5.1" />
5257
</ItemGroup>
5358

5459
</Project>

BencodeNET/Objects/BString.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,7 @@ protected override void EncodeObject(PipeWriter writer)
122122

123123
public static bool operator ==(BString first, BString second)
124124
{
125-
if (first is null)
126-
return second is null;
127-
128-
return first.Equals(second);
125+
return first?.Equals(second) ?? second is null;
129126
}
130127

131128
public static bool operator !=(BString first, BString second) => !(first == second);
@@ -173,7 +170,7 @@ public override string ToString()
173170
/// </returns>
174171
public string ToString(Encoding encoding)
175172
{
176-
encoding = encoding ?? _encoding;
173+
encoding ??= _encoding;
177174
return encoding.GetString(Value.Span);
178175
}
179176
}

0 commit comments

Comments
 (0)