226 lines
6.7 KiB
C#
226 lines
6.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|