Tests: split-track recording coverage (per-peer + own send)

Local checkpoint - NOT for public release. Closes the second test gap.

- RecordingController gets an internal SettingsSourceForTest seam so a self-test can drive
  a split (multi-track) recording without writing to the real shared settings store.
- New self-test "Recording split tracks": with SplitTracks on + one connected peer, starts
  the real controller, feeds the "your send" track through the tap it wires onto the sender,
  and asserts it wrote a FOLDER of tracks (one per peer plus your own) with content - Ed's
  multi-track feature, now proven on every build.

Gate 24/24. Both previously-deferred test gaps (split-track + main-window tabs) now closed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-07-12 19:02:02 +01:00
co-authored by Claude Opus 4.8
parent c8fed26115
commit 499e9644d7
2 changed files with 64 additions and 1 deletions
+6 -1
View File
@@ -44,6 +44,11 @@ internal sealed class RecordingController
/// recording starts, so one track file is created per peer. Set by MainForm.</summary>
public Func<IReadOnlyList<(IPAddress Address, string Name)>>? ConnectedPeersProvider { get; set; }
/// <summary>Test seam: overrides where <see cref="Start"/> reads the recording settings from, so a
/// self-test can drive a split (multi-track) recording without writing to the real shared settings
/// store. Null (the default) = read from the store as normal.</summary>
internal Func<RecordingSettings>? SettingsSourceForTest { get; set; }
public RecordingController(AudioSender sender, AudioReceiver receiver, RemSoundSettingsStore settings, Action<string> diagnostic)
{
this.sender = sender;
@@ -71,7 +76,7 @@ internal sealed class RecordingController
public void Start()
{
if (IsRecording) return;
var s = settings.LoadRecordingSettings();
var s = (SettingsSourceForTest ?? settings.LoadRecordingSettings)();
var now = DateTime.Now;
try
{