Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
139 changes: 53 additions & 86 deletions src/TestFramework/TestFramework/Assertions/Assert.IComparable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@ public static void IsGreaterThan<T>(T lowerBound, T value, string? message = "",
return;
}

string userMessage = BuildUserMessageForLowerBoundExpressionAndValueExpression(message, lowerBoundExpression, valueExpression);
ReportAssertIsGreaterThanFailed(lowerBound, value, userMessage);
ReportAssertIsGreaterThanFailed(lowerBound, value, message, lowerBoundExpression, valueExpression);
}

#endregion // IsGreaterThan
Expand Down Expand Up @@ -94,8 +93,7 @@ public static void IsGreaterThanOrEqualTo<T>(T lowerBound, T value, string? mess
return;
}

string userMessage = BuildUserMessageForLowerBoundExpressionAndValueExpression(message, lowerBoundExpression, valueExpression);
ReportAssertIsGreaterThanOrEqualToFailed(lowerBound, value, userMessage);
ReportAssertIsGreaterThanOrEqualToFailed(lowerBound, value, message, lowerBoundExpression, valueExpression);
}

#endregion // IsGreaterThanOrEqualTo
Expand Down Expand Up @@ -139,8 +137,7 @@ public static void IsLessThan<T>(T upperBound, T value, string? message = "", [C
return;
}

string userMessage = BuildUserMessageForUpperBoundExpressionAndValueExpression(message, upperBoundExpression, valueExpression);
ReportAssertIsLessThanFailed(upperBound, value, userMessage);
ReportAssertIsLessThanFailed(upperBound, value, message, upperBoundExpression, valueExpression);
}

#endregion // IsLessThan
Expand Down Expand Up @@ -184,8 +181,7 @@ public static void IsLessThanOrEqualTo<T>(T upperBound, T value, string? message
return;
}

string userMessage = BuildUserMessageForUpperBoundExpressionAndValueExpression(message, upperBoundExpression, valueExpression);
ReportAssertIsLessThanOrEqualToFailed(upperBound, value, userMessage);
ReportAssertIsLessThanOrEqualToFailed(upperBound, value, message, upperBoundExpression, valueExpression);
}

#endregion // IsLessThanOrEqualTo
Expand Down Expand Up @@ -219,17 +215,9 @@ public static void IsPositive<T>(T value, string? message = "", [CallerArgumentE
var zero = default(T);

// Handle special case for floating point NaN values
if (value is float.NaN)
if (value is float.NaN or double.NaN)
{
string userMessage = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsPositiveFailed(value, userMessage);
return;
}

if (value is double.NaN)
{
string userMessage = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsPositiveFailed(value, userMessage);
ReportAssertIsPositiveFailed(value, message, valueExpression);
return;
}

Expand All @@ -238,8 +226,7 @@ public static void IsPositive<T>(T value, string? message = "", [CallerArgumentE
return;
}

string userMessage2 = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsPositiveFailed(value, userMessage2);
ReportAssertIsPositiveFailed(value, message, valueExpression);
}

#endregion // IsPositive
Expand Down Expand Up @@ -273,17 +260,9 @@ public static void IsNegative<T>(T value, string? message = "", [CallerArgumentE
var zero = default(T);

// Handle special case for floating point NaN values
if (value is float.NaN)
{
string userMessage = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsNegativeFailed(value, userMessage);
return;
}

if (value is double.NaN)
if (value is float.NaN or double.NaN)
{
string userMessage = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsNegativeFailed(value, userMessage);
ReportAssertIsNegativeFailed(value, message, valueExpression);
return;
}

Expand All @@ -292,79 +271,67 @@ public static void IsNegative<T>(T value, string? message = "", [CallerArgumentE
return;
}

string userMessage2 = BuildUserMessageForValueExpression(message, valueExpression);
ReportAssertIsNegativeFailed(value, userMessage2);
ReportAssertIsNegativeFailed(value, message, valueExpression);
}

#endregion // IsNegative

[DoesNotReturn]
private static void ReportAssertIsGreaterThanFailed<T>(T lowerBound, T value, string userMessage)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsGreaterThanFailMsg,
userMessage,
ReplaceNulls(lowerBound),
ReplaceNulls(value));
ReportAssertFailed("Assert.IsGreaterThan", finalMessage);
}
private static void ReportAssertIsGreaterThanFailed<T>(T lowerBound, T value, string? userMessage, string lowerBoundExpression, string valueExpression)
=> ReportComparisonFailed("Assert.IsGreaterThan", FrameworkMessages.IsGreaterThanFailedSummary, "lower bound:", lowerBound, value, userMessage, lowerBoundExpression, valueExpression, "<lowerBound>");

[DoesNotReturn]
private static void ReportAssertIsGreaterThanOrEqualToFailed<T>(T lowerBound, T value, string userMessage)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsGreaterThanOrEqualToFailMsg,
userMessage,
ReplaceNulls(lowerBound),
ReplaceNulls(value));
ReportAssertFailed("Assert.IsGreaterThanOrEqualTo", finalMessage);
}
private static void ReportAssertIsGreaterThanOrEqualToFailed<T>(T lowerBound, T value, string? userMessage, string lowerBoundExpression, string valueExpression)
=> ReportComparisonFailed("Assert.IsGreaterThanOrEqualTo", FrameworkMessages.IsGreaterThanOrEqualToFailedSummary, "lower bound:", lowerBound, value, userMessage, lowerBoundExpression, valueExpression, "<lowerBound>");

[DoesNotReturn]
private static void ReportAssertIsLessThanFailed<T>(T upperBound, T value, string userMessage)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsLessThanFailMsg,
userMessage,
ReplaceNulls(upperBound),
ReplaceNulls(value));
ReportAssertFailed("Assert.IsLessThan", finalMessage);
}
private static void ReportAssertIsLessThanFailed<T>(T upperBound, T value, string? userMessage, string upperBoundExpression, string valueExpression)
=> ReportComparisonFailed("Assert.IsLessThan", FrameworkMessages.IsLessThanFailedSummary, "upper bound:", upperBound, value, userMessage, upperBoundExpression, valueExpression, "<upperBound>");

[DoesNotReturn]
private static void ReportAssertIsLessThanOrEqualToFailed<T>(T upperBound, T value, string userMessage)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsLessThanOrEqualToFailMsg,
userMessage,
ReplaceNulls(upperBound),
ReplaceNulls(value));
ReportAssertFailed("Assert.IsLessThanOrEqualTo", finalMessage);
}
private static void ReportAssertIsLessThanOrEqualToFailed<T>(T upperBound, T value, string? userMessage, string upperBoundExpression, string valueExpression)
=> ReportComparisonFailed("Assert.IsLessThanOrEqualTo", FrameworkMessages.IsLessThanOrEqualToFailedSummary, "upper bound:", upperBound, value, userMessage, upperBoundExpression, valueExpression, "<upperBound>");

[DoesNotReturn]
private static void ReportAssertIsPositiveFailed<T>(T value, string userMessage)
private static void ReportComparisonFailed<T>(string assertionName, string summary, string boundLabel, T bound, T value, string? userMessage, string boundExpression, string valueExpression, string boundPlaceholder)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsPositiveFailMsg,
userMessage,
ReplaceNulls(value));
ReportAssertFailed("Assert.IsPositive", finalMessage);
string boundText = AssertionValueRenderer.RenderValue(bound);
string actualText = AssertionValueRenderer.RenderValue(value);
EvidenceBlock evidence = EvidenceBlock.Create()
.AddLine(boundLabel, boundText)
.AddLine("actual:", actualText);

StructuredAssertionMessage structured = new(summary);
structured.WithUserMessage(userMessage);
structured.WithEvidence(evidence);
structured.WithExpectedAndActual(boundText, actualText);
structured.WithCallSiteExpression(FormatCallSiteExpression(assertionName, boundExpression, valueExpression, boundPlaceholder, "<value>"));

ReportAssertFailed(structured);
}

[DoesNotReturn]
private static void ReportAssertIsNegativeFailed<T>(T value, string userMessage)
private static void ReportAssertIsPositiveFailed<T>(T value, string? userMessage, string valueExpression)
=> ReportSignFailed("Assert.IsPositive", FrameworkMessages.IsPositiveFailedSummary, "> 0", value, userMessage, valueExpression);

[DoesNotReturn]
private static void ReportAssertIsNegativeFailed<T>(T value, string? userMessage, string valueExpression)
=> ReportSignFailed("Assert.IsNegative", FrameworkMessages.IsNegativeFailedSummary, "< 0", value, userMessage, valueExpression);

[DoesNotReturn]
private static void ReportSignFailed<T>(string assertionName, string summary, string expectedText, T value, string? userMessage, string valueExpression)
{
string finalMessage = string.Format(
CultureInfo.CurrentCulture,
FrameworkMessages.IsNegativeFailMsg,
userMessage,
ReplaceNulls(value));
ReportAssertFailed("Assert.IsNegative", finalMessage);
string actualText = AssertionValueRenderer.RenderValue(value);
EvidenceBlock evidence = EvidenceBlock.Create()
.AddLine("expected:", expectedText)
.AddLine("actual:", actualText);

StructuredAssertionMessage structured = new(summary);
structured.WithUserMessage(userMessage);
structured.WithEvidence(evidence);
structured.WithExpectedAndActual(expectedText, actualText);
structured.WithCallSiteExpression(FormatCallSiteExpression(assertionName, valueExpression, nameof(value)));

ReportAssertFailed(structured);
}
}
9 changes: 0 additions & 9 deletions src/TestFramework/TestFramework/Assertions/Assert.cs
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,6 @@ private static string BuildUserMessageForThreeExpressions(string? format, string
: $"{callerArgMessagePart} {userMessage}";
}

private static string BuildUserMessageForValueExpression(string? format, string valueExpression)
=> BuildUserMessageForSingleExpression(format, valueExpression, "value");

private static string BuildUserMessageForCollectionExpression(string? format, string collectionExpression)
=> BuildUserMessageForSingleExpression(format, collectionExpression, "collection");

Expand All @@ -310,12 +307,6 @@ private static string BuildUserMessageForNotExpectedPrefixExpressionAndValueExpr
private static string BuildUserMessageForPatternExpressionAndValueExpression(string? format, string patternExpression, string valueExpression)
=> BuildUserMessageForTwoExpressions(format, patternExpression, "pattern", valueExpression, "value");

private static string BuildUserMessageForLowerBoundExpressionAndValueExpression(string? format, string lowerBoundExpression, string valueExpression)
=> BuildUserMessageForTwoExpressions(format, lowerBoundExpression, "lowerBound", valueExpression, "value");

private static string BuildUserMessageForUpperBoundExpressionAndValueExpression(string? format, string upperBoundExpression, string valueExpression)
=> BuildUserMessageForTwoExpressions(format, upperBoundExpression, "upperBound", valueExpression, "value");

private static string BuildUserMessageForExpectedExpressionAndCollectionExpression(string? format, string expectedExpression, string collectionExpression)
=> BuildUserMessageForTwoExpressions(format, expectedExpression, "expected", collectionExpression, "collection");

Expand Down
18 changes: 18 additions & 0 deletions src/TestFramework/TestFramework/Resources/FrameworkMessages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -420,4 +420,22 @@ Actual: {2}</value>
<data name="IsNotNullFailedSummary" xml:space="preserve">
<value>Expected value to not be null.</value>
</data>
<data name="IsGreaterThanFailedSummary" xml:space="preserve">
<value>Expected value to be greater than the lower bound.</value>
</data>
<data name="IsGreaterThanOrEqualToFailedSummary" xml:space="preserve">
<value>Expected value to be greater than or equal to the lower bound.</value>
</data>
<data name="IsLessThanFailedSummary" xml:space="preserve">
<value>Expected value to be less than the upper bound.</value>
</data>
<data name="IsLessThanOrEqualToFailedSummary" xml:space="preserve">
<value>Expected value to be less than or equal to the upper bound.</value>
</data>
<data name="IsPositiveFailedSummary" xml:space="preserve">
<value>Expected value to be positive.</value>
</data>
<data name="IsNegativeFailedSummary" xml:space="preserve">
<value>Expected value to be negative.</value>
</data>
</root>
Comment thread
Evangelink marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,16 @@ Skutečnost: {2}</target>
<target state="new">Expected condition to be false.</target>
<note />
</trans-unit>
<trans-unit id="IsGreaterThanFailedSummary">
<source>Expected value to be greater than the lower bound.</source>
<target state="new">Expected value to be greater than the lower bound.</target>
<note />
</trans-unit>
<trans-unit id="IsGreaterThanOrEqualToFailedSummary">
<source>Expected value to be greater than or equal to the lower bound.</source>
<target state="new">Expected value to be greater than or equal to the lower bound.</target>
<note />
</trans-unit>
<trans-unit id="IsInRangeFail">
<source>Value '{0}' is not within the expected range [{1}..{2}]. {3}</source>
<target state="translated">Hodnota {0} není v očekávaném rozsahu [{1}..{2}]. {3}</target>
Expand All @@ -292,11 +302,26 @@ Skutečnost: {2}</target>
<target state="translated">{0} Očekávaný typ:&lt;{1}&gt;. Aktuální typ:&lt;{2}&gt;.</target>
<note></note>
</trans-unit>
<trans-unit id="IsLessThanFailedSummary">
<source>Expected value to be less than the upper bound.</source>
<target state="new">Expected value to be less than the upper bound.</target>
<note />
</trans-unit>
<trans-unit id="IsLessThanOrEqualToFailedSummary">
<source>Expected value to be less than or equal to the upper bound.</source>
<target state="new">Expected value to be less than or equal to the upper bound.</target>
<note />
</trans-unit>
<trans-unit id="IsMatchFail">
<source>String '{0}' does not match pattern '{1}'. {2}</source>
<target state="translated">Řetězec „{0}“ neodpovídá vzoru „{1}“. {2}</target>
<note />
</trans-unit>
<trans-unit id="IsNegativeFailedSummary">
<source>Expected value to be negative.</source>
<target state="new">Expected value to be negative.</target>
<note />
</trans-unit>
<trans-unit id="IsNotEmptyFailMsg">
<source>Expected collection to contain any item but it is empty. {0}</source>
<target state="translated">Očekávalo se, že kolekce bude obsahovat libovolnou položku, ale je prázdná. {0}</target>
Expand Down Expand Up @@ -332,6 +357,11 @@ Skutečnost: {2}</target>
<target state="new">Expected value to be null.</target>
<note />
</trans-unit>
<trans-unit id="IsPositiveFailedSummary">
<source>Expected value to be positive.</source>
<target state="new">Expected value to be positive.</target>
<note />
</trans-unit>
<trans-unit id="IsTrueFailedSummary">
<source>Expected condition to be true.</source>
<target state="new">Expected condition to be true.</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,16 @@ Tatsächlich: {2}</target>
<target state="new">Expected condition to be false.</target>
<note />
</trans-unit>
<trans-unit id="IsGreaterThanFailedSummary">
<source>Expected value to be greater than the lower bound.</source>
<target state="new">Expected value to be greater than the lower bound.</target>
<note />
</trans-unit>
<trans-unit id="IsGreaterThanOrEqualToFailedSummary">
<source>Expected value to be greater than or equal to the lower bound.</source>
<target state="new">Expected value to be greater than or equal to the lower bound.</target>
<note />
</trans-unit>
<trans-unit id="IsInRangeFail">
<source>Value '{0}' is not within the expected range [{1}..{2}]. {3}</source>
<target state="translated">Der Wert „{0}“ liegt nicht im erwarteten Bereich [{1}..{2}]. {3}</target>
Expand All @@ -292,11 +302,26 @@ Tatsächlich: {2}</target>
<target state="translated">{0}Erwarteter Typ:&lt;{1}&gt;. Tatsächlicher Typ:&lt;{2}&gt;.</target>
<note></note>
</trans-unit>
<trans-unit id="IsLessThanFailedSummary">
<source>Expected value to be less than the upper bound.</source>
<target state="new">Expected value to be less than the upper bound.</target>
<note />
</trans-unit>
<trans-unit id="IsLessThanOrEqualToFailedSummary">
<source>Expected value to be less than or equal to the upper bound.</source>
<target state="new">Expected value to be less than or equal to the upper bound.</target>
<note />
</trans-unit>
<trans-unit id="IsMatchFail">
<source>String '{0}' does not match pattern '{1}'. {2}</source>
<target state="translated">Die Zeichenfolge „{0}“ stimmt nicht mit dem Muster „{1}“ überein. {2}</target>
<note />
</trans-unit>
<trans-unit id="IsNegativeFailedSummary">
<source>Expected value to be negative.</source>
<target state="new">Expected value to be negative.</target>
<note />
</trans-unit>
<trans-unit id="IsNotEmptyFailMsg">
<source>Expected collection to contain any item but it is empty. {0}</source>
<target state="translated">Es wurde erwartet, dass die Sammlung ein beliebiges Element enthält, aber leer ist. {0}</target>
Expand Down Expand Up @@ -332,6 +357,11 @@ Tatsächlich: {2}</target>
<target state="new">Expected value to be null.</target>
<note />
</trans-unit>
<trans-unit id="IsPositiveFailedSummary">
<source>Expected value to be positive.</source>
<target state="new">Expected value to be positive.</target>
<note />
</trans-unit>
<trans-unit id="IsTrueFailedSummary">
<source>Expected condition to be true.</source>
<target state="new">Expected condition to be true.</target>
Expand Down
Loading
Loading