Skip to content

Feature: quickfiler-breadcrumb-dropdown-webview-coverage #455

Description

@drmoisan
  • Work Mode: full-feature

Problem / Why

Child F13 of epic #136 owns the QuickFiler breadcrumb drop-down surface and the WebView2 host
(15 compiled files, ~3,111 lines under QuickFiler/Viewers/). The file set has an unusual shape:

  • Eight non-exempt coordinator files already measure 92.9%-100% line coverage, so the remaining
    work for them is branch coverage against the 75% floor plus explicit error-path and
    cancellation-path pinning - not new happy-path tests.
  • Three WebView2 files (WebView2BreadcrumbHost.cs, WebView2Messenger.cs,
    WebView2CoreInitializer.cs) carry class-level [ExcludeFromCodeCoverage] and are therefore
    absent from instrumentation entirely. They are unmeasured, not covered, and will start near zero
    once their exemptions are reconsidered. This is where the genuine coverage work is concentrated.
  • BreadcrumbPopupUiOperations.cs carries method-level [ExcludeFromCodeCoverage] attributes on
    individual UI-bound members rather than a single file-level attribute.
  • Four files are interface-only declarations with no executable IL and belong in F1's
    interface-only / not-measured bucket.

Proposed Behavior

Raise every testable file in the F13 assignment to at least 80% line and 75% branch coverage,
verified with F1's per-file harness, and either remove the [ExcludeFromCodeCoverage] attributes
with the code genuinely covered or retain only a file-specific irreducible remainder argued against
the three exemption grounds in the epic's Shared Design section 1. No observable behavior change to
QuickFiler flows.

Acceptance Criteria

  • Every testable file in scope reaches >= 80% line and >= 75% branch coverage, measured with
    F1's harness and recorded under <FEATURE>/evidence/qa-gates/.
  • For files already above the line floor, line coverage is retained or improved and the branch
    floor is met.
  • [ExcludeFromCodeCoverage] attributes in scope are removed with the code covered, or retained
    only where a file-specific irreducible-remainder rationale is recorded and F1's ledger
    ratifies it.
  • The four interface-only files are classified interface-only / not-measured, receive no
    [ExcludeFromCodeCoverage], and are reported N/A rather than 0%.
  • No production file in scope exceeds 500 lines; any newly created file reaches >= 90% line
    coverage and appends its own ledger row plus <Compile Include> entry.
  • Tests use MSTest, Moq, and FluentAssertions; deterministic and isolated; no temporary files,
    external services, live forms, popups, Thread.Sleep, Task.Delay, or wall-clock waits.
  • Full C# toolchain green in final form; repository-wide coverage retained or improved.
  • No behavior change to observable QuickFiler flows.

Constraints & Risks

  • In-flight conflict risk with issue Bug: quickfiler-folder-selector-dropdown #400
    (docs/features/active/2026-07-21-quickfiler-folder-selector-dropdown-400), which targets the
    same breadcrumb folder-selector drop-down and carries its own committed Cobertura evidence.
  • Drop-down open/close lifetime and WebView2 initialization carry concurrency and ordering
    invariants. Cancellation, double-open, open-during-close, and initialization-failure paths must be
    covered explicitly with an injected clock and fake timers.
  • Sibling boundary: BreadcrumbBridgeRouter, BreadcrumbBridgeCoordinator,
    BreadcrumbCoordinatorUpgradeLifetime, BreadcrumbItemViewerLifecycleCoordinator, and
    BreadcrumbMessengerHub belong to F12. ItemViewer.Breadcrumb.cs belongs to F14.
  • Seam hierarchy: interface seam, then injectable delegate, then adapter. STA constructions are a
    last resort confined to dedicated *.StaTests.cs files.
  • Known prior art: a retyped Designer field breaks reflection-injected tests; injecting a router is
    the working approach for the breadcrumb WebView2 surface.

Test Conditions

  • Drop-down open/close lifetime: cancellation, double-open, open-during-close, dispose-during-open.
  • WebView2 core initialization: success, failure, re-entrancy, disposal before completion.
  • WebView2 message round-trip: malformed payload, unknown message type, post-after-dispose.
  • Popup placement boundary arithmetic at screen edges.
  • UI dispatcher marshalling when already on and off the target thread.

Source

From: docs/features/potential/2026-08-07-quickfiler-breadcrumb-dropdown-webview-coverage.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions