diff --git a/Source/aweXpect/That/Delegates/ThatDelegateThrows.WithParamName.cs b/Source/aweXpect/That/Delegates/ThatDelegateThrows.WithParamName.cs
index 17632f72d..472c20b90 100644
--- a/Source/aweXpect/That/Delegates/ThatDelegateThrows.WithParamName.cs
+++ b/Source/aweXpect/That/Delegates/ThatDelegateThrows.WithParamName.cs
@@ -10,14 +10,25 @@ public static partial class ThatDelegateThrows
///
/// Verifies that the actual has an param name.
///
+ ///
+ /// If is , does not verify anything.
+ ///
public static AndOrResult> WithParamName(
this ThatDelegateThrows source,
- string expected)
+ string? expected)
where TException : ArgumentException?
- => new(source.ExpectationBuilder.AddConstraint((it, grammars)
+ {
+ if (expected == null)
+ {
+ return new AndOrResult>(source.ExpectationBuilder, source);
+ }
+
+ return new AndOrResult>(
+ source.ExpectationBuilder.AddConstraint((it, grammars)
=> new ThatException.HasParamNameValueConstraint(
it,
grammars | ExpectationGrammars.Active | ExpectationGrammars.Nested,
expected)),
source);
+ }
}
diff --git a/Source/aweXpect/That/Exceptions/ThatException.HasParamName.cs b/Source/aweXpect/That/Exceptions/ThatException.HasParamName.cs
index d983547b0..b84bea0ee 100644
--- a/Source/aweXpect/That/Exceptions/ThatException.HasParamName.cs
+++ b/Source/aweXpect/That/Exceptions/ThatException.HasParamName.cs
@@ -11,18 +11,21 @@ public static partial class ThatException
///
/// Verifies that the actual has an param name.
///
+ ///
+ /// If is , does not verify anything.
+ ///
public static AndOrResult> HasParamName(
this IThat source,
- string expected)
+ string? expected)
where TException : ArgumentException?
- => new(source.Get().ExpectationBuilder.AddConstraint((it, grammars) =>
- new HasParamNameValueConstraint(it, grammars, expected)),
+ => new(source.Get().ExpectationBuilder.AddConstraint((it, grammars)
+ => new HasParamNameValueConstraint(it, grammars, expected)),
source);
internal class HasParamNameValueConstraint(
string it,
ExpectationGrammars grammars,
- string expected)
+ string? expected)
: ConstraintResult.WithNotNullValue(it, grammars),
IValueConstraint
where TArgumentException : ArgumentException?
@@ -30,7 +33,7 @@ internal class HasParamNameValueConstraint(
public ConstraintResult IsMetBy(Exception? actual)
{
Actual = actual;
- Outcome = actual is TArgumentException argumentException && argumentException.ParamName == expected
+ Outcome = actual is TArgumentException argumentException && (expected is null || argumentException.ParamName == expected)
? Outcome.Success
: Outcome.Failure;
return this;
diff --git a/Tests/aweXpect.Api.Tests/Expected/aweXpect_net8.0.txt b/Tests/aweXpect.Api.Tests/Expected/aweXpect_net8.0.txt
index 5a080c70f..3ff5ecb7f 100644
--- a/Tests/aweXpect.Api.Tests/Expected/aweXpect_net8.0.txt
+++ b/Tests/aweXpect.Api.Tests/Expected/aweXpect_net8.0.txt
@@ -280,7 +280,7 @@ namespace aweXpect
where TException : System.Exception? { }
public static aweXpect.Results.StringEqualityTypeResult> WithMessage(this aweXpect.Delegates.ThatDelegateThrows source, string expected)
where TException : System.Exception? { }
- public static aweXpect.Results.AndOrResult> WithParamName(this aweXpect.Delegates.ThatDelegateThrows source, string expected)
+ public static aweXpect.Results.AndOrResult> WithParamName(this aweXpect.Delegates.ThatDelegateThrows source, string? expected)
where TException : System.ArgumentException? { }
public static aweXpect.Results.AndOrResult> WithRecursiveInnerExceptions(this aweXpect.Delegates.ThatDelegateThrows source, System.Action>> expectations)
where TException : System.Exception? { }
@@ -669,7 +669,7 @@ namespace aweXpect
public static aweXpect.Results.AndOrResult> HasInnerException(this aweXpect.Core.IThat source) { }
public static aweXpect.Results.AndOrResult> HasInnerException(this aweXpect.Core.IThat source, System.Action> expectations) { }
public static aweXpect.Results.StringEqualityTypeResult> HasMessage(this aweXpect.Core.IThat source, string expected) { }
- public static aweXpect.Results.AndOrResult> HasParamName(this aweXpect.Core.IThat source, string expected)
+ public static aweXpect.Results.AndOrResult> HasParamName(this aweXpect.Core.IThat source, string? expected)
where TException : System.ArgumentException? { }
public static aweXpect.Results.AndOrResult> HasRecursiveInnerExceptions(this aweXpect.Core.IThat source, System.Action>> expectations) { }
}
diff --git a/Tests/aweXpect.Api.Tests/Expected/aweXpect_netstandard2.0.txt b/Tests/aweXpect.Api.Tests/Expected/aweXpect_netstandard2.0.txt
index 4285af7a1..e7e99a7e6 100644
--- a/Tests/aweXpect.Api.Tests/Expected/aweXpect_netstandard2.0.txt
+++ b/Tests/aweXpect.Api.Tests/Expected/aweXpect_netstandard2.0.txt
@@ -131,7 +131,7 @@ namespace aweXpect
where TException : System.Exception? { }
public static aweXpect.Results.StringEqualityTypeResult> WithMessage(this aweXpect.Delegates.ThatDelegateThrows source, string expected)
where TException : System.Exception? { }
- public static aweXpect.Results.AndOrResult> WithParamName(this aweXpect.Delegates.ThatDelegateThrows source, string expected)
+ public static aweXpect.Results.AndOrResult> WithParamName(this aweXpect.Delegates.ThatDelegateThrows source, string? expected)
where TException : System.ArgumentException? { }
public static aweXpect.Results.AndOrResult> WithRecursiveInnerExceptions(this aweXpect.Delegates.ThatDelegateThrows source, System.Action>> expectations)
where TException : System.Exception? { }
@@ -454,7 +454,7 @@ namespace aweXpect
public static aweXpect.Results.AndOrResult> HasInnerException(this aweXpect.Core.IThat source) { }
public static aweXpect.Results.AndOrResult> HasInnerException(this aweXpect.Core.IThat source, System.Action> expectations) { }
public static aweXpect.Results.StringEqualityTypeResult> HasMessage(this aweXpect.Core.IThat source, string expected) { }
- public static aweXpect.Results.AndOrResult> HasParamName(this aweXpect.Core.IThat source, string expected)
+ public static aweXpect.Results.AndOrResult> HasParamName(this aweXpect.Core.IThat source, string? expected)
where TException : System.ArgumentException? { }
public static aweXpect.Results.AndOrResult> HasRecursiveInnerExceptions(this aweXpect.Core.IThat source, System.Action>> expectations) { }
}
diff --git a/Tests/aweXpect.Tests/Delegates/ThatDelegate.Throws.WithParamNameTests.cs b/Tests/aweXpect.Tests/Delegates/ThatDelegate.Throws.WithParamNameTests.cs
index f8baa70e4..ea1b7184e 100644
--- a/Tests/aweXpect.Tests/Delegates/ThatDelegate.Throws.WithParamNameTests.cs
+++ b/Tests/aweXpect.Tests/Delegates/ThatDelegate.Throws.WithParamNameTests.cs
@@ -6,6 +6,34 @@ public sealed partial class Throws
{
public class WithParamNameTests
{
+ [Theory]
+ [AutoData]
+ public async Task WhenExpectedIsNull_AndParamNameIsEmpty_ShouldSucceed(string message)
+ {
+ ArgumentException exception = new(message);
+ void Delegate() => throw exception;
+
+ async Task Act()
+ => await That(Delegate).Throws()
+ .WithParamName(null);
+
+ await That(Act).DoesNotThrow();
+ }
+
+ [Theory]
+ [AutoData]
+ public async Task WhenExpectedIsNull_ShouldSucceed(string message)
+ {
+ ArgumentException exception = new(message, nameof(message));
+ void Delegate() => throw exception;
+
+ async Task Act()
+ => await That(Delegate).Throws()
+ .WithParamName(null);
+
+ await That(Act).DoesNotThrow();
+ }
+
[Theory]
[AutoData]
public async Task WhenParamNameIsDifferent_ShouldFail(string message)
diff --git a/Tests/aweXpect.Tests/Exceptions/ThatException.HasParamName.Tests.cs b/Tests/aweXpect.Tests/Exceptions/ThatException.HasParamName.Tests.cs
index f31f6f8e2..422cc4919 100644
--- a/Tests/aweXpect.Tests/Exceptions/ThatException.HasParamName.Tests.cs
+++ b/Tests/aweXpect.Tests/Exceptions/ThatException.HasParamName.Tests.cs
@@ -6,6 +6,30 @@ public class HasParamName
{
public sealed class Tests
{
+ [Theory]
+ [AutoData]
+ public async Task WhenExpectedIsNull_AndParamNameIsEmpty_ShouldSucceed(string message)
+ {
+ ArgumentException subject = new(message);
+
+ async Task Act()
+ => await That(subject).HasParamName(null);
+
+ await That(Act).DoesNotThrow();
+ }
+
+ [Theory]
+ [AutoData]
+ public async Task WhenExpectedIsNull_ShouldSucceed(string message)
+ {
+ ArgumentException subject = new(message, nameof(message));
+
+ async Task Act()
+ => await That(subject).HasParamName(null);
+
+ await That(Act).DoesNotThrow();
+ }
+
[Theory]
[AutoData]
public async Task WhenParamNameIsDifferent_ShouldFail(string message)