public void VolumeFieldIsUpdated() { Context c = new Context(); c.ConnectAndWait(); helper.SpawnAplaySinkInput(); SinkInput aplay = null; using (Operation opn = c.EnumerateSinkInputs((SinkInput input, int eol) => { if (eol == 0) { if (input.Properties[Properties.ApplicationProcessBinary] == "aplay") { aplay = input; } } })) { opn.Wait(); } Volume vol = aplay.Volume; vol.Modify(0.1); Assert.AreNotEqual(vol, aplay.Volume); using (Operation opn = aplay.SetVolume(vol, (_) => {; })) { opn.Wait(); } Helper.DrainEventLoop(); // Wait for volume change events to percolate Thread.Sleep(200); Helper.DrainEventLoop(); Thread.Sleep(10); Helper.DrainEventLoop(); try { Assert.AreEqual(vol, aplay.Volume); } finally { //Reset the volume to 100% vol.Reset(); using (Operation opn = aplay.SetVolume(vol, (_) => {; })) { opn.Wait(); } } }
public void VolumeChangedEventFires() { Context c = new Context(); c.ConnectAndWait(); helper.SpawnAplaySinkInput(); SinkInput aplay = null; using (Operation opn = c.EnumerateSinkInputs((SinkInput input, int eol) => { if (eol == 0) { if (input.Properties[Properties.ApplicationProcessBinary] == "aplay") { aplay = input; } } })) { opn.Wait(); } Assert.IsNotNull(aplay, "Testing error: aplay SinkInput not found"); var volumeChangedEventTriggered = new ManualResetEvent(false); aplay.VolumeChanged += delegate(object sender, SinkInput.VolumeChangedEventArgs e) { volumeChangedEventTriggered.Set(); }; // Ensure the volume changed callback is hooked up. Helper.DrainEventLoop(); Volume vol = aplay.Volume; vol.Modify(0.1); using (Operation o = aplay.SetVolume(vol, (_) => {; })) { o.Wait(); } Helper.RunUntilEventSignal(() => {; }, volumeChangedEventTriggered, "Timeout waiting for VolumeChanged signal"); }