1 /*
2 * Copyright 2020 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "api/adaptation/resource.h"
12
13 #include <memory>
14
15 #include "api/scoped_refptr.h"
16 #include "call/adaptation/test/fake_resource.h"
17 #include "call/adaptation/test/mock_resource_listener.h"
18 #include "test/gmock.h"
19 #include "test/gtest.h"
20
21 namespace webrtc {
22
23 using ::testing::_;
24 using ::testing::StrictMock;
25
26 class ResourceTest : public ::testing::Test {
27 public:
ResourceTest()28 ResourceTest() : fake_resource_(FakeResource::Create("FakeResource")) {}
29
30 protected:
31 rtc::scoped_refptr<FakeResource> fake_resource_;
32 };
33
TEST_F(ResourceTest,RegisteringListenerReceivesCallbacks)34 TEST_F(ResourceTest, RegisteringListenerReceivesCallbacks) {
35 StrictMock<MockResourceListener> resource_listener;
36 fake_resource_->SetResourceListener(&resource_listener);
37 EXPECT_CALL(resource_listener, OnResourceUsageStateMeasured(_, _))
38 .Times(1)
39 .WillOnce([](rtc::scoped_refptr<Resource> resource,
40 ResourceUsageState usage_state) {
41 EXPECT_EQ(ResourceUsageState::kOveruse, usage_state);
42 });
43 fake_resource_->SetUsageState(ResourceUsageState::kOveruse);
44 fake_resource_->SetResourceListener(nullptr);
45 }
46
TEST_F(ResourceTest,UnregisteringListenerStopsCallbacks)47 TEST_F(ResourceTest, UnregisteringListenerStopsCallbacks) {
48 StrictMock<MockResourceListener> resource_listener;
49 fake_resource_->SetResourceListener(&resource_listener);
50 fake_resource_->SetResourceListener(nullptr);
51 EXPECT_CALL(resource_listener, OnResourceUsageStateMeasured(_, _)).Times(0);
52 fake_resource_->SetUsageState(ResourceUsageState::kOveruse);
53 }
54
55 } // namespace webrtc
56