StatusArc interacts with hardware and macOS system services, so the current test plan is primarily manual.
For every battery, Wi-Fi, or input-source change, compare StatusArc with the corresponding macOS control on the same system. Verify clicks, toggles, menu states, disabled states, transitions, feedback, timing, cancellation, errors, and permission outcomes. Change the underlying state both inside and outside StatusArc and confirm the UI follows macOS without stale or contradictory states.
For every custom panel or dialog, record why a public system menu or action cannot perform the task. Confirm the fallback uses standard SwiftUI/AppKit control behavior, keyboard navigation, accessibility, and enabled states.
- Build the
StatusArctarget. - Launch it.
- Confirm there is no Dock icon.
- Confirm exactly one StatusArc item appears in the menu bar.
- Confirm clicking the item opens three compact component islands.
- Confirm the arc roughly matches the current percentage.
- Confirm draining states use one connected upper arc with no top opening.
- Confirm external-power states use a split track with a clear top gap around the power dot.
- Confirm the unused arc is dimmed.
- Confirm the Battery island reports percentage and charging/fully charged state without a disclosure chevron.
- Confirm clicking the Battery island does not expand it or open a submenu.
- Inject synthetic snapshots in a development harness to validate the following matrix without changing system power settings:
| Percentage | Low Power Mode | macOS warning | Power state | Expected arc / top indicator |
|---|---|---|---|---|
| 80% | off | none | battery | connected normal / no dot |
| 25% | off | none | battery | connected normal / no dot |
| 10% | off | none | battery | connected normal / no dot |
| 80% | on | none | battery | connected yellow / no dot |
| 20% | on | none | battery | connected yellow / no dot |
| 30% | off | early | battery | connected red / no dot |
| 30% | off | final | battery | connected red / no dot |
| 80% | off | none | charging | split normal / amber dot |
| 20% | on | none | charging | split yellow / amber dot |
| 30% | on | early or final | charging | split red / amber dot |
| 80% | off | none | socket, not charging | split normal / amber dot |
| 100% | off | none | fully charged and plugged | split normal / green dot |
Confirm draining states close the top opening by joining the upper arc and never show a top dot. When present, the top dot is 4 × 4 points and remains centered in the Figma-sized opening. External power below 100% must stay amber even when charging is paused; only a charged battery on external power turns it green. The expanded panel must continue to describe charging, paused, and fully charged states accurately.
- Check that percentage alone never triggers a warning: 25.49% and 25.50% both remain normal without a system warning. Also check 0% and 10% with no warning.
- Confirm early/final macOS warnings show a red arc without a dot, including with Low Power Mode enabled.
- Confirm the unused arc is dim neutral, dim red, or dim yellow to match its state.
- Confirm language and network colors remain independent of battery colors.
- Check 0%, 100%, unavailable battery, and fully charged snapshots.
- Check both light and dark appearances at normal size and Retina scale.
- Switch repeatedly among battery, charging, and external-power states. The image and native item must remain 22 × 22 points, and neighboring menu-bar items must not move.
- Compare the 20 × 20-point ellipse, draining 240-degree connected arc, external power's two 90-degree side arcs, 1.5-point stroke, and round caps against the approved Figma exports at 1× and 2×.
- Confirm the 4-point power dot remains clear of the arc caps at 0%, 100%, and increased-contrast widths.
- Confirm the button never automatically scales or squeezes the artwork.
- Check transitions with the menu open and after wake; confirm the final icon matches the reported charging/warning state.
- Confirm this change adds no system-state polling or permission requests.
- Confirm the app bundle includes
AppIcon.icnsand Finder, About, Spotlight, and the application switcher display the StatusArc icon instead of a generic executable icon. - Inspect 16, 32, 128, 256, 512, and 1024 px renditions. At small sizes, the split arcs, green power dot, and three network dots must remain distinct.
- Confirm the PNG renditions use an sRGB color profile, a transparent square canvas, centered content, and no pre-baked full-canvas corner mask.
- With Wi-Fi connected, confirm 1–3 dots are shown.
- Confirm every dot is 3 × 3 points, adjacent dots are 4.5 points center-to-center, their vertical center is 19.5 points from the top, and the strong/medium/weak/disconnected matrix matches Figma.
- Move between stronger/weaker signal conditions if practical.
- Turn Wi-Fi off from StatusArc and confirm the indicator becomes disconnected.
- Turn Wi-Fi back on.
- Scan nearby networks.
- If prompted, test both granting and denying Location access.
- Join an open network if one is safely available.
- Join a secured personal network.
- Confirm a secured-network join does not show a System keychain administrator prompt.
- If no user-keychain password is available, confirm StatusArc asks for the Wi-Fi password.
- Confirm no password is printed to the Xcode console.
- Confirm the hidden-network dialog labels Network Name, Security, and Password; disables Join until a name is entered; and supports Show Password.
- Confirm scans group the current, known, and other networks without truncating results.
- While scanning, connecting, disconnecting, and toggling power, confirm duplicate actions are disabled and the panel reports the transient state.
- While scanning/refreshing, confirm the bright dot travels right to left. While connecting, confirm it travels left to right. The dots must not move or resize, and animation must stop immediately when the operation ends.
- Enable Reduce Motion and confirm scanning/connecting uses three static mid-tint dots while the tooltip and accessibility value report the operation.
- Check Wi-Fi off, Wi-Fi on but disconnected, and a local connection without an Internet path; confirm the panel and accessibility value distinguish them.
- Option-open StatusArc and inspect Connection Details. Confirm IP address, router, band, protocol, security, radio values, and Wireless Diagnostics.
- Connect Ethernet or a LAN adapter.
- Confirm macOS makes it the primary path when expected.
- Confirm the bottom dots switch to a solid line.
- Disconnect Ethernet and confirm StatusArc returns to the active Wi-Fi state.
- Make a VPN or tunnel interface primary and confirm StatusArc continues to
identify the active physical connection carrying it in expanded text, while
VPNreplaces the dots or line in the compact icon. Confirm the panel, menu, tooltip, and accessibility value name the VPN, and disconnecting it restores the physical Wi-Fi or Ethernet indicator without changing item width. - Repeat with a Network Extension packet tunnel whose primary route is
utun,ppp, oripsecbut has no legacy VPN service record. Confirm the genericVPNstate appears without exposing the interface name as VPN details. - Confirm
VPNis drawn from the exact flattened Figma Union shape—not a font—and its 14 × 4-point bounds stay at x = 4, y = 17 in the bottom opening.
- Configure at least two input sources in macOS.
- Switch them using StatusArc.
- Confirm the center label updates to match the current macOS input source.
- Confirm one- and two-letter labels both use 8.5-point bold system type, have matching optical vertical alignment, and remain readable at normal menu-bar size.
- Confirm ASCII sources use a compact system-name label and non-ASCII sources use the native language name rather than a fixed country-code mapping.
- Confirm each input-source row, the island header, tooltip, and accessibility value use the source's full localized system name.
- Switch using the macOS keyboard shortcut and confirm StatusArc follows.
- Open Emoji & Symbols.
- Confirm Keyboard Viewer opens when Text Input Source Services exposes it and appears disabled otherwise.
- Open the input-source-name and Keyboard Settings destinations.
- Confirm the collapsed panel shows exactly three islands: Battery, Connectivity, and Input Source.
- Open Connectivity and Input Source, then switch directly between them. Confirm the prior island contracts while the next expands without pointer-tracking delay. Battery must remain non-expandable.
- Compare content, controls, and enabled states with the corresponding macOS component panels.
- Confirm Connectivity contains a working system toggle, nearby and known networks, and Network and Wi-Fi Settings destinations.
- Confirm Battery shows its percentage and power state without Energy Mode controls, administrator prompts, or registering a new Login Items entry.
- Confirm Battery's passive icon has a dimmed backing and the Battery island does not react on hover. Connectivity and Input Source should show subtle hover feedback because they expand.
- In expanded islands, confirm collapsible headers, selectable networks and input sources, and available action rows highlight on hover. Current rows must remain visually still and use an accent-colored icon or badge on a white backing; unselected icons and badges use dimmed backings. Unavailable rows must remain visually still and use dimmed icon backings where present.
- On macOS 26 or later, confirm the islands use Liquid Glass and matched expansion transitions. On macOS 13–25, confirm they use semantic material with readable text and smooth state changes.
- Enable Reduce Motion and confirm islands change state without transition.
- Repeatedly expand, collapse, and switch islands; confirm the glass and content follow one continuous ease-out curve without window-edge jitter or clipping.
- Confirm clicking outside the panel, pressing Escape, or clicking the status item again dismisses it.
- Confirm Network Settings, Keyboard Settings, Emoji & Symbols, and Wireless Diagnostics invoke the available public system actions.
- Enable Launch at Login and confirm the item shows a checkmark and StatusArc is listed in System Settings → General → Login Items & Extensions. Sign out and back in, or restart the Mac, and confirm StatusArc starts automatically.
- Disable Launch at Login and confirm the checkmark and macOS Login Item are removed. If macOS requires approval, confirm the menu option opens the Login Items settings page.
- Confirm the panel uses only public SwiftUI/AppKit materials and controls.
Verify Network Settings and Keyboard Settings open without crashing StatusArc.
After any visible rendering change, test both a light and dark menu-bar context when possible.
- Enable Increase Contrast and confirm dim tracks remain legible.
- Enable Differentiate Without Color and confirm low battery and Low Power Mode remain distinguishable by arc weight and dash pattern.