/* * Copyright 2018 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 #include #include #include #include #include #include namespace alexaClientSDK { namespace settings { namespace test { enum TestSettingId { TEST_ID_INT = 0, TEST_ID_STRING }; /// @defgroup Define initial, new and default values to be used in the test. /// @{ constexpr int INITIAL_INT_VALUE = 20; constexpr int NEW_INT_VALUE = -20; constexpr int DEFAULT_INT_VALUE = 0; /// @} /// Settings stub that just set the value immediately. template class SettingStub : public SettingInterface { public: SetSettingResult setLocalChange(const ValueT& value) override { this->m_value = value; return SetSettingResult::ENQUEUED; } SettingStub(const ValueT& value) : SettingInterface{value} { } }; /// Just an empty observer. template class TestObserver : public SettingT::ObserverType { public: void onSettingNotification(const typename SettingT::ValueType& value, SettingNotifications notification) override { } }; /// @defgroup Define settings types used in the tests. /// @{ using SettingInt = SettingStub; using SettingString = SettingStub; /// @} /// Test class. class SettingsManagerTest : public testing::Test { protected: /// Settings Manager. SettingsManager m_manager; }; /// Test add settings and setting the setting value. TEST_F(SettingsManagerTest, testSetExistingSetting) { auto setting = std::make_shared(INITIAL_INT_VALUE); auto expectedResult = std::pair{true, NEW_INT_VALUE}; EXPECT_TRUE((m_manager.addSetting(setting))); EXPECT_EQ((m_manager.setValue(NEW_INT_VALUE)), SetSettingResult::ENQUEUED); EXPECT_EQ((m_manager.getValue(DEFAULT_INT_VALUE)), expectedResult); } /// Test set value for setting that hasn't been registered. TEST_F(SettingsManagerTest, testSetSettingUnavailable) { SettingsManager manager; EXPECT_EQ((m_manager.setValue(NEW_INT_VALUE)), SetSettingResult::UNAVAILABLE_SETTING); } /// Test get value for setting that hasn't been registered. TEST_F(SettingsManagerTest, testGetExistingSetting) { auto setting = std::make_shared(INITIAL_INT_VALUE); auto expectedResult = std::pair{true, INITIAL_INT_VALUE}; EXPECT_TRUE((m_manager.addSetting(setting))); EXPECT_EQ((m_manager.getValue(DEFAULT_INT_VALUE)), expectedResult); } /// Test get value for setting that hasn't been registered. TEST_F(SettingsManagerTest, testGetSettingUnavailable) { auto expectedResult = std::pair{false, DEFAULT_INT_VALUE}; EXPECT_EQ((m_manager.getValue(DEFAULT_INT_VALUE)), expectedResult); } /// Test registering a setting that already exists. TEST_F(SettingsManagerTest, testAddExistingSetting) { auto setting1 = std::make_shared(INITIAL_INT_VALUE); auto setting2 = std::make_shared(INITIAL_INT_VALUE); EXPECT_TRUE((m_manager.addSetting(setting1))); EXPECT_FALSE((m_manager.addSetting(setting2))); } /// Test addObserver for a setting that exists. TEST_F(SettingsManagerTest, testAddObserver) { auto setting = std::make_shared(INITIAL_INT_VALUE); auto observer = std::make_shared>(); EXPECT_TRUE((m_manager.addSetting(setting))); EXPECT_TRUE((m_manager.addObserver(observer))); } /// Test addObserver for a setting that doesn't exist. TEST_F(SettingsManagerTest, testAddObserverFailed) { auto observer = std::make_shared>(); EXPECT_FALSE((m_manager.addObserver(observer))); } /// Test addObserver for a setting that exists. TEST_F(SettingsManagerTest, testRemoveObserver) { auto setting = std::make_shared(INITIAL_INT_VALUE); auto observer = std::make_shared>(); EXPECT_TRUE((m_manager.addSetting(setting))); EXPECT_TRUE((m_manager.addObserver(observer))); m_manager.removeObserver(observer); } /// Test addObserver for a setting that doesn't exist. TEST_F(SettingsManagerTest, testRemoveObserverFailed) { auto observer = std::make_shared>(); m_manager.removeObserver(observer); } /// Test manager operations for string setting. TEST_F(SettingsManagerTest, testSetExistingStringSetting) { std::string initialValue = ""; auto setting = std::make_shared(initialValue); EXPECT_TRUE((m_manager.addSetting(setting))); EXPECT_EQ((m_manager.setValue("test")), SetSettingResult::ENQUEUED); } } // namespace test } // namespace settings } // namespace alexaClientSDK