Skip to content

Commit

Permalink
Merge branch 'feature/net50'
Browse files Browse the repository at this point in the history
+semver: breaking
  • Loading branch information
Krusen committed Jan 23, 2021
2 parents e49f606 + c0f1313 commit aeade9e
Show file tree
Hide file tree
Showing 16 changed files with 241 additions and 161 deletions.
23 changes: 23 additions & 0 deletions BencodeNET.Tests/AutoFixture/RepeatCountAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;

namespace BencodeNET.Tests.AutoFixture
{
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
public class RepeatCountAttribute : CustomizeAttribute
{
private int Count { get; }

public RepeatCountAttribute(int count)
{
Count = count;
}

public override ICustomization GetCustomization(ParameterInfo parameter)
{
return new RepeatCountCustomization(Count);
}
}
}
19 changes: 19 additions & 0 deletions BencodeNET.Tests/AutoFixture/RepeatCountCustomization.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using AutoFixture;

namespace BencodeNET.Tests.AutoFixture
{
public class RepeatCountCustomization : ICustomization
{
private int Count { get; }

public RepeatCountCustomization(int count)
{
Count = count;
}

public void Customize(IFixture fixture)
{
fixture.RepeatCount = Count;
}
}
}
30 changes: 18 additions & 12 deletions BencodeNET.Tests/AutoMockedDataAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,31 @@

namespace BencodeNET.Tests
{
public class AutoMockedDataAttribute : AutoDataAttribute
public class AutoMockedDataAttribute : CompositeDataAttribute
{
public AutoMockedDataAttribute()
: base(() => new Fixture().Customize(new AutoNSubstituteCustomization {ConfigureMembers = true}))
: this(new BaseAutoMockedDataAttribute())
{ }
}

public class InlineAutoMockedDataAttribute : CompositeDataAttribute
{
public InlineAutoMockedDataAttribute()
: this(new AutoMockedDataAttribute())
public AutoMockedDataAttribute(params object[] values)
: this(new BaseAutoMockedDataAttribute(), values)
{ }

public InlineAutoMockedDataAttribute(params object[] values)
: this(new AutoMockedDataAttribute(), values)
private AutoMockedDataAttribute(BaseAutoMockedDataAttribute baseAutoDataAttribute, params object[] values)
: base(new InlineDataAttribute(values), baseAutoDataAttribute)
{ }

public InlineAutoMockedDataAttribute(AutoMockedDataAttribute autoDataAttributeAttribute, params object[] values)
: base(new InlineDataAttribute(values), autoDataAttributeAttribute)
{ }
private class BaseAutoMockedDataAttribute : AutoDataAttribute
{
public BaseAutoMockedDataAttribute()
: base(Configure)
{
}

private static IFixture Configure()
{
return new Fixture().Customize(new AutoNSubstituteCustomization { ConfigureMembers = true });
}
}
}
}
23 changes: 14 additions & 9 deletions BencodeNET.Tests/BencodeNET.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net472;netcoreapp2.0;netcoreapp2.2;netcoreapp3.0</TargetFrameworks>
<LangVersion>7.3</LangVersion>
<TargetFrameworks>net472;netcoreapp2.1;netcoreapp3.1;net5.0</TargetFrameworks>
<LangVersion>9</LangVersion>
</PropertyGroup>

<ItemGroup>
Expand All @@ -15,14 +15,19 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.11.0" />
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="4.11.0" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.11.0" />
<PackageReference Include="FluentAssertions" Version="5.9.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="NSubstitute" Version="4.2.1" />
<PackageReference Include="AutoFixture" Version="4.15.0" />
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="4.15.0" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.15.0" />
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="FluentAssertions.Analyzers" Version="0.11.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="NSubstitute" Version="4.2.2" />
<PackageReference Include="NSubstitute.Analyzers.CSharp" Version="1.0.14" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
36 changes: 19 additions & 17 deletions BencodeNET.Tests/Torrents/TorrentParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using BencodeNET.IO;
using BencodeNET.Objects;
using BencodeNET.Parsing;
using BencodeNET.Tests.AutoFixture;
using BencodeNET.Torrents;
using FluentAssertions;
using NSubstitute;
Expand Down Expand Up @@ -129,10 +130,10 @@ public void CreationDate_InvalidValue_ReturnsEpoch()
}

[Theory]
[InlineAutoMockedData("utf8")]
[InlineAutoMockedData("UTF8")]
[InlineAutoMockedData("utf-8")]
[InlineAutoMockedData("UTF-8")]
[AutoMockedData("utf8")]
[AutoMockedData("UTF8")]
[AutoMockedData("utf-8")]
[AutoMockedData("UTF-8")]
public void Encoding_UTF8_CanBeParsed(string encoding)
{
// Arrange
Expand All @@ -148,8 +149,8 @@ public void Encoding_UTF8_CanBeParsed(string encoding)
}

[Theory]
[InlineAutoMockedData("ascii")]
[InlineAutoMockedData("ASCII")]
[AutoMockedData("ascii")]
[AutoMockedData("ASCII")]
public void Encoding_ASCII_CanBeParsed(string encoding)
{
// Arrange
Expand All @@ -165,10 +166,10 @@ public void Encoding_ASCII_CanBeParsed(string encoding)
}

[Theory]
[InlineAutoMockedData("")]
[InlineAutoMockedData("asdf")]
[InlineAutoMockedData("1")]
[InlineAutoMockedData("UTF 8")]
[AutoMockedData("")]
[AutoMockedData("asdf")]
[AutoMockedData("1")]
[AutoMockedData("UTF 8")]
public void Encoding_InvalidValidAsNull(string encoding)
{
// Arrange
Expand Down Expand Up @@ -202,27 +203,28 @@ public void Info_PieceLength_IsParsed(long pieceSize)

[Theory]
[AutoMockedData]
public void Info_Pieces_IsParsed(byte[] pieces)
public void Info_Pieces_IsParsed([RepeatCount(20)] byte[] pieces)
{
// Arrange
ParsedData = ValidSingleFileTorrentData;
var info = ParsedData.Get<BDictionary>(TorrentFields.Info);
info[TorrentInfoFields.Pieces] = new BString(pieces);
pieces.Should().HaveCount(20);

// Act
var parser = new TorrentParser(BencodeParser);
var torrent = parser.Parse((BencodeReader)null);
var torrent = parser.Parse((BencodeReader) null);

// Assert
torrent.Pieces.Should().Equal(pieces);
}

[Theory]
[InlineAutoMockedData(-1, false)]
[InlineAutoMockedData(0, false)]
[InlineAutoMockedData(1, true)]
[InlineAutoMockedData(42, false)]
[InlineAutoMockedData(12345, false)]
[AutoMockedData(-1, false)]
[AutoMockedData(0, false)]
[AutoMockedData(1, true)]
[AutoMockedData(42, false)]
[AutoMockedData(12345, false)]
public void Info_Private_ShouldBeTrueOnlyIfValueIsOne(int value, bool expectedResult)
{
// Arrange
Expand Down
46 changes: 34 additions & 12 deletions BencodeNET.Tests/Torrents/TorrentTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using AutoFixture.Xunit2;
using BencodeNET.Exceptions;
using BencodeNET.Objects;
using BencodeNET.Torrents;
Expand Down Expand Up @@ -135,6 +136,27 @@ public void DisplayNameUtf8_UnknownFileMode_ThrowsBencodeException()
act.Should().Throw<BencodeException>();
}

[Theory]
[AutoMockedData]
public void Pieces_Setter_NullValue_ThrowsArgumentNullException([NoAutoProperties] Torrent torrent)
{
Action act = () => torrent.Pieces = null;

act.Should().ThrowExactly<ArgumentNullException>();
}

[Theory]
[AutoMockedData]
public void Pieces_Setter_NotMultipleOf20_ThrowsArgumentException([NoAutoProperties] Torrent torrent)
{
var pieces = new byte[] { 66, 115, 135, 19, 149, 125, 229, 85, 68, 117, 252, 185, 243, 247, 139, 38, 11, 37, 60 };
pieces.Should().NotHaveCount(20);

Action act = () => torrent.Pieces = pieces;

act.Should().ThrowExactly<ArgumentException>();
}

[Fact]
public void PiecesAsHexString_Get_ReturnsHexUppercaseWithoutDashes()
{
Expand Down Expand Up @@ -167,9 +189,9 @@ public void PiecesAsHexString_Set_NullThrowsArgumentException()
}

[Theory]
[InlineAutoMockedData("qwer")]
[InlineAutoMockedData("123456789012345678901234567890123456789")]
[InlineAutoMockedData("12345678901234567890123456789012345678901")]
[AutoMockedData("qwer")]
[AutoMockedData("123456789012345678901234567890123456789")]
[AutoMockedData("12345678901234567890123456789012345678901")]
public void PiecesAsHexString_Set_LengthNotMultipleOf40ShouldThrowArgumentException(string value)
{
var torrent = new Torrent();
Expand All @@ -178,15 +200,15 @@ public void PiecesAsHexString_Set_LengthNotMultipleOf40ShouldThrowArgumentExcept
}

[Theory]
[InlineAutoMockedData("a")]
[InlineAutoMockedData("b")]
[InlineAutoMockedData("c")]
[InlineAutoMockedData("G")]
[InlineAutoMockedData("H")]
[InlineAutoMockedData("T")]
[InlineAutoMockedData(".")]
[InlineAutoMockedData("*")]
[InlineAutoMockedData("[")]
[AutoMockedData("a")]
[AutoMockedData("b")]
[AutoMockedData("c")]
[AutoMockedData("G")]
[AutoMockedData("H")]
[AutoMockedData("T")]
[AutoMockedData(".")]
[AutoMockedData("*")]
[AutoMockedData("[")]
public void PiecesAsHexString_Set_ValueWithNonUppercaseHexCharacterShouldThrowArgumentException(string value)
{
var torrent = new Torrent();
Expand Down
17 changes: 11 additions & 6 deletions BencodeNET/BencodeNET.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
<LangVersion>7.3</LangVersion>
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp2.1;net5.0</TargetFrameworks>
<LangVersion>9</LangVersion>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<CodeAnalysisRuleSet>BencodeNET.ruleset</CodeAnalysisRuleSet>
Expand Down Expand Up @@ -38,17 +38,22 @@

<!--Dev dependencies -->
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.4.16" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.8.55" PrivateAssets="All" />
</ItemGroup>

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

<!-- .NET 5.0 dependencies -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">
<PackageReference Include="System.IO.Pipelines" Version="5.0.1" />
</ItemGroup>

<!-- .NET Standard 2.0 dependencies -->
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="System.Buffers" Version="4.5.0" />
<PackageReference Include="System.Buffers" Version="4.5.1" />
</ItemGroup>

</Project>
7 changes: 2 additions & 5 deletions BencodeNET/Objects/BString.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,7 @@ protected override void EncodeObject(PipeWriter writer)

public static bool operator ==(BString first, BString second)
{
if (first is null)
return second is null;

return first.Equals(second);
return first?.Equals(second) ?? second is null;
}

public static bool operator !=(BString first, BString second) => !(first == second);
Expand Down Expand Up @@ -173,7 +170,7 @@ public override string ToString()
/// </returns>
public string ToString(Encoding encoding)
{
encoding = encoding ?? _encoding;
encoding ??= _encoding;
return encoding.GetString(Value.Span);
}
}
Expand Down
Loading

0 comments on commit aeade9e

Please sign in to comment.