/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include #include #include namespace UnitTest { class ITestSystem { public: AZ_RTTI(ITestSystem, "{E13935AC-5A72-432E-9E5D-72975CCC5CF9}"); ITestSystem() = default; ITestSystem(ITestSystem&&) = delete; ITestSystem& operator=(ITestSystem&&) = delete; virtual ~ITestSystem() = default; virtual void SetNumber(uint32_t) = 0; virtual uint32_t GetNumber() const = 0; }; class TestSystem : public ITestSystem { public: void Activate() { AZ::Interface::Register(this); } void Deactivate() { AZ::Interface::Unregister(this); } void SetNumber(uint32_t number) override { m_number = number; } uint32_t GetNumber() const override { return m_number; } private: uint32_t m_number = 0; }; class TestSystemWithRegistrar : public AZ::Interface::Registrar { public: void SetNumber(uint32_t number) override { m_number = number; } uint32_t GetNumber() const override { return m_number; } private: uint32_t m_number = 0; }; class InterfaceTest : public AllocatorsTestFixture { }; TEST_F(InterfaceTest, EmptyInterfaceTest) { ITestSystem* testSystemInterface = AZ::Interface::Get(); EXPECT_EQ(testSystemInterface, nullptr); } TEST_F(InterfaceTest, EmptyAfterDisconnectTest) { TestSystem system; system.Activate(); ITestSystem* valid = AZ::Interface::Get(); EXPECT_NE(valid, nullptr); system.Deactivate(); ITestSystem* invalid = AZ::Interface::Get(); EXPECT_EQ(invalid, nullptr); } TEST_F(InterfaceTest, ValidInterfaceTest) { TestSystem system; system.Activate(); { ITestSystem* testSystemInterface = AZ::Interface::Get(); EXPECT_NE(testSystemInterface, nullptr); testSystemInterface->SetNumber(1); EXPECT_EQ(testSystemInterface->GetNumber(), 1); } system.Deactivate(); } TEST_F(InterfaceTest, RegistrarTest) { ITestSystem* testSystemInterface = AZ::Interface::Get(); EXPECT_EQ(testSystemInterface, nullptr); { TestSystemWithRegistrar system; testSystemInterface = AZ::Interface::Get(); EXPECT_NE(testSystemInterface, nullptr); } testSystemInterface = AZ::Interface::Get(); EXPECT_EQ(testSystemInterface, nullptr); } TEST_F(InterfaceTest, RegisterTwiceAssertTest) { TestSystem testSystem1; TestSystem testSystem2; testSystem1.Activate(); AZ_TEST_START_TRACE_SUPPRESSION; // This should fail. testSystem2.Activate(); AZ_TEST_STOP_TRACE_SUPPRESSION(1); AZ_TEST_START_TRACE_SUPPRESSION; // This should also fail. testSystem2.Deactivate(); AZ_TEST_STOP_TRACE_SUPPRESSION(1); testSystem1.Deactivate(); } TEST_F(InterfaceTest, RegisterMismatchTest) { TestSystem testSystem1; TestSystem testSystem2; testSystem1.Activate(); AZ_TEST_START_TRACE_SUPPRESSION; // This should fail. testSystem2.Deactivate(); AZ_TEST_STOP_TRACE_SUPPRESSION(1); testSystem1.Deactivate(); } }