From 8452c54f7059f25b822a32bcd5cdb1fbc454230a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 25 Nov 2025 16:49:07 +0000 Subject: [PATCH 1/4] Initial plan From e8216d3807b084f7a63662068e54e1527503a644 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 25 Nov 2025 16:55:44 +0000 Subject: [PATCH 2/4] Document Using(StringComparison) and Using(CultureInfo) modifiers for string constraints Co-authored-by: OsirisTerje <203432+OsirisTerje@users.noreply.github.com> --- .../constraints/EndsWithConstraint.md | 17 ++++++++++++++++ .../constraints/StartsWithConstraint.md | 17 ++++++++++++++++ .../constraints/SubstringConstraint.md | 20 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md index a7d0b9a81..3021732c7 100644 --- a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md @@ -19,6 +19,8 @@ EndsWith(string expected) ```csharp ...IgnoreCase +...Using(StringComparison comparisonType) +...Using(CultureInfo culture) ``` ## Examples of Use @@ -30,6 +32,21 @@ Assert.That(phrase, Does.EndWith("!")); Assert.That(phrase, Does.EndWith("PASSING!").IgnoreCase); ``` +### Specifying a StringComparison + +```csharp +Assert.That("Hello World!", Does.EndWith("WORLD!").Using(StringComparison.OrdinalIgnoreCase)); +Assert.That("Hello World!", Does.EndWith("World!").Using(StringComparison.Ordinal)); +``` + +### Specifying a CultureInfo + +```csharp +Assert.That("Test Straße", Does.EndWith("ss").Using(new CultureInfo("de-DE"))); +``` + ## Notes 1. **EndsWith** may appear only in the body of a constraint expression or when the inherited syntax is used. +2. Only one `Using` modifier may be specified. Attempting to use multiple `Using` modifiers + will throw an `InvalidOperationException`. diff --git a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md index cb56656d6..ffc977733 100644 --- a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md @@ -19,6 +19,8 @@ StartsWith(string expected) ```csharp ...IgnoreCase +...Using(StringComparison comparisonType) +...Using(CultureInfo culture) ``` ## Examples of Use @@ -30,7 +32,22 @@ Assert.That(phrase, Does.StartWith("Make")); Assert.That(phrase, Does.Not.StartWith("Break")); ``` +### Specifying a StringComparison + +```csharp +Assert.That("Hello World!", Does.StartWith("HELLO").Using(StringComparison.OrdinalIgnoreCase)); +Assert.That("Hello World!", Does.StartWith("Hello").Using(StringComparison.Ordinal)); +``` + +### Specifying a CultureInfo + +```csharp +Assert.That("Straße test", Does.StartWith("ss").Using(new CultureInfo("de-DE"))); +``` + ## Notes 1. **StartsWith** may appear only in the body of a constraint expression or when the inherited syntax is used. +2. Only one `Using` modifier may be specified. Attempting to use multiple `Using` modifiers + will throw an `InvalidOperationException`. diff --git a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md index d09512376..f614a1cca 100644 --- a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md @@ -18,8 +18,28 @@ Does.Contain(string expected) ```csharp ...IgnoreCase +...Using(StringComparison comparisonType) +...Using(CultureInfo culture) ``` ## Examples of Use [!code-csharp[StringConstraintExamples](~/snippets/Snippets.NUnit/ConstraintExamples.cs#StringConstraintExamples)] + +### Specifying a StringComparison + +```csharp +Assert.That("Hello World!", Does.Contain("WORLD").Using(StringComparison.OrdinalIgnoreCase)); +Assert.That("Hello World!", Does.Contain("World").Using(StringComparison.Ordinal)); +``` + +### Specifying a CultureInfo + +```csharp +Assert.That("Straße", Does.Contain("ss").Using(new CultureInfo("de-DE"))); +``` + +## Notes + +1. Only one `Using` modifier may be specified. Attempting to use multiple `Using` modifiers + will throw an `InvalidOperationException`. From 67d09cc936e9e7a95977698bdb4f800340c91f55 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 25 Nov 2025 16:57:52 +0000 Subject: [PATCH 3/4] Fix CultureInfo examples to use more appropriate Turkish culture case comparison Co-authored-by: OsirisTerje <203432+OsirisTerje@users.noreply.github.com> --- .../nunit/writing-tests/constraints/EndsWithConstraint.md | 5 ++++- .../nunit/writing-tests/constraints/StartsWithConstraint.md | 5 ++++- .../nunit/writing-tests/constraints/SubstringConstraint.md | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md index 3021732c7..dc1fe24b2 100644 --- a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md @@ -41,8 +41,11 @@ Assert.That("Hello World!", Does.EndWith("World!").Using(StringComparison.Ordina ### Specifying a CultureInfo +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: + ```csharp -Assert.That("Test Straße", Does.EndWith("ss").Using(new CultureInfo("de-DE"))); +// Using Turkish culture where 'i' and 'I' have special casing rules +Assert.That("text TITLE", Does.EndWith("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); ``` ## Notes diff --git a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md index ffc977733..b4a30ffbe 100644 --- a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md @@ -41,8 +41,11 @@ Assert.That("Hello World!", Does.StartWith("Hello").Using(StringComparison.Ordin ### Specifying a CultureInfo +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: + ```csharp -Assert.That("Straße test", Does.StartWith("ss").Using(new CultureInfo("de-DE"))); +// Using Turkish culture where 'i' and 'I' have special casing rules +Assert.That("TITLE", Does.StartWith("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); ``` ## Notes diff --git a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md index f614a1cca..d0ca92b94 100644 --- a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md @@ -35,8 +35,11 @@ Assert.That("Hello World!", Does.Contain("World").Using(StringComparison.Ordinal ### Specifying a CultureInfo +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: + ```csharp -Assert.That("Straße", Does.Contain("ss").Using(new CultureInfo("de-DE"))); +// Using Turkish culture where 'i' and 'I' have special casing rules +Assert.That("Hello TITLE World", Does.Contain("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); ``` ## Notes From 4347beb411adc258ccb312ec83d455219e43cbe2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 25 Nov 2025 16:59:22 +0000 Subject: [PATCH 4/4] Improve CultureInfo examples to show both case-sensitive and case-insensitive usage Co-authored-by: OsirisTerje <203432+OsirisTerje@users.noreply.github.com> --- .../nunit/writing-tests/constraints/EndsWithConstraint.md | 6 +++++- .../writing-tests/constraints/StartsWithConstraint.md | 8 ++++++-- .../writing-tests/constraints/SubstringConstraint.md | 6 +++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md index dc1fe24b2..e36bc4d7f 100644 --- a/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/EndsWithConstraint.md @@ -41,11 +41,15 @@ Assert.That("Hello World!", Does.EndWith("World!").Using(StringComparison.Ordina ### Specifying a CultureInfo -The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons. +It can be combined with `.IgnoreCase` for case-insensitive culture-aware comparisons: ```csharp // Using Turkish culture where 'i' and 'I' have special casing rules Assert.That("text TITLE", Does.EndWith("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); + +// Culture-specific comparison without case-insensitivity +Assert.That("Main Straße", Does.EndWith("Straße").Using(new CultureInfo("de-DE"))); ``` ## Notes diff --git a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md index b4a30ffbe..04e18611a 100644 --- a/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/StartsWithConstraint.md @@ -41,11 +41,15 @@ Assert.That("Hello World!", Does.StartWith("Hello").Using(StringComparison.Ordin ### Specifying a CultureInfo -The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons. +It can be combined with `.IgnoreCase` for case-insensitive culture-aware comparisons: ```csharp // Using Turkish culture where 'i' and 'I' have special casing rules -Assert.That("TITLE", Does.StartWith("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); +Assert.That("TITLE text", Does.StartWith("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); + +// Culture-specific comparison without case-insensitivity +Assert.That("Straße Street", Does.StartWith("Straße").Using(new CultureInfo("de-DE"))); ``` ## Notes diff --git a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md index d0ca92b94..b06f36ea3 100644 --- a/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md +++ b/docs/articles/nunit/writing-tests/constraints/SubstringConstraint.md @@ -35,11 +35,15 @@ Assert.That("Hello World!", Does.Contain("World").Using(StringComparison.Ordinal ### Specifying a CultureInfo -The `Using(CultureInfo)` modifier allows for culture-specific string comparisons: +The `Using(CultureInfo)` modifier allows for culture-specific string comparisons. +It can be combined with `.IgnoreCase` for case-insensitive culture-aware comparisons: ```csharp // Using Turkish culture where 'i' and 'I' have special casing rules Assert.That("Hello TITLE World", Does.Contain("title").IgnoreCase.Using(new CultureInfo("tr-TR"))); + +// Culture-specific comparison without case-insensitivity +Assert.That("Straße Street", Does.Contain("Straße").Using(new CultureInfo("de-DE"))); ``` ## Notes