Skip to content

Commit

Permalink
Unit tests for #2828 (v3)
Browse files Browse the repository at this point in the history
  • Loading branch information
bradwilson committed Nov 28, 2023
1 parent f01776f commit d0638f3
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 1 deletion.
94 changes: 94 additions & 0 deletions src/xunit.v3.assert.tests/Asserts/EqualityAssertsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Xunit;
using Xunit.Sdk;

Expand Down Expand Up @@ -1046,6 +1047,53 @@ public bool Equals(IEnumerable? x, IEnumerable? y)
public int GetHashCode([DisallowNull] IEnumerable obj) =>
throw new NotImplementedException();
}

[Fact]
public void CollectionWithIEquatable_Equal()
{
var expected = new EnumerableEquatable<int> { 42, 2112 };
var actual = new EnumerableEquatable<int> { 2112, 42 };

Assert.Equal(expected, actual);
}

[Fact]
public void CollectionWithIEquatable_NotEqual()
{
var expected = new EnumerableEquatable<int> { 42, 2112 };
var actual = new EnumerableEquatable<int> { 2112, 2600 };

var ex = Record.Exception(() => Assert.Equal(expected, actual));

Assert.IsType<EqualException>(ex);
// No pointers because it's relying on IEquatable<>
Assert.Equal(
"Assert.Equal() Failure: Collections differ" + Environment.NewLine +
"Expected: [42, 2112]" + Environment.NewLine +
"Actual: [2112, 2600]",
ex.Message
);
}

public sealed class EnumerableEquatable<T> :
IEnumerable<T>, IEquatable<EnumerableEquatable<T>>
{
List<T> values = new();

public void Add(T value) => values.Add(value);

public bool Equals(EnumerableEquatable<T>? other)
{
if (other == null)
return false;

return !values.Except(other.values).Any() && !other.values.Except(values).Any();
}

public IEnumerator<T> GetEnumerator() => values.GetEnumerator();

IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}

public class Dictionaries
Expand Down Expand Up @@ -3007,6 +3055,52 @@ public void NonZeroBoundedArrays_NotEqual()

Assert.NotEqual(expected, actual);
}

[Fact]
public void CollectionWithIEquatable_Equal()
{
var expected = new EnumerableEquatable<int> { 42, 2112 };
var actual = new EnumerableEquatable<int> { 2112, 42 };

var ex = Record.Exception(() => Assert.NotEqual(expected, actual));

Assert.IsType<NotEqualException>(ex);
Assert.Equal(
"Assert.NotEqual() Failure: Collections are equal" + Environment.NewLine +
"Expected: Not [42, 2112]" + Environment.NewLine +
"Actual: [2112, 42]",
ex.Message
);
}

[Fact]
public void CollectionWithIEquatable_NotEqual()
{
var expected = new EnumerableEquatable<int> { 42, 2112 };
var actual = new EnumerableEquatable<int> { 2112, 2600 };

Assert.NotEqual(expected, actual);
}

public sealed class EnumerableEquatable<T> :
IEnumerable<T>, IEquatable<EnumerableEquatable<T>>
{
List<T> values = new();

public void Add(T value) => values.Add(value);

public bool Equals(EnumerableEquatable<T>? other)
{
if (other == null)
return false;

return !values.Except(other.values).Any() && !other.values.Except(values).Any();
}

public IEnumerator<T> GetEnumerator() => values.GetEnumerator();

IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}

public class Dictionaries
Expand Down
2 changes: 1 addition & 1 deletion src/xunit.v3.assert/Asserts

0 comments on commit d0638f3

Please sign in to comment.