Skip to content

Commit

Permalink
Simplified API to make it more clear
Browse files Browse the repository at this point in the history
- Introduced a WhileNotEqual method instead of WhileEqual with invertTest=false.
  • Loading branch information
AndersAbel committed Feb 20, 2015
1 parent 4b73902 commit be2e7ae
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 18 deletions.
41 changes: 24 additions & 17 deletions Kentor.AuthServices.TestHelpers/SpinWaiter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace Kentor.AuthServices.TestHelpers
public static class SpinWaiter
{
[DebuggerDisplay("TestResult: {result}, {errorMessage}")]
private class TestResult
private struct TestResult
{
public readonly bool result;
public readonly string errorMessage;
Expand All @@ -24,45 +24,52 @@ public TestResult(bool result, string errorMessage)
public readonly static TimeSpan MaxWait = new TimeSpan(0, 0, 0, 0, 500);
public static void While(Func<bool> condition, string failMessage = "Timeout passed without condition becoming false.")
{
While(() => new TestResult(condition(), failMessage));
While(() => new TestResult(condition(), failMessage), true);
}

public static void WhileEqual<T>(Func<T> actual, Func<T> expected, bool invertTest = false)
public static void WhileEqual<T>(Func<T> v1, Func<T> v2)
{
While(v1, v2, true);
}

public static void WhileNotEqual<T>(Func<T> v1, Func<T> v2)
{
While(v1, v2, false);
}

private static void While<T>(Func<T> v1, Func<T> v2, bool spinWhileValue)
{
While(() =>
{
var expectedValue = expected();
var actualValue = actual();
var value2 = v2();
var value1 = v1();
bool testResult;
if (expectedValue == null && actualValue == null)

if (value2 == null && value1 == null)
{
testResult = true;
}
else if (expectedValue != null && actualValue == null)
else if (value2 != null && value1 == null)
{
testResult = false;
}
else if (expectedValue == null && actualValue != null)
else if (value2 == null && value1 != null)
{
testResult = false;
}
else
{
testResult = expectedValue.Equals(actualValue);
}
if (invertTest)
{
testResult = !testResult;
testResult = value2.Equals(value1);
}
return new TestResult(testResult, string.Format("Timeout passed without condition becoming false, expected {0}, last actual value was {1}", expectedValue, actualValue));
});
return new TestResult(testResult, string.Format("Timeout passed without condition becoming false, expected {0}, last actual value was {1}", value2, value1));
}, spinWhileValue);
}

private static void While(Func<TestResult> testFunction)
private static void While(Func<TestResult> testFunction, bool spinWhileValue)
{
var waitStart = DateTime.UtcNow;
var result = testFunction();
while (result.result)
while (result.result == spinWhileValue)
{
if (DateTime.UtcNow - waitStart > MaxWait)
{
Expand Down
2 changes: 1 addition & 1 deletion Kentor.AuthServices.Tests/FederationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ public void Federation_ReloadOfMetadata_RemovesAllIdpsIfMetadataIsNoLongerValid(

MetadataServer.IdpAndFederationShortCacheDurationAvailable = false;

SpinWaiter.WhileEqual(() => subject.MetadataValidUntil, () => DateTime.MinValue, true);
SpinWaiter.WhileNotEqual(() => subject.MetadataValidUntil, () => DateTime.MinValue);

options.IdentityProviders.TryGetValue(new EntityId("http://idp1.federation.example.com/metadata"), out idp)
.Should().BeFalse("idp should be removed if metadata is no longer valid");
Expand Down

0 comments on commit be2e7ae

Please sign in to comment.