| Index: components/copresence/handlers/audio/audio_directive_list_unittest.cc
|
| diff --git a/components/copresence/handlers/audio/audio_directive_list_unittest.cc b/components/copresence/handlers/audio/audio_directive_list_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5fff9b5b578c8086a65e5ff9594141c7b0c8c701
|
| --- /dev/null
|
| +++ b/components/copresence/handlers/audio/audio_directive_list_unittest.cc
|
| @@ -0,0 +1,98 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/copresence/handlers/audio/audio_directive_list.h"
|
| +
|
| +#include <cstdlib>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "media/base/audio_bus.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace copresence {
|
| +
|
| +class AudioDirectiveListTest : public testing::Test {
|
| + public:
|
| + AudioDirectiveListTest()
|
| + : directive_list_(new AudioDirectiveList(
|
| + base::Bind(&AudioDirectiveListTest::EncodeToken,
|
| + base::Unretained(this)),
|
| + base::Bind(&AudioDirectiveListTest::DirectiveAdded,
|
| + base::Unretained(this)))) {}
|
| +
|
| + virtual ~AudioDirectiveListTest() {}
|
| +
|
| + void DirectiveAdded() {}
|
| +
|
| + protected:
|
| + void EncodeToken(const std::string& token,
|
| + const AudioDirectiveList::SamplesCallback& callback) {
|
| + const int kSamplesSize = 0x1337;
|
| + scoped_refptr<media::AudioBusRefCounted> samples =
|
| + media::AudioBusRefCounted::Create(1, kSamplesSize);
|
| + PopulateSamples(0x1337, kSamplesSize, samples->channel(0));
|
| + callback.Run(token, samples);
|
| + }
|
| +
|
| + // Populate random samples given a random seed into the samples array.
|
| + void PopulateSamples(int random_seed, size_t size, float* samples) {
|
| + srand(random_seed);
|
| + for (size_t i = 0; i < size; ++i)
|
| + samples[i] = (2.0 * rand() / RAND_MAX) - 1;
|
| + }
|
| +
|
| + // This order is important. We want the message loop to get created before
|
| + // our directive list, since the directive list constructor will post tasks.
|
| + base::MessageLoop message_loop_;
|
| + scoped_ptr<AudioDirectiveList> directive_list_;
|
| +};
|
| +
|
| +TEST_F(AudioDirectiveListTest, Basic) {
|
| + const base::TimeDelta zero_ttl = base::TimeDelta::FromMilliseconds(0);
|
| + const base::TimeDelta large_ttl = base::TimeDelta::FromSeconds(0x7331);
|
| +
|
| + directive_list_->AddTransmitDirective("token1", "op_id1", zero_ttl);
|
| + directive_list_->AddTransmitDirective("token2", "op_id2", large_ttl);
|
| + directive_list_->AddTransmitDirective("token3", "op_id1", zero_ttl);
|
| +
|
| + EXPECT_EQ("token2", directive_list_->GetNextTransmit()->token);
|
| +
|
| + directive_list_->AddReceiveDirective("op_id1", zero_ttl);
|
| + directive_list_->AddReceiveDirective("op_id3", zero_ttl);
|
| + directive_list_->AddReceiveDirective("op_id3", large_ttl);
|
| + directive_list_->AddReceiveDirective("op_id7", zero_ttl);
|
| +
|
| + EXPECT_EQ("op_id3", directive_list_->GetNextReceive()->op_id);
|
| +}
|
| +
|
| +TEST_F(AudioDirectiveListTest, OutOfOrderAndMultiple) {
|
| + const base::TimeDelta zero_ttl = base::TimeDelta::FromMilliseconds(0);
|
| + const base::TimeDelta large_ttl = base::TimeDelta::FromSeconds(0x7331);
|
| +
|
| + EXPECT_EQ(NULL, directive_list_->GetNextTransmit().get());
|
| + EXPECT_EQ(NULL, directive_list_->GetNextReceive().get());
|
| +
|
| + directive_list_->AddTransmitDirective("token1", "op_id1", zero_ttl);
|
| + directive_list_->AddTransmitDirective("token2", "op_id2", large_ttl);
|
| + directive_list_->AddTransmitDirective("token3", "op_id1", large_ttl);
|
| +
|
| + // Should keep getting the directive till it expires or we add a newer one.
|
| + EXPECT_EQ("token3", directive_list_->GetNextTransmit()->token);
|
| + EXPECT_EQ("token3", directive_list_->GetNextTransmit()->token);
|
| + EXPECT_EQ("token3", directive_list_->GetNextTransmit()->token);
|
| + EXPECT_EQ(NULL, directive_list_->GetNextReceive().get());
|
| +
|
| + directive_list_->AddReceiveDirective("op_id1", large_ttl);
|
| + directive_list_->AddReceiveDirective("op_id3", zero_ttl);
|
| + directive_list_->AddReceiveDirective("op_id3", large_ttl);
|
| + directive_list_->AddReceiveDirective("op_id7", large_ttl);
|
| +
|
| + // Should keep getting the directive till it expires or we add a newer one.
|
| + EXPECT_EQ("op_id7", directive_list_->GetNextReceive()->op_id);
|
| + EXPECT_EQ("op_id7", directive_list_->GetNextReceive()->op_id);
|
| + EXPECT_EQ("op_id7", directive_list_->GetNextReceive()->op_id);
|
| +}
|
| +
|
| +} // namespace copresence
|
|
|