From 908fb804e041fea0b79d0fe4fea62e568b577332 Mon Sep 17 00:00:00 2001 From: Manfred Brands Date: Tue, 5 Sep 2023 09:56:06 +0800 Subject: [PATCH] Within is allowed on Nullable when T is supported. --- .../WithinUsage/WithinUsageAnalyzerTests.cs | 15 +++++++++++++++ .../WithinUsage/WithinUsageAnalyzer.cs | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/src/nunit.analyzers.tests/WithinUsage/WithinUsageAnalyzerTests.cs b/src/nunit.analyzers.tests/WithinUsage/WithinUsageAnalyzerTests.cs index 12f6419b..6bbb1a40 100644 --- a/src/nunit.analyzers.tests/WithinUsage/WithinUsageAnalyzerTests.cs +++ b/src/nunit.analyzers.tests/WithinUsage/WithinUsageAnalyzerTests.cs @@ -272,5 +272,20 @@ public void AnalyzeOnNonGenericCollection() RoslynAssert.Valid(analyzer, testCode); } + + [TestCase("double")] + [TestCase("int")] + [TestCase("TimeSpan")] + public void AnalyzeWhenAppliedToEqualityConstraintForNullableValidTypes(string type) + { + string testCode = TestUtility.WrapMethodInClassNamespaceAndAddUsings($@" + [TestCase(null, null)] + public void Test({type}? a, {type}? b) + {{ + Assert.That(a, Is.EqualTo(b).Within(0.1)); + }}"); + + RoslynAssert.Valid(analyzer, testCode); + } } } diff --git a/src/nunit.analyzers/WithinUsage/WithinUsageAnalyzer.cs b/src/nunit.analyzers/WithinUsage/WithinUsageAnalyzer.cs index 6b075d7f..9519a5f5 100644 --- a/src/nunit.analyzers/WithinUsage/WithinUsageAnalyzer.cs +++ b/src/nunit.analyzers/WithinUsage/WithinUsageAnalyzer.cs @@ -142,6 +142,12 @@ private static bool IsTypeSupported(ITypeSymbol type, HashSet? chec if (fullName.Equals("System.DateTimeOffset", StringComparison.Ordinal)) return true; + // Check for Nullable + if (fullName.Equals("System.Nullable`1", StringComparison.Ordinal)) + { + return IsTypeSupported(namedType.TypeArguments[0]); + } + if (fullName.StartsWith("System.Collections.Generic.KeyValuePair`", StringComparison.Ordinal)) { // We pass tolerance to the Value Type.