@@ -0,0 +1,225 @@
|
||||
namespace Raliway.Tests.Errors;
|
||||
|
||||
public class Equality
|
||||
{
|
||||
public class Equals_Tests
|
||||
{
|
||||
[Fact]
|
||||
public void Identical_ExpectedErrors_are_equal()
|
||||
{
|
||||
var a = Error.New("custom_type", "some message");
|
||||
var b = Error.New("custom_type", "some message");
|
||||
|
||||
a.Equals(b).ShouldBeTrue();
|
||||
b.Equals(a).ShouldBeTrue();
|
||||
(a == b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Different_type_ExpectedErrors_are_not_equal()
|
||||
{
|
||||
var a = Error.New("type_a", "same message");
|
||||
var b = Error.New("type_b", "same message");
|
||||
|
||||
a.Equals(b).ShouldBeFalse();
|
||||
(a == b).ShouldBeFalse();
|
||||
(a != b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Different_message_ExpectedErrors_are_not_equal()
|
||||
{
|
||||
var a = Error.New("same_type", "message a");
|
||||
var b = Error.New("same_type", "message b");
|
||||
|
||||
a.Equals(b).ShouldBeFalse();
|
||||
(a == b).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Same_Type_and_Message_but_different_ExtensionData_are_still_equal()
|
||||
{
|
||||
var a = Error.New("type", "msg", new Dictionary<string, string> { ["key"] = "a" });
|
||||
var b = Error.New("type", "msg", new Dictionary<string, string> { ["key"] = "b" });
|
||||
|
||||
a.Equals(b).ShouldBeTrue();
|
||||
(a == b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExpectedError_and_ExceptionalError_with_same_Type_and_Message_are_equal()
|
||||
{
|
||||
Error expected = Error.New("shared_type", "shared message");
|
||||
Error exceptional = new ExceptionalError("shared_type", "shared message");
|
||||
|
||||
expected.Equals(exceptional).ShouldBeTrue();
|
||||
exceptional.Equals(expected).ShouldBeTrue();
|
||||
(expected == exceptional).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_with_same_elements_same_order_are_equal()
|
||||
{
|
||||
var a = Error.Many(Error.New("a"), Error.New("b"), Error.New("c"));
|
||||
var b = Error.Many(Error.New("a"), Error.New("b"), Error.New("c"));
|
||||
|
||||
a.Equals(b).ShouldBeTrue();
|
||||
(a == b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_with_same_elements_different_order_are_not_equal()
|
||||
{
|
||||
var a = Error.Many(Error.New("a"), Error.New("b"));
|
||||
var b = Error.Many(Error.New("b"), Error.New("a"));
|
||||
|
||||
a.Equals(b).ShouldBeFalse();
|
||||
(a == b).ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
|
||||
public class CompareTo_Tests
|
||||
{
|
||||
[Fact]
|
||||
public void CompareTo_null_returns_minus_one()
|
||||
{
|
||||
var error = Error.New("type", "msg");
|
||||
|
||||
error.CompareTo(null).ShouldBe(-1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_same_returns_zero()
|
||||
{
|
||||
var a = Error.New("type", "msg");
|
||||
var b = Error.New("type", "msg");
|
||||
|
||||
a.CompareTo(b).ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_different_type_compares_by_type()
|
||||
{
|
||||
var a = Error.New("aaa", "msg");
|
||||
var b = Error.New("bbb", "msg");
|
||||
|
||||
a.CompareTo(b).ShouldBeLessThan(0);
|
||||
b.CompareTo(a).ShouldBeGreaterThan(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_same_type_different_message_compares_by_message()
|
||||
{
|
||||
var a = Error.New("type", "aaa");
|
||||
var b = Error.New("type", "bbb");
|
||||
|
||||
a.CompareTo(b).ShouldBeLessThan(0);
|
||||
b.CompareTo(a).ShouldBeGreaterThan(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_CompareTo_different_length_compares_by_count()
|
||||
{
|
||||
var shorter = Error.Many(Error.New("a"), Error.New("b"));
|
||||
var longer = Error.Many(Error.New("a"), Error.New("b"), Error.New("c"));
|
||||
|
||||
shorter.CompareTo(longer).ShouldBeLessThan(0);
|
||||
longer.CompareTo(shorter).ShouldBeGreaterThan(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_CompareTo_same_length_element_by_element()
|
||||
{
|
||||
var a = Error.Many(Error.New("a"), Error.New("b"));
|
||||
var b = Error.Many(Error.New("a"), Error.New("c")); // differs at position 1
|
||||
|
||||
a.CompareTo(b).ShouldBeLessThan(0);
|
||||
b.CompareTo(a).ShouldBeGreaterThan(0);
|
||||
}
|
||||
}
|
||||
|
||||
public class IsSimilarTo_Tests
|
||||
{
|
||||
[Fact]
|
||||
public void Same_Type_IsSimilarTo_returns_true_ignoring_Message()
|
||||
{
|
||||
var a = Error.New("custom_type", "message one");
|
||||
var b = Error.New("custom_type", "message two");
|
||||
|
||||
a.IsSimilarTo(b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Different_Type_IsSimilarTo_returns_false()
|
||||
{
|
||||
var a = Error.New("type_a", "same message");
|
||||
var b = Error.New("type_b", "same message");
|
||||
|
||||
a.IsSimilarTo(b).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsSimilarTo_null_returns_false()
|
||||
{
|
||||
var error = Error.New("type", "msg");
|
||||
|
||||
error.IsSimilarTo(null!).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_IsSimilarTo_different_count_returns_false()
|
||||
{
|
||||
var a = Error.Many(Error.New("a"), Error.New("b"));
|
||||
var b = Error.Many(Error.New("a"), Error.New("b"), Error.New("c"));
|
||||
|
||||
a.IsSimilarTo(b).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_IsSimilarTo_same_types_different_messages_returns_true()
|
||||
{
|
||||
var a = Error.Many(Error.New("type", "msg1"));
|
||||
var b = Error.Many(Error.New("type", "msg2"));
|
||||
|
||||
a.IsSimilarTo(b).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ManyErrors_IsSimilarTo_different_type_at_same_position_returns_false()
|
||||
{
|
||||
var a = Error.Many(Error.New("type_a", "msg"), Error.New("type_b", "msg"));
|
||||
var b = Error.Many(Error.New("type_a", "msg"), Error.New("type_c", "msg"));
|
||||
|
||||
a.IsSimilarTo(b).ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
|
||||
public class GetHashCode_Tests
|
||||
{
|
||||
[Fact]
|
||||
public void Equal_errors_have_same_hashcode()
|
||||
{
|
||||
var a = Error.New("type", "msg");
|
||||
var b = Error.New("type", "msg");
|
||||
|
||||
a.GetHashCode().ShouldBe(b.GetHashCode());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Equal_ManyErrors_have_same_hashcode()
|
||||
{
|
||||
var a = Error.Many(Error.New("a"), Error.New("b"));
|
||||
var b = Error.Many(Error.New("a"), Error.New("b"));
|
||||
|
||||
a.GetHashCode().ShouldBe(b.GetHashCode());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Empty_ManyErrors_hashcode_is_zero()
|
||||
{
|
||||
var empty = Error.Many(Array.Empty<Error>());
|
||||
|
||||
empty.GetHashCode().ShouldBe(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user