avs-device-sdk/CapabilityAgents/Bluetooth/test/BluetoothAVRCPTransformerTe...

116 lines
4.2 KiB
C++

/*
* Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0/
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
#include <memory>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "Bluetooth/BluetoothAVRCPTransformer.h"
namespace alexaClientSDK {
namespace capabilityAgents {
namespace bluetooth {
namespace test {
using namespace ::testing;
using namespace avsCommon::avs;
using namespace avsCommon::sdkInterfaces;
using namespace avsCommon::sdkInterfaces::bluetooth::services;
using namespace avsCommon::utils;
using namespace avsCommon::utils::bluetooth;
class MockPlaybackRouter : public PlaybackRouterInterface {
public:
MOCK_METHOD1(buttonPressed, void(PlaybackButton));
MOCK_METHOD2(togglePressed, void(PlaybackToggle, bool));
MOCK_METHOD1(setHandler, void(std::shared_ptr<PlaybackHandlerInterface>));
MOCK_METHOD0(switchToDefaultHandler, void());
};
class BluetoothAVRCPTransformerTest : public ::testing::Test {
public:
/// SetUp before each test case.
void SetUp();
protected:
/// The eventbus in which the @c BluetoothAVRCPTransformer will received AVRCP events on.
std::shared_ptr<BluetoothEventBus> m_eventBus;
/// A mock @PlaybackRouterInterface object.
std::shared_ptr<MockPlaybackRouter> m_mockRouter;
/// The @c BluetoothAVRCPTransformer instance under test.
std::shared_ptr<BluetoothAVRCPTransformer> m_avrcp;
};
void BluetoothAVRCPTransformerTest::SetUp() {
m_eventBus = std::make_shared<avsCommon::utils::bluetooth::BluetoothEventBus>();
m_mockRouter = std::make_shared<MockPlaybackRouter>();
m_avrcp = BluetoothAVRCPTransformer::create(m_eventBus, m_mockRouter);
}
/// Test that create() returns a nullptr if called with invalid arguments.
TEST_F(BluetoothAVRCPTransformerTest, test_createWithNullParams) {
ASSERT_THAT(BluetoothAVRCPTransformer::create(m_eventBus, nullptr), IsNull());
ASSERT_THAT(BluetoothAVRCPTransformer::create(nullptr, m_mockRouter), IsNull());
}
/// Test that a Play AVRCP command is transformed to playButtonPressed().
TEST_F(BluetoothAVRCPTransformerTest, test_handlePlayCommand) {
EXPECT_CALL(*m_mockRouter, buttonPressed(PlaybackButton::PLAY)).Times(1);
AVRCPCommandReceivedEvent event(AVRCPCommand::PLAY);
m_eventBus->sendEvent(event);
}
/// Test that a Pause AVRCP command is transformed to pauseButtonPressed().
TEST_F(BluetoothAVRCPTransformerTest, test_handlePauseCommand) {
EXPECT_CALL(*m_mockRouter, buttonPressed(PlaybackButton::PAUSE)).Times(1);
AVRCPCommandReceivedEvent event(AVRCPCommand::PAUSE);
m_eventBus->sendEvent(event);
}
/// Test that a Next AVRCP command is transformed to nextButtonPressed().
TEST_F(BluetoothAVRCPTransformerTest, test_handleNextCommand) {
EXPECT_CALL(*m_mockRouter, buttonPressed(PlaybackButton::NEXT)).Times(1);
AVRCPCommandReceivedEvent event(AVRCPCommand::NEXT);
m_eventBus->sendEvent(event);
}
/// Test that a Previous AVRCP command is transformed to previousButtonPressed().
TEST_F(BluetoothAVRCPTransformerTest, test_handlePreviousCommand) {
EXPECT_CALL(*m_mockRouter, buttonPressed(PlaybackButton::PREVIOUS)).Times(1);
AVRCPCommandReceivedEvent event(AVRCPCommand::PREVIOUS);
m_eventBus->sendEvent(event);
}
/// Test that an unrelated event does not trigger any calls to the PlaybackRouter.
TEST_F(BluetoothAVRCPTransformerTest, test_unrelatedEvent) {
auto strictPlaybackRouter = std::shared_ptr<PlaybackRouterInterface>(new StrictMock<MockPlaybackRouter>());
auto avrcpTransformer = BluetoothAVRCPTransformer::create(m_eventBus, strictPlaybackRouter);
DeviceDiscoveredEvent event(nullptr);
m_eventBus->sendEvent(event);
}
} // namespace test
} // namespace bluetooth
} // namespace capabilityAgents
} // namespace alexaClientSDK