extensions rework pt1
.NET Test / .NET tests (push) Successful in 2m0s

This commit is contained in:
2026-07-13 22:20:47 +04:00
parent 46487a4794
commit 0e7986996f
30 changed files with 1476 additions and 160 deletions
@@ -0,0 +1,173 @@
namespace Raliway.Tests.ReflectionHelper;
// --- Test types ---
file sealed record EquatableRecord(string Name, int Value);
file sealed class NonEquatableClass
{
public string Name { get; }
public NonEquatableClass(string name) => Name = name;
public override bool Equals(object? obj) => obj is NonEquatableClass other && Name == other.Name;
public override int GetHashCode() => Name.GetHashCode();
}
file readonly struct EquatableStruct : IEquatable<EquatableStruct>
{
public int Value { get; }
public EquatableStruct(int value) => Value = value;
public bool Equals(EquatableStruct other) => Value == other.Value;
public override bool Equals(object? obj) => obj is EquatableStruct s && Equals(s);
public override int GetHashCode() => Value;
}
// --- IsEqual tests ---
public class IsEqual_Tests
{
public class ValueType_IEquatable
{
[Fact] public void Equal_values() =>
Just.Railway.ReflectionHelper.IsEqual(42, 42).ShouldBeTrue();
[Fact] public void Different_values() =>
Just.Railway.ReflectionHelper.IsEqual(42, 43).ShouldBeFalse();
[Fact] public void Null_args() =>
Just.Railway.ReflectionHelper.IsEqual(default(int), default(int)).ShouldBeTrue();
}
public class NullableValueType_IEquatable
{
[Fact] public void Both_have_same_value() =>
Just.Railway.ReflectionHelper.IsEqual<int?>(42, 42).ShouldBeTrue();
[Fact] public void Different_values() =>
Just.Railway.ReflectionHelper.IsEqual<int?>(42, 43).ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<int?>(null, null).ShouldBeTrue();
[Fact] public void One_null_one_value() =>
Just.Railway.ReflectionHelper.IsEqual<int?>(42, null).ShouldBeFalse();
[Fact] public void Null_and_value_reversed() =>
Just.Railway.ReflectionHelper.IsEqual<int?>(null, 42).ShouldBeFalse();
}
public class ReferenceType_IEquatable_String
{
[Fact] public void Equal_strings() =>
Just.Railway.ReflectionHelper.IsEqual("hello", "hello").ShouldBeTrue();
[Fact] public void Different_strings() =>
Just.Railway.ReflectionHelper.IsEqual("hello", "world").ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<string>(null, null).ShouldBeTrue();
[Fact] public void Left_null_right_value() =>
Just.Railway.ReflectionHelper.IsEqual<string>(null, "hello").ShouldBeFalse();
[Fact] public void Left_value_right_null() =>
Just.Railway.ReflectionHelper.IsEqual("hello", null).ShouldBeFalse();
}
public class ReferenceType_IEquatable_Error
{
[Fact] public void Equal_errors() =>
Just.Railway.ReflectionHelper.IsEqual(
Error.New("type", "msg"),
Error.New("type", "msg")
).ShouldBeTrue();
[Fact] public void Different_errors() =>
Just.Railway.ReflectionHelper.IsEqual(
Error.New("type_a", "msg"),
Error.New("type_b", "msg")
).ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<Error>(null, null).ShouldBeTrue();
[Fact] public void One_null() =>
Just.Railway.ReflectionHelper.IsEqual(Error.New("type", "msg"), null).ShouldBeFalse();
}
public class RecordType_IEquatable
{
[Fact] public void Equal_records() =>
Just.Railway.ReflectionHelper.IsEqual(
new EquatableRecord("a", 1),
new EquatableRecord("a", 1)
).ShouldBeTrue();
[Fact] public void Different_records() =>
Just.Railway.ReflectionHelper.IsEqual(
new EquatableRecord("a", 1),
new EquatableRecord("b", 2)
).ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<EquatableRecord>(null, null).ShouldBeTrue();
}
public class NonIEquatable_Fallback
{
[Fact] public void Equal_by_Equals_override() =>
Just.Railway.ReflectionHelper.IsEqual(
new NonEquatableClass("a"),
new NonEquatableClass("a")
).ShouldBeTrue();
[Fact] public void Not_equal() =>
Just.Railway.ReflectionHelper.IsEqual(
new NonEquatableClass("a"),
new NonEquatableClass("b")
).ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<NonEquatableClass>(null, null).ShouldBeTrue();
[Fact] public void Left_null() =>
Just.Railway.ReflectionHelper.IsEqual<NonEquatableClass>(null, new NonEquatableClass("a"))
.ShouldBeFalse();
}
public class CustomEquatableStruct
{
[Fact] public void Equal() =>
Just.Railway.ReflectionHelper.IsEqual(
new EquatableStruct(1),
new EquatableStruct(1)
).ShouldBeTrue();
[Fact] public void Not_equal() =>
Just.Railway.ReflectionHelper.IsEqual(
new EquatableStruct(1),
new EquatableStruct(2)
).ShouldBeFalse();
}
public class CustomNullableEquatableStruct
{
[Fact] public void Both_have_same_value() =>
Just.Railway.ReflectionHelper.IsEqual<EquatableStruct?>(
new EquatableStruct(1),
new EquatableStruct(1)
).ShouldBeTrue();
[Fact] public void Different_values() =>
Just.Railway.ReflectionHelper.IsEqual<EquatableStruct?>(
new EquatableStruct(1),
new EquatableStruct(2)
).ShouldBeFalse();
[Fact] public void Both_null() =>
Just.Railway.ReflectionHelper.IsEqual<EquatableStruct?>(null, null).ShouldBeTrue();
[Fact] public void One_null() =>
Just.Railway.ReflectionHelper.IsEqual<EquatableStruct?>(new EquatableStruct(1), null)
.ShouldBeFalse();
}
}