Allow for some error in volume testing.

BUG=616
TESTED=voe_auto_test:VolumeTest.* now passes on a MacBook

Review URL: https://webrtc-codereview.appspot.com/1028005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3348 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andrew@webrtc.org 2013-01-09 17:07:02 +00:00
parent d005468e9b
commit 08d660f08e

View File

@ -10,6 +10,20 @@
#include "after_streaming_fixture.h" #include "after_streaming_fixture.h"
namespace {
void ExpectVolumeNear(int expected, int actual) {
// The hardware volume may be more coarsely quantized than [0, 255], so
// it is not always reasonable to expect to get exactly what we set. This
// allows for some error.
const int kMaxVolumeError = 10;
EXPECT_NEAR(expected, actual, kMaxVolumeError);
EXPECT_GE(actual, 0);
EXPECT_LE(actual, 255);
}
} // namespace
class VolumeTest : public AfterStreamingFixture { class VolumeTest : public AfterStreamingFixture {
}; };
@ -33,20 +47,20 @@ TEST_F(VolumeTest, SetVolumeBeforePlayoutWorks) {
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(200)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(200));
unsigned int volume; unsigned int volume;
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
EXPECT_EQ(200u, volume); ExpectVolumeNear(200u, volume);
PausePlaying(); PausePlaying();
ResumePlaying(); ResumePlaying();
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
// Ensure the volume has not changed after resuming playout. // Ensure the volume has not changed after resuming playout.
EXPECT_EQ(200u, volume); ExpectVolumeNear(200u, volume);
PausePlaying(); PausePlaying();
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100));
ResumePlaying(); ResumePlaying();
// Ensure the volume set while paused is retained. // Ensure the volume set while paused is retained.
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
EXPECT_EQ(100u, volume); ExpectVolumeNear(100u, volume);
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(original_volume)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(original_volume));
} }
@ -60,20 +74,20 @@ TEST_F(VolumeTest, ManualSetVolumeWorks) {
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(0)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(0));
unsigned int volume; unsigned int volume;
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
EXPECT_EQ(0u, volume); ExpectVolumeNear(0u, volume);
Sleep(1000); Sleep(1000);
TEST_LOG("Setting speaker volume to 100 out of 255.\n"); TEST_LOG("Setting speaker volume to 100 out of 255.\n");
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100));
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
EXPECT_EQ(100u, volume); ExpectVolumeNear(100u, volume);
Sleep(1000); Sleep(1000);
// Set the volume to 255 very briefly so we don't blast the poor user // Set the volume to 255 very briefly so we don't blast the poor user
// listening to this. This is just to test the call succeeds. // listening to this. This is just to test the call succeeds.
EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(255)); EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(255));
EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume)); EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
EXPECT_EQ(255u, volume); ExpectVolumeNear(255u, volume);
TEST_LOG("Setting speaker volume to the original %d out of 255.\n", TEST_LOG("Setting speaker volume to the original %d out of 255.\n",
original_volume); original_volume);