IChannelAudioVolumeTest.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // -----------------------------------------
  2. // SoundScribe (TM) and related software.
  3. //
  4. // Copyright (C) 2007-2011 Vannatech
  5. // http://www.vannatech.com
  6. // All rights reserved.
  7. //
  8. // This source code is subject to the MIT License.
  9. // http://www.opensource.org/licenses/mit-license.php
  10. //
  11. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  12. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  14. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  15. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  16. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  17. // THE SOFTWARE.
  18. // -----------------------------------------
  19. using System;
  20. using System.Linq;
  21. using CoreAudioTests.Common;
  22. using Microsoft.VisualStudio.TestTools.UnitTesting;
  23. using Vannatech.CoreAudio.Constants;
  24. using Vannatech.CoreAudio.Interfaces;
  25. namespace CoreAudioTests.Wasapi
  26. {
  27. /// <summary>
  28. /// Tests all methods of the IChannelAudioVolume interface.
  29. /// </summary>
  30. [TestClass]
  31. public class IChannelAudioVolumeTest : TestClass<IChannelAudioVolume>
  32. {
  33. /// <summary>
  34. /// Tests that all channel volumes may be received, for each available service.
  35. /// </summary>
  36. [TestMethod]
  37. public void IChannelAudioVolume_GetAllVolumes()
  38. {
  39. ExecuteServiceTest(service =>
  40. {
  41. UInt32 channelCount;
  42. service.GetChannelCount(out channelCount);
  43. var volumes = Enumerable.Repeat(123.456f, (int)channelCount).ToArray();
  44. var result = service.GetAllVolumes(channelCount, volumes);
  45. AssertCoreAudio.IsHResultOk(result);
  46. Assert.IsFalse(volumes.Any(val => val == 123.456f), "One or more volumes were not received.");
  47. });
  48. }
  49. /// <summary>
  50. /// Tests that the channel count may be received, for each available service.
  51. /// </summary>
  52. [TestMethod]
  53. public void IChannelAudioVolume_GetChannelCount()
  54. {
  55. ExecuteServiceTest(service =>
  56. {
  57. var channelCount = UInt32.MaxValue;
  58. var result = service.GetChannelCount(out channelCount);
  59. AssertCoreAudio.IsHResultOk(result);
  60. Assert.AreNotEqual(UInt32.MaxValue, channelCount, "The channel count was not received.");
  61. });
  62. }
  63. /// <summary>
  64. /// Tests that individual channel volumes may be received, for each available service.
  65. /// </summary>
  66. [TestMethod]
  67. public void IChannelAudioVolume_GetChannelVolume()
  68. {
  69. ExecuteServiceTest(service =>
  70. {
  71. UInt32 channelCount;
  72. service.GetChannelCount(out channelCount);
  73. for (uint i = 0; i < channelCount; i++)
  74. {
  75. var volume = 123.456f;
  76. var result = service.GetChannelVolume(i, out volume);
  77. AssertCoreAudio.IsHResultOk(result);
  78. Assert.AreNotEqual(123.456f, volume, "The channel volume was not received.");
  79. }
  80. });
  81. }
  82. /// <summary>
  83. /// Tests that all volumes may be set, for each available service.
  84. /// </summary>
  85. [TestMethod]
  86. public void IChannelAudioVolume_SetAllVolumes()
  87. {
  88. ExecuteServiceTest(service =>
  89. {
  90. UInt32 channelCount;
  91. service.GetChannelCount(out channelCount);
  92. float[] valOrig = new float[channelCount];
  93. service.GetAllVolumes(channelCount, valOrig);
  94. // Set to test values.
  95. var context = Guid.NewGuid();
  96. var result = service.SetAllVolumes(channelCount, Enumerable.Repeat(0.5f, (int)channelCount).ToArray(), context);
  97. AssertCoreAudio.IsHResultOk(result);
  98. // Check new values.
  99. float[] valNew = new float[channelCount];
  100. service.GetAllVolumes(channelCount, valNew);
  101. Assert.IsFalse(valNew.Any(val => val != 0.5f), "One or more volumes were not set.");
  102. // Return to original value.
  103. result = service.SetAllVolumes(channelCount, valOrig, context);
  104. AssertCoreAudio.IsHResultOk(result);
  105. });
  106. }
  107. /// <summary>
  108. /// Tests that individual channel volumes may be set, for each available service.
  109. /// </summary>
  110. [TestMethod]
  111. public void IChannelAudioVolume_SetChannelVolume()
  112. {
  113. ExecuteServiceTest(service =>
  114. {
  115. UInt32 channelCount;
  116. service.GetChannelCount(out channelCount);
  117. for (uint i = 0; i < channelCount; i++)
  118. {
  119. float valOrig;
  120. service.GetChannelVolume(i, out valOrig);
  121. // Set to test value.
  122. var context = Guid.NewGuid();
  123. var result = service.SetChannelVolume(i, 0.5f, context);
  124. AssertCoreAudio.IsHResultOk(result);
  125. // Check new value.
  126. float valNew;
  127. service.GetChannelVolume(i, out valNew);
  128. Assert.AreEqual(0.5f, valNew, "The channel volume was not set.");
  129. // Return to original value.
  130. result = service.SetChannelVolume(i, valOrig, context);
  131. AssertCoreAudio.IsHResultOk(result);
  132. }
  133. });
  134. }
  135. }
  136. }