public/session/Test-PsUiIcon.ps1

function Test-PsUiIcon {
    <#
    .SYNOPSIS
        Tests whether an icon name will render under the current (or a specified) icon font.
    .DESCRIPTION
        Returns $true if the named glyph is present in the requested font. Use this in scripts
        to skip rendering an icon you can't trust, or to lint a list against a target font.
 
        -Font picks the check:
        - Active (default): checks the live active font. Strict: a failed glyph cache build
          returns $false instead of guessing (the glyph browser guesses on purpose so its
          tiles don't all dim). Honors the fallback chain unless Set-PsUiIconFont was called
          with -NoIconFontFallback.
        - Fluent: checks Segoe Fluent Icons explicitly.
        - MDL2: checks Segoe MDL2 Assets explicitly.
        - Either: returns true if either icon font has the glyph.
    .PARAMETER Name
        The icon name to test (key from CharList.json).
    .PARAMETER Font
        Which font to test against. Defaults to Active.
    .EXAMPLE
        Test-PsUiIcon -Name 'Calculator'
        # True if the active font has Calculator
    .EXAMPLE
        if (-not (Test-PsUiIcon 'WeirdNewGlyph' -Font MDL2)) { Write-Warning "WeirdNewGlyph won't render on Win10" }
    #>

    [CmdletBinding()]
    [OutputType([bool])]
    param(
        [Parameter(Mandatory, Position = 0)]
        [string]$Name,

        [ValidateSet('Active', 'Fluent', 'MDL2', 'Either')]
        [string]$Font = 'Active'
    )

    # Active routes through IsGlyphAvailableInFont (strict) rather than IsGlyphAvailable. The
    # latter returns optimistic $true on a cache-build failure because the glyph browser's
    # dim-vs-bright UX is worse if every tile dims - that's the wrong contract for a linter.
    switch ($Font) {
        'Active' {
            $primary = [PsUi.ModuleContext]::ActiveIconFontName
            if ([PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, $primary)) { return $true }
            if ([PsUi.ModuleContext]::IconFontNoFallback) { return $false }
            $secondary = if ($primary -eq [PsUi.ModuleContext]::FontNameFluent) {
                [PsUi.ModuleContext]::FontNameMDL2
            }
            else {
                [PsUi.ModuleContext]::FontNameFluent
            }
            [PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, $secondary)
        }
        'Fluent' { [PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, [PsUi.ModuleContext]::FontNameFluent) }
        'MDL2'   { [PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, [PsUi.ModuleContext]::FontNameMDL2) }
        'Either' {
            [PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, [PsUi.ModuleContext]::FontNameFluent) -or
            [PsUi.ModuleContext]::IsGlyphAvailableInFont($Name, [PsUi.ModuleContext]::FontNameMDL2)
        }
    }
}