(capabilities);
diff --git a/src/TUnit.Engine/Reporters/Html/TestReport.template.html b/src/TUnit.Engine/Reporters/Html/TestReport.template.html
index 471b23de10..4814fe09d9 100644
--- a/src/TUnit.Engine/Reporters/Html/TestReport.template.html
+++ b/src/TUnit.Engine/Reporters/Html/TestReport.template.html
@@ -615,8 +615,8 @@
/* ============================== run view ============================== */
.run-wrap { max-width: 1280px; margin: 0 auto; padding: 28px 28px 80px; }
- .run-grid-1 { display: grid; grid-template-columns: 320px 1fr 1fr; gap: 16px; margin-bottom: 16px; }
- @media (max-width: 1100px) { .run-grid-1 { grid-template-columns: 1fr; } }
+ .run-grid-1 { display: grid; grid-template-columns: 320px minmax(0, 1fr) minmax(0, 1fr); gap: 16px; margin-bottom: 16px; }
+ @media (max-width: 1100px) { .run-grid-1 { grid-template-columns: minmax(0, 1fr); } }
.run-grid-2 { display: grid; grid-template-columns: 1.3fr 1fr; gap: 16px; margin-bottom: 16px; }
@media (max-width: 1100px) { .run-grid-2 { grid-template-columns: 1fr; } }
@@ -656,6 +656,8 @@
/* strip card */
.strip-card { padding: 20px; }
.strip-card .card-title { margin-bottom: 14px; }
+ .outcome-strip-scroll { overflow-x: auto; overflow-y: hidden; padding: 2px 0; }
+ .outcome-strip-content { width: max-content; min-width: 100%; }
.outcome-strip { display: flex; gap: 1px; height: 60px; align-items: stretch; }
.outcome-strip .tick { flex: 1; min-width: 2px; border-radius: 2px; opacity: 0.85; transition: opacity 100ms, transform 100ms; cursor: pointer; }
.outcome-strip .tick:hover { opacity: 1; transform: scaleY(1.06); }
@@ -994,7 +996,7 @@
/* run view: stacked, tighter */
.run-wrap { padding: 20px 18px 80px; }
- .run-grid-1, .run-grid-2 { grid-template-columns: 1fr; gap: 12px; }
+ .run-grid-1, .run-grid-2 { grid-template-columns: minmax(0, 1fr); gap: 12px; }
.donut-card { padding: 18px; }
.panel-head { padding: 12px 16px; }
}
@@ -1236,11 +1238,15 @@ Select a test
diff --git a/tests/TUnit.Engine.Tests/HtmlReporterTests.cs b/tests/TUnit.Engine.Tests/HtmlReporterTests.cs
index 1f03524ade..5d7d646d22 100644
--- a/tests/TUnit.Engine.Tests/HtmlReporterTests.cs
+++ b/tests/TUnit.Engine.Tests/HtmlReporterTests.cs
@@ -375,6 +375,30 @@ public void GenerateHtml_SubstitutesTitleAndProjectPlaceholders()
html.ShouldContain("id=\"projectName\">MyProject.Tests<");
}
+ [Test]
+ public void GenerateHtml_EmitsOutcomeTimelineOverflowCss()
+ {
+ var html = HtmlReportGenerator.GenerateHtml(new ReportData
+ {
+ AssemblyName = "Tests",
+ MachineName = "machine",
+ Timestamp = "2026-08-09T00:00:00.0000000Z",
+ TUnitVersion = "1.0.0",
+ OperatingSystem = "Windows",
+ RuntimeVersion = ".NET 10.0",
+ TotalDurationMs = 0,
+ Summary = new ReportSummary(),
+ Groups = [],
+ });
+
+ html.ShouldContain("grid-template-columns: 320px minmax(0, 1fr) minmax(0, 1fr)");
+ html.ShouldContain("@media (max-width: 1100px) { .run-grid-1 { grid-template-columns: minmax(0, 1fr); } }");
+ html.ShouldContain(".run-grid-1, .run-grid-2 { grid-template-columns: minmax(0, 1fr); gap: 12px; }");
+ html.ShouldContain(".outcome-strip-scroll { overflow-x: auto; overflow-y: hidden; padding: 2px 0; }");
+ html.ShouldContain(".outcome-strip-content { width: max-content; min-width: 100%; }");
+ html.ShouldContain("");
+ }
+
[Test]
public void GenerateHtml_EmitsAttemptsArray_WhenTestWasRetried()
{
diff --git a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt
index 79572a5307..5a112227cf 100644
--- a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt
+++ b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt
@@ -1419,6 +1419,7 @@ namespace
public new static .TestContext? Current { get; }
public static string? OutputDirectory { get; }
public static .> Parameters { get; }
+ public static string ResultsDirectory { get; }
public static string? TestDirectory { get; }
public static string WorkingDirectory { get; set; }
public override string GetErrorOutput() { }
diff --git a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt
index 2474a6a6a6..d88750b2f6 100644
--- a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt
+++ b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt
@@ -1419,6 +1419,7 @@ namespace
public new static .TestContext? Current { get; }
public static string? OutputDirectory { get; }
public static .> Parameters { get; }
+ public static string ResultsDirectory { get; }
public static string? TestDirectory { get; }
public static string WorkingDirectory { get; set; }
public override string GetErrorOutput() { }
diff --git a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt
index 2b264f0477..44da96916c 100644
--- a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt
+++ b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt
@@ -1419,6 +1419,7 @@ namespace
public new static .TestContext? Current { get; }
public static string? OutputDirectory { get; }
public static .> Parameters { get; }
+ public static string ResultsDirectory { get; }
public static string? TestDirectory { get; }
public static string WorkingDirectory { get; set; }
public override string GetErrorOutput() { }
diff --git a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt
index 9d54d88026..6d64639253 100644
--- a/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt
+++ b/tests/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt
@@ -1363,6 +1363,7 @@ namespace
public new static .TestContext? Current { get; }
public static string? OutputDirectory { get; }
public static .> Parameters { get; }
+ public static string ResultsDirectory { get; }
public static string? TestDirectory { get; }
public static string WorkingDirectory { get; set; }
public override string GetErrorOutput() { }
diff --git a/tests/TUnit.TestProject/TestContextTests.cs b/tests/TUnit.TestProject/TestContextTests.cs
index b02c214794..8aa01b51cf 100644
--- a/tests/TUnit.TestProject/TestContextTests.cs
+++ b/tests/TUnit.TestProject/TestContextTests.cs
@@ -6,6 +6,17 @@ namespace TUnit.TestProject;
[EngineTest(ExpectedResult.Pass)]
public class TestContextTests
{
+ [Test]
+ public async Task ResultsDirectory_Is_Exposed()
+ {
+ var resultsDirectory = TestContext.ResultsDirectory;
+
+ await Assert.That(Path.IsPathFullyQualified(resultsDirectory)).IsTrue();
+ await Assert.That(Directory.Exists(resultsDirectory)).IsTrue();
+ await Assert.That(resultsDirectory)
+ .IsEqualTo(TestContext.Configuration.Get("platformOptions:resultDirectory"));
+ }
+
[Test]
public async Task Test()
{