Skip to content

Commit bfc5b24

Browse files
rogeralsingclaude
andcommitted
Split test names on . _ and , for better grouping
Handles test names like: - Namespace.Class.Method (traditional) - Array_includes_length (underscore separated) - Parameters with commas 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 776c589 commit bfc5b24

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

Asynkron.TestRunner.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<PackAsTool>true</PackAsTool>
1111
<ToolCommandName>testrunner</ToolCommandName>
1212
<PackageId>Asynkron.TestRunner</PackageId>
13-
<Version>0.5.0</Version>
13+
<Version>0.5.1</Version>
1414
<Authors>Asynkron</Authors>
1515
<Description>A .NET global tool that wraps dotnet test, captures TRX results, tracks test history, and displays regression charts.</Description>
1616
<PackageLicenseExpression>MIT</PackageLicenseExpression>

IsolateRunner.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,8 @@ private Dictionary<string, List<string>> GroupByNamespaceLevel(List<string> test
286286

287287
foreach (var test in tests)
288288
{
289-
// Strip parameters from parameterized tests: "Namespace.Class.Method(params)" -> "Namespace.Class.Method"
290-
var baseName = GetTestBaseName(test);
291-
var parts = baseName.Split('.');
289+
// Split on . and _ to handle various naming conventions
290+
var parts = GetTestNameParts(test);
292291
var prefix = string.Join(".", parts.Take(Math.Min(level + 1, parts.Length)));
293292

294293
if (!groups.ContainsKey(prefix))
@@ -300,13 +299,23 @@ private Dictionary<string, List<string>> GroupByNamespaceLevel(List<string> test
300299
return groups;
301300
}
302301

302+
private static readonly char[] NameSeparators = ['.', '_', ','];
303+
303304
private static string GetTestBaseName(string testName)
304305
{
305306
// Strip parameters: "Namespace.Class.Method(param1, param2)" -> "Namespace.Class.Method"
306307
var parenIndex = testName.IndexOf('(');
307308
return parenIndex > 0 ? testName[..parenIndex] : testName;
308309
}
309310

311+
private static string[] GetTestNameParts(string testName)
312+
{
313+
// Strip parameters first
314+
var baseName = GetTestBaseName(testName);
315+
// Split on . and _ to handle both "Namespace.Class.Method" and "Array_includes_length"
316+
return baseName.Split(NameSeparators, StringSplitOptions.RemoveEmptyEntries);
317+
}
318+
310319
private void MarkCompletedPrefixes(List<string> allTests, HashSet<string> passed)
311320
{
312321
// Group all tests by namespace prefixes at each level
@@ -317,8 +326,7 @@ private void MarkCompletedPrefixes(List<string> allTests, HashSet<string> passed
317326

318327
foreach (var test in allTests)
319328
{
320-
var baseName = GetTestBaseName(test);
321-
var parts = baseName.Split('.');
329+
var parts = GetTestNameParts(test);
322330
for (var i = 1; i <= parts.Length; i++)
323331
{
324332
var prefix = string.Join(".", parts.Take(i));
@@ -330,8 +338,7 @@ private void MarkCompletedPrefixes(List<string> allTests, HashSet<string> passed
330338

331339
foreach (var test in passed)
332340
{
333-
var baseName = GetTestBaseName(test);
334-
var parts = baseName.Split('.');
341+
var parts = GetTestNameParts(test);
335342
for (var i = 1; i <= parts.Length; i++)
336343
{
337344
var prefix = string.Join(".", parts.Take(i));

0 commit comments

Comments
 (0)