Skip to content

Render span tags and events on separate lines#5113

Merged
thomhurst merged 5 commits intomainfrom
improve-span-detail-readability
Mar 10, 2026
Merged

Render span tags and events on separate lines#5113
thomhurst merged 5 commits intomainfrom
improve-span-detail-readability

Conversation

@thomhurst
Copy link
Owner

Summary

  • Renders each tag and event in span details on its own line with indentation
  • Previously all tags/events were space-separated on a single line, making them hard to read when there are many entries

Test plan

  • Open an HTML report with spans that have tags and events
  • Verify tags appear one per line, indented under the "Tags:" heading
  • Verify events appear one per line with their tags further indented

Tags and events in span details were space-separated on single lines,
making them hard to read. Each tag/event now renders on its own line
with indentation.
Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The change is small, focused, and achieves the stated goal well — span tags and events are now rendered one-per-line with indentation, which is a clear readability improvement for HTML reports with many entries.

What's good

  • The fix is minimal and scoped exactly to the problem.
  • Consistent indentation logic: 2 levels for tags/events under their heading, 4 levels for tags nested under events.

One concern:   for indentation

Using   entities for visual indentation is fragile:

  • It relies on the font being monospace or fixed-width to look consistent.
  • It is not semantically meaningful (screen readers won't interpret it as structure).
  • It breaks down if the report ever gains a different font or responsive layout.

A more robust approach would be CSS-based indentation via style or a shared CSS class:

// Instead of   , use a styled span or div:
ex += '<br><span style="margin-left:1em">' + esc(t.key) + '=' + esc(t.value) + '</span>';

Or even better — since this is a list of items — semantic <ul>/<li> elements:

if (s.tags && s.tags.length) {
    ex += '<br><strong>Tags:</strong><ul style="margin:2px 0">';
    s.tags.forEach(t => { ex += '<li>' + esc(t.key) + '=' + esc(t.value) + '</li>'; });
    ex += '</ul>';
}

This gives you proper visual indentation from the browser's default list styling (or your CSS), semantic HTML, and better accessibility — all without character-counting &nbsp; entities.

Minor note

The lines remain very long single-liners with nested callbacks, which makes future changes difficult to review. This is inherited from the existing code style, not introduced here, so not a blocker — but worth noting as a general maintenance concern.

Summary

The functional change is correct and an improvement. I'd recommend switching from &nbsp; to CSS-based indentation (or <ul>/<li>) to make the layout more robust and maintainable, but this is a quality-of-life suggestion rather than a blocking issue.

Consistent with the existing inline padding-left pattern used for
span row indentation in the report.
@thomhurst
Copy link
Owner Author

Switched from &nbsp; to padding-left on <div> elements — consistent with the existing inline padding-left pattern used for span row indentation (line 1373). Skipped <ul>/<li> since the report doesn't use list elements anywhere and the default bullet/margin styling would need resetting.

Replace repeated inline style="padding-left:..." with .sp-tag,
.sp-evt, and .sp-evt-tag classes, consistent with how other
.sp-* styles are defined in the report CSS.
Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: Render span tags and events on separate lines

The change achieves its goal and is a clear readability win over the original space-separated single-line output. A few concerns worth addressing:


1. Inline styles instead of CSS classes (maintainability)

The new code emits hardcoded style="padding-left:1em" and style="padding-left:2em" on every rendered element. The existing template already uses a rich set of CSS class names (sp-row, sp-lbl, sp-bar, sp-extra, etc.) defined in the embedded <style> block.

Why it matters: If padding ever needs to change, or a dark-mode/print stylesheet is added, every call site in the JS string must be edited individually. Two different hardcoded values already exist and will diverge further.

Suggested approach: Add two small rules to the existing <style> block:

.sp-indent1 { padding-left: 1em; }
.sp-indent2 { padding-left: 2em; }

Then reference them:

ex += '<div class="sp-indent1">' + esc(t.key) + '=' + esc(t.value) + '</div>';

This is consistent with every other structural element in the same function.


2. Mixing <br> (inline) with <div> (block) siblings

The <br><strong>Tags:</strong> prefix is kept, but the children are now block-level <div> elements. While browsers handle this gracefully today, the <br> creates a blank gap above the first item in some renderings. Replacing the <br> with a wrapping block element produces cleaner, more maintainable HTML:

ex += '<div><strong>Tags:</strong>';
s.tags.forEach(t => { ex += '<div class="sp-indent1">' + esc(t.key) + '=' + esc(t.value) + '</div>'; });
ex += '</div>';

3. Event tags guard inconsistency (minor bug carried forward)

s.tags and s.events are both checked with && .length, but event tags only check if (e.tags). This inconsistency is harmless today but is a latent code-smell. Recommend aligning to:

if (e.tags && e.tags.length) e.tags.forEach(...)

4. Line length

Lines 1381–1382 are now 200+ characters each. The surrounding functions (renderTrace, renderExternalTrace, etc.) use readable multi-line formatting. Splitting these with intermediate variables or indented forEach bodies would make future diffs far easier to review. Since this is an embedded C# string, this is especially valuable.


Summary

Priority Issue
Medium Use CSS classes instead of inline styles
Medium Replace <br> with a wrapping block element
Low Align e.tags && e.tags.length guard
Low Split long lines for readability

The functional improvement is good — the visual rendering will be noticeably better. The main ask is to use CSS classes to keep the template maintainable as it grows.

Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review (Follow-up)

The previous feedback on CSS classes has been addressed — the latest commit introduces .sp-tag, .sp-evt, and .sp-evt-tag classes in the embedded stylesheet and uses them consistently on the <div> elements. That's the right call and consistent with the rest of the template.

Remaining concerns from previous review

1. <br> + block children (still present)

<br><strong>Tags:</strong> is still followed by block-level <div> children. While browsers handle this, the <br> creates an extra blank line gap in some browsers/renderers before the indented items. A wrapping <div> is cleaner:

// Before
ex += '<br><strong>Tags:</strong>';
s.tags.forEach(t => { ex += '<div class="sp-tag">' + esc(t.key) + '=' + esc(t.value) + '</div>'; });

// After
ex += '<div><strong>Tags:</strong>';
s.tags.forEach(t => { ex += '<div class="sp-tag">' + esc(t.key) + '=' + esc(t.value) + '</div>'; });
ex += '</div>';

2. Event tags guard inconsistency (low priority)

s.tags is guarded with && s.tags.length, but nested event tags only check if (e.tags) without .length. An empty array would still enter the loop. Consider aligning:

if (e.tags && e.tags.length) e.tags.forEach(...)

What's good

  • CSS classes are the right approach — separates styling from logic and keeps the template maintainable.
  • The .sp-evt-tag double-indent for tags nested within events is logically correct.
  • Change is tightly scoped to the stated goal.

The two remaining items are low severity — the <br>/block mixing is a minor HTML hygiene issue, and the guard inconsistency is a latent edge case. Neither blocks merging, but both are worth a quick fix while the code is open.

Use block-level wrapper instead of <br> before block children to
avoid extra gap in some renderers. Add .length check to e.tags
guard for consistency with s.tags guard.
Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review (Final)

All previous concerns have been addressed in this revision — the code looks good to merge.

Resolved issues

Issue Status
CSS classes instead of inline styles Resolved — , , added to embedded stylesheet
<br> + block children Resolved — both Tags and Events now wrapped in a block <div>
Event tags guard (e.tags && e.tags.length) Resolved — length check added

One micro-suggestion (non-blocking)

The two new classes have identical declarations:

.sp-tag{padding-left:1em}.sp-evt{padding-left:1em}

These could be combined:

.sp-tag,.sp-evt{padding-left:1em}

Saves a handful of bytes in the embedded stylesheet and avoids the classes drifting out of sync if the value ever changes. Completely fine to leave as-is given the minimal impact.

Overall

The change is clean, tightly scoped, and a genuine readability improvement for HTML reports with many span tags/events. The hierarchy (Tags → tag entries; Events → event name → event tags) is logically correct and visually consistent with the rest of the report's CSS conventions. Happy with the direction.

Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review (Final)

All previous concerns have been addressed in this revision — the code looks good to merge.

Resolved issues

Issue Status
CSS classes instead of inline styles Resolved — .sp-tag, .sp-evt, .sp-evt-tag added to embedded stylesheet
<br> + block children Resolved — both Tags and Events now wrapped in a block <div>
Event tags guard (e.tags && e.tags.length) Resolved — length check added

One micro-suggestion (non-blocking)

The two new classes have identical declarations:

.sp-tag{padding-left:1em}.sp-evt{padding-left:1em}

These could be combined:

.sp-tag,.sp-evt{padding-left:1em}

Saves a handful of bytes in the embedded stylesheet and avoids the classes drifting out of sync if the padding value ever changes. Fine to leave as-is given the minimal impact.

Overall

The change is clean, tightly scoped, and a genuine readability improvement for HTML reports with many span tags/events. The hierarchy (Tags → tag entries; Events → event name → event tags) is logically correct and visually consistent with the rest of the report's CSS conventions. Happy with the direction.

Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Good, focused change that improves HTML report readability. Here are my observations:

What's good

Better structure over raw text: Replacing <br> + space-separated values with proper <div> elements is the right approach — it separates concerns between markup and layout, and allows CSS to control the visual hierarchy cleanly.

Bug fix included: The events rendering now correctly guards with e.tags && e.tags.length before iterating event tags. Previously the check was only if (e.tags) which could iterate an empty array unnecessarily.

CSS is minimal and purposeful: The three new classes (.sp-tag, .sp-evt, .sp-evt-tag) use simple padding-left indentation to express hierarchy — keeps it lean.

Minor concern: maintainability of the JS string-building

The two modified lines (1382–1383) are now very long (200+ characters each). This was already the case before, but the new forEach chains make it harder to parse at a glance:

// Current: single long line
if (s.events && s.events.length) { ex += '<div><strong>Events:</strong>'; s.events.forEach(e => { ex += '<div class=sp-evt>' + esc(e.name) + '</div>'; if (e.tags && e.tags.length) e.tags.forEach(t => { ex += '<div class=sp-evt-tag>' + esc(t.key) + '=' + esc(t.value) + '</div>'; }); }); ex += '</div>'; }

Since this is inlined C# string content in HtmlReportGenerator.cs, I understand the motivation to keep it compact (avoid adding bytes to the emitted HTML). However, this is the source of the report generator, not the emitted output — the JavaScript here could be broken across multiple lines in C# string concatenation without affecting the generated HTML size at all.

A more readable form like:

if (s.events && s.events.length) {
    ex += '<div><strong>Events:</strong>';
    s.events.forEach(e => {
        ex += '<div class="sp-evt">' + esc(e.name) + '</div>';
        if (e.tags && e.tags.length)
            e.tags.forEach(t => { ex += '<div class="sp-evt-tag">' + esc(t.key) + '=' + esc(t.value) + '</div>'; });
    });
    ex += '</div>';
}

…would make future edits far less error-prone. That said, I see the rest of the file follows the same dense style, so I understand keeping it consistent for now.

Summary

The core change is correct, semantically appropriate, and solves a real usability issue. The CSS classes are well-named and the indentation hierarchy (1em → 2em) accurately reflects the data nesting (tags → event tags). No blocking issues.

Copy link
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Good, focused change that improves HTML report readability. Here are my observations:

What's good

Better structure over raw text: Replacing <br> + space-separated values with proper <div> elements is the right approach — it separates concerns between markup and layout, and allows CSS to control the visual hierarchy cleanly.

Bug fix included: The events rendering now correctly guards with e.tags && e.tags.length before iterating event tags. Previously the check was only if (e.tags) (without length check), which could iterate an empty array unnecessarily. Good catch.

CSS is minimal and purposeful: The three new classes (.sp-tag, .sp-evt, .sp-evt-tag) use simple padding-left indentation to express hierarchy — keeps it lean and consistent with the rest of the stylesheet.

Minor concern: maintainability of the JS string-building

Lines 1382–1383 are now very long (200+ chars each). This was already the case before, but the new nested forEach chains make it harder to parse at a glance. Since this is the C# source of the generator — not the emitted HTML — the JavaScript can be split across multiple string concatenations without affecting output size at all.

Consider:

if (s.events && s.events.length) {
    ex += '<div><strong>Events:</strong>';
    s.events.forEach(e => {
        ex += '<div class="sp-evt">' + esc(e.name) + '</div>';
        if (e.tags && e.tags.length)
            e.tags.forEach(t => {
                ex += '<div class="sp-evt-tag">' + esc(t.key) + '=' + esc(t.value) + '</div>';
            });
    });
    ex += '</div>';
}

That said, the rest of the file follows the same dense minified style, so keeping it consistent for now is understandable.

Summary

The core change is correct, semantically appropriate, and addresses a real usability issue. The CSS class naming is clear, the indentation hierarchy (1em tag → 2em event-tag) accurately reflects data nesting, and the incidental e.tags.length guard is a welcome improvement. No blocking issues — good to merge.

@thomhurst thomhurst merged commit a8a19ac into main Mar 10, 2026
18 checks passed
@thomhurst thomhurst deleted the improve-span-detail-readability branch March 10, 2026 00:15
This was referenced Mar 16, 2026
PhilippNaused pushed a commit to PhilippNaused/Bshox that referenced this pull request Mar 18, 2026
Updated [TUnit.Core](https://github.com/thomhurst/TUnit) from 1.19.0 to
1.19.74.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit.Core's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.19.74

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.74 -->

## What's Changed
### Other Changes
* feat: per-hook activity spans with method names by @​thomhurst in
thomhurst/TUnit#5159
* fix: add tooltip to truncated span names in HTML report by @​thomhurst
in thomhurst/TUnit#5164
* Use enum names instead of numeric values in test display names by
@​Copilot in thomhurst/TUnit#5178
* fix: resolve CS8920 when mocking interfaces whose members return
static-abstract interfaces by @​lucaxchaves in
thomhurst/TUnit#5154
### Dependencies
* chore(deps): update tunit to 1.19.57 by @​thomhurst in
thomhurst/TUnit#5157
* chore(deps): update dependency gitversion.msbuild to 6.6.1 by
@​thomhurst in thomhurst/TUnit#5160
* chore(deps): update dependency gitversion.tool to v6.6.1 by
@​thomhurst in thomhurst/TUnit#5161
* chore(deps): update dependency polyfill to 9.20.0 by @​thomhurst in
thomhurst/TUnit#5163
* chore(deps): update dependency polyfill to 9.20.0 by @​thomhurst in
thomhurst/TUnit#5162
* chore(deps): update dependency polyfill to 9.21.0 by @​thomhurst in
thomhurst/TUnit#5166
* chore(deps): update dependency polyfill to 9.21.0 by @​thomhurst in
thomhurst/TUnit#5167
* chore(deps): update dependency polyfill to 9.22.0 by @​thomhurst in
thomhurst/TUnit#5168
* chore(deps): update dependency polyfill to 9.22.0 by @​thomhurst in
thomhurst/TUnit#5169
* chore(deps): update dependency coverlet.collector to 8.0.1 by
@​thomhurst in thomhurst/TUnit#5177

## New Contributors
* @​lucaxchaves made their first contribution in
thomhurst/TUnit#5154

**Full Changelog**:
thomhurst/TUnit@v1.19.57...v1.19.74

## 1.19.57

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.57 -->

## What's Changed
### Other Changes
* fix: use unique artifact names to avoid collisions in matrix builds by
@​thomhurst in thomhurst/TUnit#5132
* fix: resolve IndexOutOfRangeException with MethodDataSource<T> on
class (#​5118) by @​thomhurst in
thomhurst/TUnit#5137
* fix: prevent StringEqualsAssertion from matching non-string types by
@​thomhurst in thomhurst/TUnit#5156
### Dependencies
* chore(deps): update tunit to 1.19.22 by @​thomhurst in
thomhurst/TUnit#5117
* chore(deps): update dependency fsharp.core to 10.0.104 by @​thomhurst
in thomhurst/TUnit#5119
* chore(deps): update dependency microsoft.entityframeworkcore to 10.0.4
by @​thomhurst in thomhurst/TUnit#5120
* chore(deps): update dependency fsharp.core to v11 by @​thomhurst in
thomhurst/TUnit#5128
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.200 by @​thomhurst in
thomhurst/TUnit#5122
* chore(deps): update dependency dotnet-sdk to v10.0.200 by @​thomhurst
in thomhurst/TUnit#5123
* chore(deps): update dependency microsoft.sourcelink.github to 10.0.200
by @​thomhurst in thomhurst/TUnit#5121
* chore(deps): update dependency system.commandline to 2.0.4 by
@​thomhurst in thomhurst/TUnit#5125
* chore(deps): update microsoft.extensions to 10.0.4 by @​thomhurst in
thomhurst/TUnit#5127
* chore(deps): update microsoft.build to 18.4.0 by @​thomhurst in
thomhurst/TUnit#5129
* chore(deps): update microsoft.aspnetcore to 10.0.4 by @​thomhurst in
thomhurst/TUnit#5126
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.200 by
@​thomhurst in thomhurst/TUnit#5124
* chore(deps): update microsoft.extensions to 10.4.0 by @​thomhurst in
thomhurst/TUnit#5130
* chore(deps): update dependency
opentelemetry.instrumentation.aspnetcore to 1.15.1 by @​thomhurst in
thomhurst/TUnit#5136
* chore(deps): update dependency vogen to 8.0.5 by @​thomhurst in
thomhurst/TUnit#5133
* chore(deps): update dependency npgsql to 10.0.2 by @​thomhurst in
thomhurst/TUnit#5139
* chore(deps): update dependency microsoft.sourcelink.github to 10.0.201
by @​thomhurst in thomhurst/TUnit#5141
* chore(deps): update dependency microsoft.entityframeworkcore to 10.0.5
by @​thomhurst in thomhurst/TUnit#5140
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.201 by @​thomhurst in
thomhurst/TUnit#5142
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.201 by
@​thomhurst in thomhurst/TUnit#5143
* chore(deps): update dependency npgsql.entityframeworkcore.postgresql
to 10.0.1 by @​thomhurst in thomhurst/TUnit#5145
* chore(deps): update dependency dotnet-sdk to v10.0.201 by @​thomhurst
in thomhurst/TUnit#5144
* chore(deps): update dependency system.commandline to 2.0.5 by
@​thomhurst in thomhurst/TUnit#5146
* chore(deps): update microsoft.aspnetcore to 10.0.5 by @​thomhurst in
thomhurst/TUnit#5147
* chore(deps): update dependency testcontainers.kafka to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5149
* chore(deps): update microsoft.extensions to 10.0.5 by @​thomhurst in
thomhurst/TUnit#5148
* chore(deps): update dependency testcontainers.postgresql to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5150
* chore(deps): update dependency testcontainers.redis to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5151
* chore(deps): update dependency stackexchange.redis to 2.12.1 by
@​thomhurst in thomhurst/TUnit#5153


**Full Changelog**:
thomhurst/TUnit@v1.19.22...v1.19.57

## 1.19.22

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.22 -->

## What's Changed
### Other Changes
* Remove redundant prefixes from tracing timeline spans by @​thomhurst
in thomhurst/TUnit#5111
* Render span tags and events on separate lines by @​thomhurst in
thomhurst/TUnit#5113
* Demote granular internal logs from Debug to Trace level by @​thomhurst
in thomhurst/TUnit#5116
### Dependencies
* chore(deps): update tunit to 1.19.16 by @​thomhurst in
thomhurst/TUnit#5109


**Full Changelog**:
thomhurst/TUnit@v1.19.16...v1.19.22

## 1.19.16

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.16 -->

## What's Changed
### Other Changes
* Truncate exceptions in GitHub summary tables by @​thomhurst in
thomhurst/TUnit#5108
### Dependencies
* chore(deps): update tunit to 1.19.11 by @​thomhurst in
thomhurst/TUnit#5106
* chore(deps): bump dompurify from 3.3.0 to 3.3.2 in /docs by
@​dependabot[bot] in thomhurst/TUnit#5096
* chore(deps): bump svgo from 3.2.0 to 3.3.3 in /docs by
@​dependabot[bot] in thomhurst/TUnit#5086


**Full Changelog**:
thomhurst/TUnit@v1.19.11...v1.19.16

## 1.19.11

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.11 -->

## What's Changed
### Other Changes
* Fix HTML report sort to also reorder groups by @​thomhurst in
thomhurst/TUnit#5103
* fix: correct expand-all icon SVG in HTML report by @​slang25 in
thomhurst/TUnit#5105
* Avoid some redundant list allocations by @​SimonCropp in
thomhurst/TUnit#4963
* avoid some redundant enumerable alloc by @​SimonCropp in
thomhurst/TUnit#4972
* use char instead of string for joins by @​SimonCropp in
thomhurst/TUnit#4989
### Dependencies
* chore(deps): update dependency nunit to 4.5.1 by @​thomhurst in
thomhurst/TUnit#5097
* chore(deps): update tunit to 1.19.0 by @​thomhurst in
thomhurst/TUnit#5099
* chore(deps): update dependency humanizer to 3.0.10 by @​thomhurst in
thomhurst/TUnit#5101
* chore(deps): update dependency nunit.analyzers to 4.12.0 by
@​thomhurst in thomhurst/TUnit#5102


**Full Changelog**:
thomhurst/TUnit@v1.19.0...v1.19.11

Commits viewable in [compare
view](thomhurst/TUnit@v1.19.0...v1.19.74).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=TUnit.Core&package-manager=nuget&previous-version=1.19.0&new-version=1.19.74)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
PhilippNaused pushed a commit to PhilippNaused/Bshox that referenced this pull request Mar 19, 2026
Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.19.0 to
1.19.74.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.19.74

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.74 -->

## What's Changed
### Other Changes
* feat: per-hook activity spans with method names by @​thomhurst in
thomhurst/TUnit#5159
* fix: add tooltip to truncated span names in HTML report by @​thomhurst
in thomhurst/TUnit#5164
* Use enum names instead of numeric values in test display names by
@​Copilot in thomhurst/TUnit#5178
* fix: resolve CS8920 when mocking interfaces whose members return
static-abstract interfaces by @​lucaxchaves in
thomhurst/TUnit#5154
### Dependencies
* chore(deps): update tunit to 1.19.57 by @​thomhurst in
thomhurst/TUnit#5157
* chore(deps): update dependency gitversion.msbuild to 6.6.1 by
@​thomhurst in thomhurst/TUnit#5160
* chore(deps): update dependency gitversion.tool to v6.6.1 by
@​thomhurst in thomhurst/TUnit#5161
* chore(deps): update dependency polyfill to 9.20.0 by @​thomhurst in
thomhurst/TUnit#5163
* chore(deps): update dependency polyfill to 9.20.0 by @​thomhurst in
thomhurst/TUnit#5162
* chore(deps): update dependency polyfill to 9.21.0 by @​thomhurst in
thomhurst/TUnit#5166
* chore(deps): update dependency polyfill to 9.21.0 by @​thomhurst in
thomhurst/TUnit#5167
* chore(deps): update dependency polyfill to 9.22.0 by @​thomhurst in
thomhurst/TUnit#5168
* chore(deps): update dependency polyfill to 9.22.0 by @​thomhurst in
thomhurst/TUnit#5169
* chore(deps): update dependency coverlet.collector to 8.0.1 by
@​thomhurst in thomhurst/TUnit#5177

## New Contributors
* @​lucaxchaves made their first contribution in
thomhurst/TUnit#5154

**Full Changelog**:
thomhurst/TUnit@v1.19.57...v1.19.74

## 1.19.57

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.57 -->

## What's Changed
### Other Changes
* fix: use unique artifact names to avoid collisions in matrix builds by
@​thomhurst in thomhurst/TUnit#5132
* fix: resolve IndexOutOfRangeException with MethodDataSource<T> on
class (#​5118) by @​thomhurst in
thomhurst/TUnit#5137
* fix: prevent StringEqualsAssertion from matching non-string types by
@​thomhurst in thomhurst/TUnit#5156
### Dependencies
* chore(deps): update tunit to 1.19.22 by @​thomhurst in
thomhurst/TUnit#5117
* chore(deps): update dependency fsharp.core to 10.0.104 by @​thomhurst
in thomhurst/TUnit#5119
* chore(deps): update dependency microsoft.entityframeworkcore to 10.0.4
by @​thomhurst in thomhurst/TUnit#5120
* chore(deps): update dependency fsharp.core to v11 by @​thomhurst in
thomhurst/TUnit#5128
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.200 by @​thomhurst in
thomhurst/TUnit#5122
* chore(deps): update dependency dotnet-sdk to v10.0.200 by @​thomhurst
in thomhurst/TUnit#5123
* chore(deps): update dependency microsoft.sourcelink.github to 10.0.200
by @​thomhurst in thomhurst/TUnit#5121
* chore(deps): update dependency system.commandline to 2.0.4 by
@​thomhurst in thomhurst/TUnit#5125
* chore(deps): update microsoft.extensions to 10.0.4 by @​thomhurst in
thomhurst/TUnit#5127
* chore(deps): update microsoft.build to 18.4.0 by @​thomhurst in
thomhurst/TUnit#5129
* chore(deps): update microsoft.aspnetcore to 10.0.4 by @​thomhurst in
thomhurst/TUnit#5126
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.200 by
@​thomhurst in thomhurst/TUnit#5124
* chore(deps): update microsoft.extensions to 10.4.0 by @​thomhurst in
thomhurst/TUnit#5130
* chore(deps): update dependency
opentelemetry.instrumentation.aspnetcore to 1.15.1 by @​thomhurst in
thomhurst/TUnit#5136
* chore(deps): update dependency vogen to 8.0.5 by @​thomhurst in
thomhurst/TUnit#5133
* chore(deps): update dependency npgsql to 10.0.2 by @​thomhurst in
thomhurst/TUnit#5139
* chore(deps): update dependency microsoft.sourcelink.github to 10.0.201
by @​thomhurst in thomhurst/TUnit#5141
* chore(deps): update dependency microsoft.entityframeworkcore to 10.0.5
by @​thomhurst in thomhurst/TUnit#5140
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.201 by @​thomhurst in
thomhurst/TUnit#5142
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.201 by
@​thomhurst in thomhurst/TUnit#5143
* chore(deps): update dependency npgsql.entityframeworkcore.postgresql
to 10.0.1 by @​thomhurst in thomhurst/TUnit#5145
* chore(deps): update dependency dotnet-sdk to v10.0.201 by @​thomhurst
in thomhurst/TUnit#5144
* chore(deps): update dependency system.commandline to 2.0.5 by
@​thomhurst in thomhurst/TUnit#5146
* chore(deps): update microsoft.aspnetcore to 10.0.5 by @​thomhurst in
thomhurst/TUnit#5147
* chore(deps): update dependency testcontainers.kafka to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5149
* chore(deps): update microsoft.extensions to 10.0.5 by @​thomhurst in
thomhurst/TUnit#5148
* chore(deps): update dependency testcontainers.postgresql to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5150
* chore(deps): update dependency testcontainers.redis to 4.11.0 by
@​thomhurst in thomhurst/TUnit#5151
* chore(deps): update dependency stackexchange.redis to 2.12.1 by
@​thomhurst in thomhurst/TUnit#5153


**Full Changelog**:
thomhurst/TUnit@v1.19.22...v1.19.57

## 1.19.22

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.22 -->

## What's Changed
### Other Changes
* Remove redundant prefixes from tracing timeline spans by @​thomhurst
in thomhurst/TUnit#5111
* Render span tags and events on separate lines by @​thomhurst in
thomhurst/TUnit#5113
* Demote granular internal logs from Debug to Trace level by @​thomhurst
in thomhurst/TUnit#5116
### Dependencies
* chore(deps): update tunit to 1.19.16 by @​thomhurst in
thomhurst/TUnit#5109


**Full Changelog**:
thomhurst/TUnit@v1.19.16...v1.19.22

## 1.19.16

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.16 -->

## What's Changed
### Other Changes
* Truncate exceptions in GitHub summary tables by @​thomhurst in
thomhurst/TUnit#5108
### Dependencies
* chore(deps): update tunit to 1.19.11 by @​thomhurst in
thomhurst/TUnit#5106
* chore(deps): bump dompurify from 3.3.0 to 3.3.2 in /docs by
@​dependabot[bot] in thomhurst/TUnit#5096
* chore(deps): bump svgo from 3.2.0 to 3.3.3 in /docs by
@​dependabot[bot] in thomhurst/TUnit#5086


**Full Changelog**:
thomhurst/TUnit@v1.19.11...v1.19.16

## 1.19.11

<!-- Release notes generated using configuration in .github/release.yml
at v1.19.11 -->

## What's Changed
### Other Changes
* Fix HTML report sort to also reorder groups by @​thomhurst in
thomhurst/TUnit#5103
* fix: correct expand-all icon SVG in HTML report by @​slang25 in
thomhurst/TUnit#5105
* Avoid some redundant list allocations by @​SimonCropp in
thomhurst/TUnit#4963
* avoid some redundant enumerable alloc by @​SimonCropp in
thomhurst/TUnit#4972
* use char instead of string for joins by @​SimonCropp in
thomhurst/TUnit#4989
### Dependencies
* chore(deps): update dependency nunit to 4.5.1 by @​thomhurst in
thomhurst/TUnit#5097
* chore(deps): update tunit to 1.19.0 by @​thomhurst in
thomhurst/TUnit#5099
* chore(deps): update dependency humanizer to 3.0.10 by @​thomhurst in
thomhurst/TUnit#5101
* chore(deps): update dependency nunit.analyzers to 4.12.0 by
@​thomhurst in thomhurst/TUnit#5102


**Full Changelog**:
thomhurst/TUnit@v1.19.0...v1.19.11

Commits viewable in [compare
view](thomhurst/TUnit@v1.19.0...v1.19.74).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=TUnit&package-manager=nuget&previous-version=1.19.0&new-version=1.19.74)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant