15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/copresence/handlers/audio/audio_directive_list.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind_helpers.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/message_loop/message_loop.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace copresence {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AudioDirectiveListTest : public testing::Test {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  AudioDirectiveListTest() : directive_list_(new AudioDirectiveList()) {}
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~AudioDirectiveListTest() {}
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::MessageLoop message_loop_;
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<AudioDirectiveList> directive_list_;
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(AudioDirectiveListTest, Basic) {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id1", kTtl);
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id2", kTtl * 3);
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id3", kTtl * 2);
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id2");
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(AudioDirectiveListTest, AddDirectiveMultiple) {
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id1", kTtl);
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id2", kTtl * 2);
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id3", kTtl * 3 * 2);
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id3", kTtl * 3 * 3);
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id4", kTtl * 4);
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id3");
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id4", directive_list_->GetActiveDirective()->op_id);
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id4");
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id2");
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id1", directive_list_->GetActiveDirective()->op_id);
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id1");
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(AudioDirectiveListTest, RemoveDirectiveMultiple) {
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id1", kTtl);
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id2", kTtl * 2);
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id3", kTtl * 3);
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->AddDirective("op_id4", kTtl * 4);
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id4", directive_list_->GetActiveDirective()->op_id);
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id4");
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id3");
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id3");
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id3");
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id2");
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ("op_id1", directive_list_->GetActiveDirective()->op_id);
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  directive_list_->RemoveDirective("op_id1");
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace copresence
81