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
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 @@ -51,8 +51,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 @@ -98,8 +97,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 @@ -145,8 +143,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 @@ -192,8 +189,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 @@ -229,17 +225,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 @@ -248,8 +236,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 @@ -285,17 +272,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 @@ -304,79 +283,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 @@ -298,12 +295,6 @@ private static string BuildUserMessageForSubstringExpressionAndValueExpression(s
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
36 changes: 18 additions & 18 deletions src/TestFramework/TestFramework/Resources/FrameworkMessages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -328,24 +328,6 @@ Actual: {2}</value>
<data name="DoesNotContainFail" xml:space="preserve">
<value>String '{0}' does contain string '{1}'. {2}.</value>
</data>
<data name="IsGreaterThanFailMsg" xml:space="preserve">
<value>Actual value &lt;{2}&gt; is not greater than expected value &lt;{1}&gt;. {0}</value>
</data>
<data name="IsGreaterThanOrEqualToFailMsg" xml:space="preserve">
<value>Actual value &lt;{2}&gt; is not greater than or equal to expected value &lt;{1}&gt;. {0}</value>
</data>
<data name="IsLessThanFailMsg" xml:space="preserve">
<value>Actual value &lt;{2}&gt; is not less than expected value &lt;{1}&gt;. {0}</value>
</data>
<data name="IsLessThanOrEqualToFailMsg" xml:space="preserve">
<value>Actual value &lt;{2}&gt; is not less than or equal to expected value &lt;{1}&gt;. {0}</value>
</data>
<data name="IsPositiveFailMsg" xml:space="preserve">
<value>Expected value &lt;{1}&gt; to be positive. {0}</value>
</data>
<data name="IsNegativeFailMsg" xml:space="preserve">
<value>Expected value &lt;{1}&gt; to be negative. {0}</value>
</data>
<data name="DoesNotEndWithFail" xml:space="preserve">
<value>String '{0}' ends with string '{1}'. {2}</value>
</data>
Expand Down Expand Up @@ -420,6 +402,24 @@ 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>
<data name="StartsWithFailedSummary" xml:space="preserve">
<value>Expected string to start with the specified prefix.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,16 @@ Skutečnost: {2}</target>
<target state="translated">Očekávala se podmínka 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 @@ -307,11 +317,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 @@ -347,6 +372,11 @@ Skutečnost: {2}</target>
<target state="translated">Očekávaná hodnota bude 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="translated">Očekávala se podmínka true.</target>
Expand Down Expand Up @@ -463,36 +493,6 @@ Skutečnost: {2}</target>
<target state="translated">Vlastnost nebo metoda {0} ve třídě {1} vrací prázdné IEnumerable&lt;object[]&gt;.</target>
<note></note>
</trans-unit>
<trans-unit id="IsGreaterThanFailMsg">
<source>Actual value &lt;{2}&gt; is not greater than expected value &lt;{1}&gt;. {0}</source>
<target state="translated">Skutečná hodnota &lt;{2}&gt; není větší než očekávaná hodnota &lt;{1}&gt;. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="IsGreaterThanOrEqualToFailMsg">
<source>Actual value &lt;{2}&gt; is not greater than or equal to expected value &lt;{1}&gt;. {0}</source>
<target state="translated">Skutečná hodnota &lt;{2}&gt; není větší nebo rovna očekávané hodnotě &lt;{1}&gt;. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="IsLessThanFailMsg">
<source>Actual value &lt;{2}&gt; is not less than expected value &lt;{1}&gt;. {0}</source>
<target state="translated">Skutečná hodnota &lt;{2}&gt; není menší než očekávaná hodnota &lt;{1}&gt;. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="IsLessThanOrEqualToFailMsg">
<source>Actual value &lt;{2}&gt; is not less than or equal to expected value &lt;{1}&gt;. {0}</source>
<target state="translated">Skutečná hodnota &lt;{2}&gt; není menší nebo rovna očekávané hodnotě &lt;{1}&gt;. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="IsPositiveFailMsg">
<source>Expected value &lt;{1}&gt; to be positive. {0}</source>
<target state="translated">Očekávaná hodnota &lt;{1}&gt; má být kladná. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="IsNegativeFailMsg">
<source>Expected value &lt;{1}&gt; to be negative. {0}</source>
<target state="translated">Očekávaná hodnota &lt;{1}&gt; má být záporná. {0}</target>
<note></note>
</trans-unit>
<trans-unit id="DoNotUseAssertEquals">
<source>Assert.Equals should not be used for Assertions. Please use Assert.AreEqual &amp; overloads instead.</source>
<target state="translated">Assert.Equals by neměla být pro kontrolní výrazy používána. Použijte prosím místo toho Assert.AreEqual a její přetížení.</target>
Expand Down
Loading