Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions TUnit.Assertions.Tests/DateTimeAssertionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,58 @@ public async Task Test_DateTime_IsNotDaylightSavingTime()
await Assert.That(winterDate).IsNotDaylightSavingTime();
}
}

[Test]
public async Task Test_DateTime_IsAfter()
{
var dateTimeBefore = new DateTime(2024, 1, 1, 12, 0, 0);
var dateTimeAfter = new DateTime(2024, 1, 2, 12, 0, 0);
await Assert.That(dateTimeAfter).IsAfter(dateTimeBefore);
}

[Test]
public async Task Test_DateTime_IsAfter_SameTime_Fails()
{
var dateTime = new DateTime(2024, 1, 1, 12, 0, 0);
await Assert.That(async () => await Assert.That(dateTime).IsAfter(dateTime))
.ThrowsException();
}

[Test]
public async Task Test_DateTime_IsBefore()
{
var dateTimeBefore = new DateTime(2024, 1, 1, 12, 0, 0);
var dateTimeAfter = new DateTime(2024, 1, 2, 12, 0, 0);
await Assert.That(dateTimeBefore).IsBefore(dateTimeAfter);
}

[Test]
public async Task Test_DateTime_IsBefore_SameTime_Fails()
{
var dateTime = new DateTime(2024, 1, 1, 12, 0, 0);
await Assert.That(async () => await Assert.That(dateTime).IsBefore(dateTime))
.ThrowsException();
}

[Test]
public async Task Test_DateTime_IsBeforeOrEqualTo()
{
var dateTimeBefore = new DateTime(2024, 1, 1, 12, 0, 0);
var dateTimeAfter = new DateTime(2024, 1, 2, 12, 0, 0);
await Assert.That(dateTimeBefore).IsBeforeOrEqualTo(dateTimeAfter);
}

[Test]
public async Task Test_DateTime_IsBeforeOrEqualTo_SameTime()
{
var dateTime = new DateTime(2024, 1, 1, 12, 0, 0);
await Assert.That(dateTime).IsBeforeOrEqualTo(dateTime);
}

[Test]
public async Task Test_DateTime_IsAfterOrEqualTo_SameTime()
{
var dateTime = new DateTime(2024, 1, 1, 12, 0, 0);
await Assert.That(dateTime).IsAfterOrEqualTo(dateTime);
}
}
62 changes: 62 additions & 0 deletions TUnit.Assertions.Tests/DateTimeOffsetAssertionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,4 +189,66 @@ public async Task Test_DateTimeOffset_IsOnWeekday_Wednesday()
var wednesday = new DateTimeOffset(daysUntilWednesday == 0 ? today : today.AddDays(daysUntilWednesday));
await Assert.That(wednesday).IsOnWeekday();
}

[Test]
public async Task Test_DateTimeOffset_IsAfter()
{
var before = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
var after = new DateTimeOffset(2024, 1, 2, 12, 0, 0, TimeSpan.Zero);
await Assert.That(after).IsAfter(before);
}

[Test]
public async Task Test_DateTimeOffset_IsAfter_SameTime_Fails()
{
var dateTimeOffset = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
await Assert.That(async () => await Assert.That(dateTimeOffset).IsAfter(dateTimeOffset))
.ThrowsException();
}

[Test]
public async Task Test_DateTimeOffset_IsBefore()
{
var before = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
var after = new DateTimeOffset(2024, 1, 2, 12, 0, 0, TimeSpan.Zero);
await Assert.That(before).IsBefore(after);
}

[Test]
public async Task Test_DateTimeOffset_IsBefore_SameTime_Fails()
{
var dateTimeOffset = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
await Assert.That(async () => await Assert.That(dateTimeOffset).IsBefore(dateTimeOffset))
.ThrowsException();
}

[Test]
public async Task Test_DateTimeOffset_IsAfterOrEqualTo()
{
var before = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
var after = new DateTimeOffset(2024, 1, 2, 12, 0, 0, TimeSpan.Zero);
await Assert.That(after).IsAfterOrEqualTo(before);
}

[Test]
public async Task Test_DateTimeOffset_IsAfterOrEqualTo_SameTime()
{
var dateTimeOffset = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
await Assert.That(dateTimeOffset).IsAfterOrEqualTo(dateTimeOffset);
}

[Test]
public async Task Test_DateTimeOffset_IsBeforeOrEqualTo()
{
var before = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
var after = new DateTimeOffset(2024, 1, 2, 12, 0, 0, TimeSpan.Zero);
await Assert.That(before).IsBeforeOrEqualTo(after);
}

[Test]
public async Task Test_DateTimeOffset_IsBeforeOrEqualTo_SameTime()
{
var dateTimeOffset = new DateTimeOffset(2024, 1, 1, 12, 0, 0, TimeSpan.Zero);
await Assert.That(dateTimeOffset).IsBeforeOrEqualTo(dateTimeOffset);
}
}
197 changes: 197 additions & 0 deletions TUnit.Assertions/Extensions/AssertionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1518,6 +1518,203 @@ public static GreaterThanOrEqualAssertion<DateTime> IsAfterOrEqualTo(
return new GreaterThanOrEqualAssertion<DateTime>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTime is after the expected DateTime.
/// Alias for IsGreaterThan for better readability with dates.
/// </summary>
public static GreaterThanAssertion<DateTime> IsAfter(
this IAssertionSource<DateTime> source,
DateTime expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfter({expression})");
return new GreaterThanAssertion<DateTime>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTime is before the expected DateTime.
/// Alias for IsLessThan for better readability with dates.
/// </summary>
public static LessThanAssertion<DateTime> IsBefore(
this IAssertionSource<DateTime> source,
DateTime expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBefore({expression})");
return new LessThanAssertion<DateTime>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTime is before or equal to the expected DateTime.
/// Alias for IsLessThanOrEqualTo for better readability with dates.
/// </summary>
public static LessThanOrEqualAssertion<DateTime> IsBeforeOrEqualTo(
this IAssertionSource<DateTime> source,
DateTime expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBeforeOrEqualTo({expression})");
return new LessThanOrEqualAssertion<DateTime>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTimeOffset is after the expected DateTimeOffset.
/// Alias for IsGreaterThan for better readability with dates.
/// </summary>
public static GreaterThanAssertion<DateTimeOffset> IsAfter(
this IAssertionSource<DateTimeOffset> source,
DateTimeOffset expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfter({expression})");
return new GreaterThanAssertion<DateTimeOffset>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTimeOffset is before the expected DateTimeOffset.
/// Alias for IsLessThan for better readability with dates.
/// </summary>
public static LessThanAssertion<DateTimeOffset> IsBefore(
this IAssertionSource<DateTimeOffset> source,
DateTimeOffset expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBefore({expression})");
return new LessThanAssertion<DateTimeOffset>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTimeOffset is after or equal to the expected DateTimeOffset.
/// Alias for IsGreaterThanOrEqualTo for better readability with dates.
/// </summary>
public static GreaterThanOrEqualAssertion<DateTimeOffset> IsAfterOrEqualTo(
this IAssertionSource<DateTimeOffset> source,
DateTimeOffset expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfterOrEqualTo({expression})");
return new GreaterThanOrEqualAssertion<DateTimeOffset>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateTimeOffset is before or equal to the expected DateTimeOffset.
/// Alias for IsLessThanOrEqualTo for better readability with dates.
/// </summary>
public static LessThanOrEqualAssertion<DateTimeOffset> IsBeforeOrEqualTo(
this IAssertionSource<DateTimeOffset> source,
DateTimeOffset expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBeforeOrEqualTo({expression})");
return new LessThanOrEqualAssertion<DateTimeOffset>(source.Context, expected);
}

#if NET6_0_OR_GREATER
/// <summary>
/// Asserts that the DateOnly is after the expected DateOnly.
/// Alias for IsGreaterThan for better readability with dates.
/// </summary>
public static GreaterThanAssertion<DateOnly> IsAfter(
this IAssertionSource<DateOnly> source,
DateOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfter({expression})");
return new GreaterThanAssertion<DateOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateOnly is before the expected DateOnly.
/// Alias for IsLessThan for better readability with dates.
/// </summary>
public static LessThanAssertion<DateOnly> IsBefore(
this IAssertionSource<DateOnly> source,
DateOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBefore({expression})");
return new LessThanAssertion<DateOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateOnly is after or equal to the expected DateOnly.
/// Alias for IsGreaterThanOrEqualTo for better readability with dates.
/// </summary>
public static GreaterThanOrEqualAssertion<DateOnly> IsAfterOrEqualTo(
this IAssertionSource<DateOnly> source,
DateOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfterOrEqualTo({expression})");
return new GreaterThanOrEqualAssertion<DateOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the DateOnly is before or equal to the expected DateOnly.
/// Alias for IsLessThanOrEqualTo for better readability with dates.
/// </summary>
public static LessThanOrEqualAssertion<DateOnly> IsBeforeOrEqualTo(
this IAssertionSource<DateOnly> source,
DateOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBeforeOrEqualTo({expression})");
return new LessThanOrEqualAssertion<DateOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the TimeOnly is after the expected TimeOnly.
/// Alias for IsGreaterThan for better readability with times.
/// </summary>
public static GreaterThanAssertion<TimeOnly> IsAfter(
this IAssertionSource<TimeOnly> source,
TimeOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfter({expression})");
return new GreaterThanAssertion<TimeOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the TimeOnly is before the expected TimeOnly.
/// Alias for IsLessThan for better readability with times.
/// </summary>
public static LessThanAssertion<TimeOnly> IsBefore(
this IAssertionSource<TimeOnly> source,
TimeOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBefore({expression})");
return new LessThanAssertion<TimeOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the TimeOnly is after or equal to the expected TimeOnly.
/// Alias for IsGreaterThanOrEqualTo for better readability with times.
/// </summary>
public static GreaterThanOrEqualAssertion<TimeOnly> IsAfterOrEqualTo(
this IAssertionSource<TimeOnly> source,
TimeOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsAfterOrEqualTo({expression})");
return new GreaterThanOrEqualAssertion<TimeOnly>(source.Context, expected);
}

/// <summary>
/// Asserts that the TimeOnly is before or equal to the expected TimeOnly.
/// Alias for IsLessThanOrEqualTo for better readability with times.
/// </summary>
public static LessThanOrEqualAssertion<TimeOnly> IsBeforeOrEqualTo(
this IAssertionSource<TimeOnly> source,
TimeOnly expected,
[CallerArgumentExpression(nameof(expected))] string? expression = null)
{
source.Context.ExpressionBuilder.Append($".IsBeforeOrEqualTo({expression})");
return new LessThanOrEqualAssertion<TimeOnly>(source.Context, expected);
}
#endif

// IsDefault and IsNotDefault are now generated by AssertionExtensionGenerator

// ============ TIMING ASSERTIONS ============
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1694,9 +1694,24 @@ namespace .Extensions
where TEnum : struct, { }
public static .<TValue> HasSingleItem<TValue>(this .<TValue> source)
where TValue : .IEnumerable { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<TTarget, object> IsAssignableTo<TTarget>(this .<object> source) { }
public static .<TTarget, TValue> IsAssignableTo<TTarget, TValue>(this .<TValue> source) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static ..IsDefinedAssertion<TEnum> IsDefined<TEnum>(this .<TEnum> source)
where TEnum : struct, { }
public static .<TValue> IsEmpty<TValue>(this .<TValue> source)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1694,9 +1694,24 @@ namespace .Extensions
where TEnum : struct, { }
public static .<TValue> HasSingleItem<TValue>(this .<TValue> source)
where TValue : .IEnumerable { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfter(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsAfterOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<TTarget, object> IsAssignableTo<TTarget>(this .<object> source) { }
public static .<TTarget, TValue> IsAssignableTo<TTarget, TValue>(this .<TValue> source) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBefore(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static .<> IsBeforeOrEqualTo(this .<> source, expected, [.("expected")] string? expression = null) { }
public static ..IsDefinedAssertion<TEnum> IsDefined<TEnum>(this .<TEnum> source)
where TEnum : struct, { }
public static .<TValue> IsEmpty<TValue>(this .<TValue> source)
Expand Down
Loading
Loading