Skip to content

Commit a3b4672

Browse files
authored
Merge pull request #524 from manfred-brands/issue523_TestCaseData
TestCaseSource now ignore all classes derived from TestCaseParameters
2 parents da32943 + 58bfb8f commit a3b4672

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

src/nunit.analyzers.tests/Constants/NUnitFrameworkConstantsTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using NUnit.Framework;
77
using NUnit.Framework.Constraints;
88
using NUnit.Framework.Interfaces;
9+
using NUnit.Framework.Internal;
910

1011
namespace NUnit.Analyzers.Tests.Constants
1112
{
@@ -140,6 +141,7 @@ public sealed class NUnitFrameworkConstantsTests
140141
(nameof(NUnitFrameworkConstants.FullNameOfTypeISimpleTestBuilder), typeof(ISimpleTestBuilder)),
141142
(nameof(NUnitFrameworkConstants.FullNameOfTypeIParameterDataSource), typeof(IParameterDataSource)),
142143
(nameof(NUnitFrameworkConstants.FullNameOfTypeTestCaseData), typeof(TestCaseData)),
144+
(nameof(NUnitFrameworkConstants.FullNameOfTypeTestCaseParameters), typeof(TestCaseParameters)),
143145

144146
(nameof(NUnitFrameworkConstants.FullNameOfTypeOneTimeSetUpAttribute), typeof(OneTimeSetUpAttribute)),
145147
(nameof(NUnitFrameworkConstants.FullNameOfTypeOneTimeTearDownAttribute), typeof(OneTimeTearDownAttribute)),

src/nunit.analyzers.tests/TestCaseSourceUsage/TestCaseSourceUsesStringAnalyzerTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,7 @@ static IEnumerable<object> TestData()
658658
[TestCase("IEnumerable", "object", "System.Collections")]
659659
[TestCase("IEnumerable<object>", "object", "System.Collections.Generic")]
660660
[TestCase("IEnumerable<TestCaseData>", "TestCaseData", "System.Collections.Generic")]
661+
[TestCase("IEnumerable<TestCaseParameters>", "TestCaseParameters", "System.Collections.Generic; using NUnit.Framework.Internal")]
661662
[TestCase("IEnumerable<int>", "int", "System.Collections.Generic")]
662663
public void NoIssueIsRaisedWhenOneParameterIsExpectedAndTypeCannotBeDetermined(string enumerableType, string testCaseType, string collections)
663664
{
@@ -681,6 +682,7 @@ public void ShortName(int n)
681682
[TestCase("IEnumerable", "object", "System.Collections")]
682683
[TestCase("IEnumerable<object>", "object", "System.Collections.Generic")]
683684
[TestCase("IEnumerable<TestCaseData>", "TestCaseData", "System.Collections.Generic")]
685+
[TestCase("IEnumerable<TestCaseParameters>", "TestCaseParameters", "System.Collections.Generic; using NUnit.Framework.Internal")]
684686
public void NoIssueIsRaisedWhenMultipleParameterAreExpectedAndTypeCannotBeDetermined(string enumerableType, string testCaseType, string collections)
685687
{
686688
var testCode = TestUtility.WrapClassInNamespaceAndAddUsing($@"

src/nunit.analyzers/Constants/NUnitFrameworkConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public static class NUnitFrameworkConstants
108108
public const string FullNameOfTypeValueSourceAttribute = "NUnit.Framework.ValueSourceAttribute";
109109
public const string FullNameOfTypeIParameterDataSource = "NUnit.Framework.Interfaces.IParameterDataSource";
110110
public const string FullNameOfTypeTestCaseData = "NUnit.Framework.TestCaseData";
111+
public const string FullNameOfTypeTestCaseParameters = "NUnit.Framework.Internal.TestCaseParameters";
111112

112113
public const string FullNameOfTypeOneTimeSetUpAttribute = "NUnit.Framework.OneTimeSetUpAttribute";
113114
public const string FullNameOfTypeOneTimeTearDownAttribute = "NUnit.Framework.OneTimeTearDownAttribute";

src/nunit.analyzers/TestCaseSourceUsage/TestCaseSourceUsesStringAnalyzer.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ private static void AnalyzeAttribute(SyntaxNodeAnalysisContext context)
226226
var (methodRequiredParameters, methodOptionalParameters, methodParamsParameters) = testMethod.GetParameterCounts();
227227

228228
if (elementType.SpecialType != SpecialType.System_String && (elementType.SpecialType == SpecialType.System_Object || elementType.IsIEnumerable(out _) ||
229-
SymbolEqualityComparer.Default.Equals(elementType, context.SemanticModel.Compilation.GetTypeByMetadataName(NUnitFrameworkConstants.FullNameOfTypeTestCaseData))))
229+
IsOrDerivesFrom(elementType, context.SemanticModel.Compilation.GetTypeByMetadataName(NUnitFrameworkConstants.FullNameOfTypeTestCaseParameters))))
230230
{
231231
// We only know that there is 1 or (likely) more parameters.
232232
// The object could hide an array, possibly with a variable number of elements: TestCaseData.Argument.
@@ -306,5 +306,27 @@ private static void ReportIfParametersSupplied(
306306
kind));
307307
}
308308
}
309+
310+
private static bool IsOrDerivesFrom(ITypeSymbol type, ITypeSymbol? baseType)
311+
{
312+
if (baseType is null)
313+
{
314+
return false;
315+
}
316+
317+
ITypeSymbol? typeAtHand = type;
318+
do
319+
{
320+
if (SymbolEqualityComparer.Default.Equals(typeAtHand, baseType))
321+
{
322+
return true;
323+
}
324+
325+
typeAtHand = typeAtHand.BaseType;
326+
}
327+
while (typeAtHand is not null);
328+
329+
return false;
330+
}
309331
}
310332
}

0 commit comments

Comments
 (0)