diff --git a/src/Resend/DateTimeOrHuman.cs b/src/Resend/DateTimeOrHuman.cs
index a5a17ca..550ed57 100644
--- a/src/Resend/DateTimeOrHuman.cs
+++ b/src/Resend/DateTimeOrHuman.cs
@@ -50,7 +50,7 @@ public override string ToString()
public int CompareTo( DateTimeOrHuman other )
{
if ( this.IsMoment != other.IsMoment )
- throw new NotSupportedException( "Cannot compare DateTimeOrHuman values of different kind" );
+ throw new NotSupportedException( "DH001: Cannot compare DateTimeOrHuman values of different kind" );
if ( this.IsMoment == true )
return this.Moment!.Value.CompareTo( other.Moment!.Value );
@@ -65,7 +65,7 @@ public static implicit operator DateTime( DateTimeOrHuman value )
if ( value.IsMoment == true )
return value.Moment!.Value;
- throw new InvalidOperationException( "Value is not a DateTime" );
+ throw new InvalidOperationException( "DH002: Value is not a DateTime" );
}
diff --git a/tests/Resend.Tests/DateTimeOrHumanTests.cs b/tests/Resend.Tests/DateTimeOrHumanTests.cs
index 8002d72..e7fe01f 100644
--- a/tests/Resend.Tests/DateTimeOrHumanTests.cs
+++ b/tests/Resend.Tests/DateTimeOrHumanTests.cs
@@ -15,6 +15,103 @@ public class WrapperClass
}
+ ///
+ [Fact]
+ public void DateTimeToString()
+ {
+ var dt = DateTime.UtcNow;
+ DateTimeOrHuman src = dt;
+
+ Assert.Equal( dt.ToString(), src.ToString() );
+ }
+
+
+ ///
+ [Fact]
+ public void DateTimeCast()
+ {
+ var dt = DateTime.UtcNow;
+ DateTimeOrHuman src = dt;
+ DateTime tgt = src;
+
+ Assert.Equal( dt, tgt );
+ }
+
+
+ ///
+ [Fact]
+ public void DateTimeCastFromHuman()
+ {
+ DateTimeOrHuman src = "in 5 mins";
+
+ Action act = () =>
+ {
+ DateTime tgt = src;
+ };
+
+ var ex = Assert.Throws( act );
+ Assert.NotNull( ex.Message );
+ Assert.StartsWith( "DH002:", ex.Message );
+ }
+
+
+ ///
+ [Fact]
+ public void DateTimeComparable()
+ {
+ var dt1 = DateTime.UtcNow;
+ var dt2 = DateTime.UtcNow.AddDays( 1 );
+
+ DateTimeOrHuman src1 = dt1;
+ DateTimeOrHuman src2 = dt2;
+
+ Assert.Equal( dt1.CompareTo( dt2 ), src1.CompareTo( src2 ) );
+ }
+
+
+ ///
+ [Fact]
+ public void HumanToString()
+ {
+ var str = "in 5 mins";
+ DateTimeOrHuman v = str;
+
+ Assert.Equal( str, v.ToString() );
+ }
+
+
+ ///
+ [Fact]
+ public void HumanComparable()
+ {
+ var str1 = "in 5 mins";
+ var str2 = "tomorrow 5:00 am";
+
+ DateTimeOrHuman v1 = str1;
+ DateTimeOrHuman v2 = str2;
+
+ Assert.Equal( str1.CompareTo( str2 ), v1.CompareTo( v2 ) );
+ }
+
+
+ ///
+ [Fact]
+ public void MixedComparable()
+ {
+ var str = "in 5 mins";
+ var dt = DateTime.UtcNow;
+
+ DateTimeOrHuman v1 = str;
+ DateTimeOrHuman v2 = dt;
+
+ Action act = () => v1.CompareTo( v2 );
+
+ var ex = Assert.Throws( act );
+ Assert.NotNull( ex.Message );
+ Assert.StartsWith( "DH001:", ex.Message );
+ }
+
+
///
[Fact]
public void PropertyNotNull()