1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/copresence/handlers/audio/audio_directive_list.h"
6
7#include "base/bind.h"
8#include "base/bind_helpers.h"
9#include "base/message_loop/message_loop.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace copresence {
13
14class AudioDirectiveListTest : public testing::Test {
15 public:
16  AudioDirectiveListTest() : directive_list_(new AudioDirectiveList()) {}
17
18  virtual ~AudioDirectiveListTest() {}
19
20 protected:
21  base::MessageLoop message_loop_;
22  scoped_ptr<AudioDirectiveList> directive_list_;
23};
24
25TEST_F(AudioDirectiveListTest, Basic) {
26  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
27
28  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
29
30  directive_list_->AddDirective("op_id1", kTtl);
31  directive_list_->AddDirective("op_id2", kTtl * 3);
32  directive_list_->AddDirective("op_id3", kTtl * 2);
33  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
34
35  directive_list_->RemoveDirective("op_id2");
36  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
37}
38
39TEST_F(AudioDirectiveListTest, AddDirectiveMultiple) {
40  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
41
42  directive_list_->AddDirective("op_id1", kTtl);
43  directive_list_->AddDirective("op_id2", kTtl * 2);
44  directive_list_->AddDirective("op_id3", kTtl * 3 * 2);
45  directive_list_->AddDirective("op_id3", kTtl * 3 * 3);
46  directive_list_->AddDirective("op_id4", kTtl * 4);
47
48  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
49  directive_list_->RemoveDirective("op_id3");
50  EXPECT_EQ("op_id4", directive_list_->GetActiveDirective()->op_id);
51  directive_list_->RemoveDirective("op_id4");
52  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
53  directive_list_->RemoveDirective("op_id2");
54  EXPECT_EQ("op_id1", directive_list_->GetActiveDirective()->op_id);
55  directive_list_->RemoveDirective("op_id1");
56  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
57}
58
59TEST_F(AudioDirectiveListTest, RemoveDirectiveMultiple) {
60  const base::TimeDelta kTtl = base::TimeDelta::FromSeconds(9999);
61
62  directive_list_->AddDirective("op_id1", kTtl);
63  directive_list_->AddDirective("op_id2", kTtl * 2);
64  directive_list_->AddDirective("op_id3", kTtl * 3);
65  directive_list_->AddDirective("op_id4", kTtl * 4);
66
67  EXPECT_EQ("op_id4", directive_list_->GetActiveDirective()->op_id);
68  directive_list_->RemoveDirective("op_id4");
69  EXPECT_EQ("op_id3", directive_list_->GetActiveDirective()->op_id);
70  directive_list_->RemoveDirective("op_id3");
71  directive_list_->RemoveDirective("op_id3");
72  directive_list_->RemoveDirective("op_id3");
73  EXPECT_EQ("op_id2", directive_list_->GetActiveDirective()->op_id);
74  directive_list_->RemoveDirective("op_id2");
75  EXPECT_EQ("op_id1", directive_list_->GetActiveDirective()->op_id);
76  directive_list_->RemoveDirective("op_id1");
77  EXPECT_EQ(NULL, directive_list_->GetActiveDirective().get());
78}
79
80}  // namespace copresence
81