mirror of
https://github.com/oliverbooth/X10D
synced 2024-11-09 23:45:42 +00:00
Compare commits
10 Commits
8d7ca6ea0a
...
b977b7a4ec
Author | SHA1 | Date | |
---|---|---|---|
b977b7a4ec | |||
a0b07edc82 | |||
7b844bd703 | |||
1a2f92c700 | |||
678dd914d4 | |||
103e037dc8 | |||
f84fc044ba | |||
455b324071 | |||
7222bbb496 | |||
35073d9c85 |
15
CHANGELOG.md
15
CHANGELOG.md
@ -29,12 +29,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- X10D: `DateTime.Age(DateTime)` and `DateTimeOffset.Age(DateTimeOffset)` parameter renamed from `asOf` to `referenceDate`.
|
||||
- X10D: DateTime.Age(DateTime) and DateTimeOffset.Age(DateTimeOffset) parameter renamed from asOf to referenceDate.
|
||||
|
||||
### Removed
|
||||
|
||||
- X10D: Removed `IEnumerable<T>.ConcatOne` - this functionality already exists with `Append`.
|
||||
|
||||
## [3.2.2] - 2023-06-05
|
||||
|
||||
### Added
|
||||
|
||||
- X10D.DSharpPlus: Added support for new usernames. See https://discord.com/blog/usernames
|
||||
|
||||
## 3.2.1 - 2023-06-05
|
||||
|
||||
ERRONEOUS RELEASE.
|
||||
|
||||
## [3.2.0] - 2023-04-03
|
||||
|
||||
### Added
|
||||
@ -597,7 +607,8 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
|
||||
|
||||
Earlier versions of this package are undocumented and unlisted from package results.
|
||||
|
||||
[unreleased]: https://github.com/oliverbooth/X10D/compare/v3.2.0...main
|
||||
[unreleased]: https://github.com/oliverbooth/X10D/compare/v3.2.2...main
|
||||
[3.2.2]: https://github.com/oliverbooth/X10D/releases/tag/v3.2.2
|
||||
[3.2.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.2.0
|
||||
[3.1.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.1.0
|
||||
[3.0.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.0.0
|
||||
|
@ -68,6 +68,12 @@ public static class DiscordUserExtensions
|
||||
throw new ArgumentNullException(nameof(user));
|
||||
}
|
||||
|
||||
if (user.Discriminator == "0")
|
||||
{
|
||||
// user has a new username. see: https://discord.com/blog/usernames
|
||||
return user.Username;
|
||||
}
|
||||
|
||||
return $"{user.Username}#{user.Discriminator}";
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1"/>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0"/>
|
||||
<PackageReference Include="Moq" Version="4.18.4"/>
|
||||
<PackageReference Include="NSubstitute" Version="5.0.0"/>
|
||||
<PackageReference Include="NUnit" Version="3.13.3"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2"/>
|
||||
<PackageReference Include="NUnit.Analyzers" Version="3.6.1"/>
|
||||
|
@ -1,5 +1,5 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
using X10D.Collections;
|
||||
|
||||
@ -13,16 +13,17 @@ public partial class CollectionTests
|
||||
[Test]
|
||||
public void ClearAndDisposeAll_ShouldClearAndDisposeAllItems_WhenCalledWithValidList()
|
||||
{
|
||||
var mock1 = new Mock<IDisposable>();
|
||||
var mock2 = new Mock<IDisposable>();
|
||||
var mock3 = new Mock<IDisposable>();
|
||||
var list = new List<IDisposable> {mock1.Object, mock2.Object, mock3.Object};
|
||||
var substitute1 = Substitute.For<IDisposable>();
|
||||
var substitute2 = Substitute.For<IDisposable>();
|
||||
var substitute3 = Substitute.For<IDisposable>();
|
||||
var list = new List<IDisposable> {substitute1, substitute2, substitute3};
|
||||
|
||||
list.ClearAndDisposeAll();
|
||||
|
||||
mock1.Verify(i => i.Dispose(), Times.Once);
|
||||
mock2.Verify(i => i.Dispose(), Times.Once);
|
||||
mock3.Verify(i => i.Dispose(), Times.Once);
|
||||
substitute1.Received(1).Dispose();
|
||||
substitute2.Received(1).Dispose();
|
||||
substitute3.Received(1).Dispose();
|
||||
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
@ -36,8 +37,8 @@ public partial class CollectionTests
|
||||
[Test]
|
||||
public void ClearAndDisposeAll_ShouldThrowInvalidOperationException_WhenCalledWithReadOnlyList()
|
||||
{
|
||||
var mock = new Mock<IDisposable>();
|
||||
var list = new ReadOnlyCollection<IDisposable>(new List<IDisposable> {mock.Object});
|
||||
var substitute = Substitute.For<IDisposable>();
|
||||
var list = new ReadOnlyCollection<IDisposable>(new List<IDisposable> {substitute});
|
||||
|
||||
Assert.Throws<InvalidOperationException>(() => list.ClearAndDisposeAll());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
using X10D.Collections;
|
||||
|
||||
@ -13,16 +13,17 @@ public partial class CollectionTests
|
||||
[Test]
|
||||
public async Task ClearAndDisposeAllAsync_ShouldClearAndDisposeAllItems_WhenCalledWithValidList()
|
||||
{
|
||||
var mock1 = new Mock<IAsyncDisposable>();
|
||||
var mock2 = new Mock<IAsyncDisposable>();
|
||||
var mock3 = new Mock<IAsyncDisposable>();
|
||||
var list = new List<IAsyncDisposable> {mock1.Object, mock2.Object, mock3.Object};
|
||||
var substitute1 = Substitute.For<IAsyncDisposable>();
|
||||
var substitute2 = Substitute.For<IAsyncDisposable>();
|
||||
var substitute3 = Substitute.For<IAsyncDisposable>();
|
||||
var list = new List<IAsyncDisposable> {substitute1, substitute2, substitute3};
|
||||
|
||||
await list.ClearAndDisposeAllAsync().ConfigureAwait(false);
|
||||
|
||||
mock1.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
mock2.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
mock3.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
await substitute1.Received(1).DisposeAsync();
|
||||
await substitute2.Received(1).DisposeAsync();
|
||||
await substitute3.Received(1).DisposeAsync();
|
||||
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
@ -36,8 +37,8 @@ public partial class CollectionTests
|
||||
[Test]
|
||||
public void ClearAndDisposeAllAsync_ShouldThrowInvalidOperationException_WhenCalledWithReadOnlyList()
|
||||
{
|
||||
var mock = new Mock<IAsyncDisposable>();
|
||||
var list = new ReadOnlyCollection<IAsyncDisposable>(new List<IAsyncDisposable> {mock.Object});
|
||||
var substitute = Substitute.For<IAsyncDisposable>();
|
||||
var list = new ReadOnlyCollection<IAsyncDisposable>(new List<IAsyncDisposable> {substitute});
|
||||
|
||||
Assert.ThrowsAsync<InvalidOperationException>(list.ClearAndDisposeAllAsync);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
using X10D.Collections;
|
||||
|
||||
@ -12,16 +12,16 @@ public partial class EnumerableTests
|
||||
[Test]
|
||||
public void DisposeAll_ShouldDisposeAllItems_WhenCalledWithValidList()
|
||||
{
|
||||
var mock1 = new Mock<IDisposable>();
|
||||
var mock2 = new Mock<IDisposable>();
|
||||
var mock3 = new Mock<IDisposable>();
|
||||
var list = new List<IDisposable> {mock1.Object, mock2.Object, null!, mock3.Object};
|
||||
var substitute1 = Substitute.For<IDisposable>();
|
||||
var substitute2 = Substitute.For<IDisposable>();
|
||||
var substitute3 = Substitute.For<IDisposable>();
|
||||
var list = new List<IDisposable> { substitute1, substitute2, null!, substitute3 };
|
||||
|
||||
list.DisposeAll();
|
||||
|
||||
mock1.Verify(i => i.Dispose(), Times.Once);
|
||||
mock2.Verify(i => i.Dispose(), Times.Once);
|
||||
mock3.Verify(i => i.Dispose(), Times.Once);
|
||||
substitute1.Received(1).Dispose();
|
||||
substitute2.Received(1).Dispose();
|
||||
substitute3.Received(1).Dispose();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -1,4 +1,4 @@
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
using X10D.Collections;
|
||||
|
||||
@ -12,16 +12,16 @@ public partial class EnumerableTests
|
||||
[Test]
|
||||
public async Task DisposeAllAsync_ShouldDisposeAllItems_WhenCalledWithValidList()
|
||||
{
|
||||
var mock1 = new Mock<IAsyncDisposable>();
|
||||
var mock2 = new Mock<IAsyncDisposable>();
|
||||
var mock3 = new Mock<IAsyncDisposable>();
|
||||
var list = new List<IAsyncDisposable> {mock1.Object, mock2.Object, null!, mock3.Object};
|
||||
var substitute1 = Substitute.For<IAsyncDisposable>();
|
||||
var substitute2 = Substitute.For<IAsyncDisposable>();
|
||||
var substitute3 = Substitute.For<IAsyncDisposable>();
|
||||
var list = new List<IAsyncDisposable> { substitute1, substitute2, null!, substitute3 };
|
||||
|
||||
await list.DisposeAllAsync().ConfigureAwait(false);
|
||||
|
||||
mock1.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
mock2.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
mock3.Verify(i => i.DisposeAsync(), Times.Once);
|
||||
await substitute1.Received(1).DisposeAsync();
|
||||
await substitute2.Received(1).DisposeAsync();
|
||||
await substitute3.Received(1).DisposeAsync();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
Loading…
Reference in New Issue
Block a user