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
26 changes: 0 additions & 26 deletions Source/Mockolate/Setup/MethodSetup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,32 +142,6 @@ protected static bool HasOutParameter<T>(NamedParameter?[] namedParameters, stri
return false;
}

/// <summary>
/// Determines whether each value in the specified array matches the corresponding named parameter according to the
/// parameter's matching criteria.
/// </summary>
/// <remarks>
/// The method returns false if the lengths of the namedParameters and values arrays do not match.
/// Each value is compared to its corresponding named parameter using the parameter's matching logic.
/// </remarks>
protected static bool Matches(NamedParameter[] namedParameters, NamedParameterValue[] values)
{
if (namedParameters.Length != values.Length)
{
return false;
}

for (int i = 0; i < namedParameters.Length; i++)
{
if (!namedParameters[i].Matches(values[i]))
{
return false;
}
}

return true;
}

/// <summary>
/// Triggers the parameter callbacks for each value in the specified array according to
/// the corresponding named parameter.
Expand Down
4 changes: 1 addition & 3 deletions Source/Mockolate/Verify/VerificationResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,7 @@ public async Task<bool> VerifyAsync(Func<IInteraction[], bool> predicate)
{
return true;
}
} while (!token.IsCancellationRequested);

return false;
} while (true);
}
finally
{
Expand Down
1 change: 0 additions & 1 deletion Tests/Mockolate.Api.Tests/Expected/Mockolate_net10.0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1432,7 +1432,6 @@ namespace Mockolate.Setup
protected static string FormatType(System.Type type) { }
protected static bool HasOutParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IOutParameter<T>? parameter) { }
protected static bool HasRefParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IRefParameter<T>? parameter) { }
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static void TriggerCallbacks(Mockolate.Parameters.NamedParameter?[] namedParameters, object?[] values) { }
protected static bool TryCast<T>([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
}
Expand Down
1 change: 0 additions & 1 deletion Tests/Mockolate.Api.Tests/Expected/Mockolate_net8.0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1431,7 +1431,6 @@ namespace Mockolate.Setup
protected static string FormatType(System.Type type) { }
protected static bool HasOutParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IOutParameter<T>? parameter) { }
protected static bool HasRefParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IRefParameter<T>? parameter) { }
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static void TriggerCallbacks(Mockolate.Parameters.NamedParameter?[] namedParameters, object?[] values) { }
protected static bool TryCast<T>([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1394,7 +1394,6 @@ namespace Mockolate.Setup
protected static string FormatType(System.Type type) { }
protected static bool HasOutParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IOutParameter<T>? parameter) { }
protected static bool HasRefParameter<T>(Mockolate.Parameters.NamedParameter?[] namedParameters, string parameterName, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Mockolate.Parameters.IRefParameter<T>? parameter) { }
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static void TriggerCallbacks(Mockolate.Parameters.NamedParameter?[] namedParameters, object?[] values) { }
protected static bool TryCast<T>([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
}
Expand Down
60 changes: 55 additions & 5 deletions Tests/Mockolate.Tests/Verify/VerificationResultTests.AsyncTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,53 @@ await That(Act).Throws<MockVerificationException>()
}

[Fact]
public async Task WhenAlreadySuccessful_ShouldSucceed()
public async Task VerifyAsync_WhenAlreadySuccessful_ShouldReturnTrue()
{
IChocolateDispenser sut = Mock.Create<IChocolateDispenser>();
sut.Dispense("Dark", 1);
sut.Dispense("Dark", 2);

await That(sut.VerifyMock.Invoked.Dispense(Match.AnyParameters()).Within(TimeSpan.FromMilliseconds(500)))
.AtLeastOnce();
VerificationResult<IChocolateDispenser> result = sut.VerifyMock.Invoked.Dispense(Match.AnyParameters())
.Within(TimeSpan.FromMilliseconds(500));

await That(((IAsyncVerificationResult)result).VerifyAsync(l => l.Length > 0)).IsTrue();
}

[Fact]
public async Task VerifyAsync_WhenMultipleIterationsAreNecessary_ShouldStopWhenSuccessful()
{
IChocolateDispenser sut = Mock.Create<IChocolateDispenser>();

VerificationResult<IChocolateDispenser> result = sut.VerifyMock.Invoked.Dispense(Match.AnyParameters())
.Within(TimeSpan.FromSeconds(10));
using CancellationTokenSource cts = new();
CancellationToken token = cts.Token;

_ = Task.Run(async () =>
{
for (int i = 0; i < 1000; i++)
{
await Task.Delay(10, CancellationToken.None);
sut.Dispense("Dark", i);
if (token.IsCancellationRequested)
{
break;
}
}
}, token);

await That(((IAsyncVerificationResult)result).VerifyAsync(l => l.Length > 20)).IsTrue();
Comment thread
vbreuss marked this conversation as resolved.
}

[Fact]
public async Task WithCancellation_ShouldReturnAsyncVerificationResult()
{
IChocolateDispenser sut = Mock.Create<IChocolateDispenser>();

VerificationResult<IChocolateDispenser> result = sut.VerifyMock.Invoked.Dispense(Match.AnyParameters())
.WithCancellation(CancellationToken.None);

await That(result).Is<IAsyncVerificationResult>();
}

[Fact]
Expand Down Expand Up @@ -107,7 +146,7 @@ public async Task Within_ShouldAbortAsSoonAsConditionIsSatisfied()
{
for (int i = 0; i < 100; i++)
{
await Task.Delay(100);
await Task.Delay(100, CancellationToken.None);
sut.Dispense("Dark", i);
if (token.IsCancellationRequested)
{
Expand All @@ -122,7 +161,18 @@ public async Task Within_ShouldAbortAsSoonAsConditionIsSatisfied()
sw.Stop();
cts.Cancel();

await That(sw.Elapsed).IsLessThan(TimeSpan.FromSeconds(1));
await That(sw.Elapsed).IsLessThan(TimeSpan.FromSeconds(2));
}

[Fact]
public async Task Within_ShouldReturnAsyncVerificationResult()
{
IChocolateDispenser sut = Mock.Create<IChocolateDispenser>();

VerificationResult<IChocolateDispenser> result = sut.VerifyMock.Invoked.Dispense(Match.AnyParameters())
.Within(TimeSpan.FromMilliseconds(100));

await That(result).Is<IAsyncVerificationResult>();
}

[Fact]
Expand Down