diff options
author | 2021-09-14 16:22:24 -0700 | |
---|---|---|
committer | 2021-09-17 22:41:29 +0000 | |
commit | d430202b0aab2c6486aed51de7d4a1dd70bb4378 (patch) | |
tree | 6497fd44cbbe4ab938b691648655cfc6c15ec877 | |
parent | 2dcfdc1b5d30dcbb362ce18c6e7d862125e2cb25 (diff) |
libs/ui: Add MockFence
Add a MockFence class to allow unit tests to mock fences.
Change-Id: I37cf6ce77cb446179b73dfc21f79b19eba2be58f
-rw-r--r-- | libs/ui/Android.bp | 1 | ||||
-rw-r--r-- | libs/ui/include/ui/Fence.h | 11 | ||||
-rw-r--r-- | libs/ui/include_mock/ui/MockFence.h | 32 | ||||
-rw-r--r-- | libs/ui/tests/Android.bp | 9 | ||||
-rw-r--r-- | libs/ui/tests/MockFence_test.cpp | 45 |
5 files changed, 96 insertions, 2 deletions
diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp index ba5a64f317..04ba485574 100644 --- a/libs/ui/Android.bp +++ b/libs/ui/Android.bp @@ -86,6 +86,7 @@ cc_library_static { export_include_dirs: [ "include", + "include_mock", "include_private", "include_types", ], diff --git a/libs/ui/include/ui/Fence.h b/libs/ui/include/ui/Fence.h index 6efecd3c0e..7634007771 100644 --- a/libs/ui/include/ui/Fence.h +++ b/libs/ui/include/ui/Fence.h @@ -26,6 +26,10 @@ namespace android { +namespace mock { +class MockFence; +} + class String8; // =========================================================================== @@ -109,7 +113,7 @@ public: // fence transitioned to the signaled state. If the fence is not signaled // then SIGNAL_TIME_PENDING is returned. If the fence is invalid or if an // error occurs then SIGNAL_TIME_INVALID is returned. - nsecs_t getSignalTime() const; + virtual nsecs_t getSignalTime() const; enum class Status { Invalid, // Fence is invalid @@ -144,7 +148,10 @@ public: private: // Only allow instantiation using ref counting. friend class LightRefBase<Fence>; - ~Fence() = default; + virtual ~Fence() = default; + + // Allow mocking for unit testing + friend class mock::MockFence; base::unique_fd mFenceFd; }; diff --git a/libs/ui/include_mock/ui/MockFence.h b/libs/ui/include_mock/ui/MockFence.h new file mode 100644 index 0000000000..162ec02455 --- /dev/null +++ b/libs/ui/include_mock/ui/MockFence.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License 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. + */ + +#pragma once + +#include <gmock/gmock.h> +#include <ui/Fence.h> + +namespace android::mock { + +class MockFence : public android::Fence { +public: + MockFence() = default; + virtual ~MockFence() = default; + + MOCK_METHOD(nsecs_t, getSignalTime, (), (const, override)); +}; + +}; // namespace android::mock diff --git a/libs/ui/tests/Android.bp b/libs/ui/tests/Android.bp index 516aad824e..a87740aeca 100644 --- a/libs/ui/tests/Android.bp +++ b/libs/ui/tests/Android.bp @@ -115,3 +115,12 @@ cc_test { srcs: ["Size_test.cpp"], cflags: ["-Wall", "-Werror"], } + +cc_test { + name: "MockFence_test", + shared_libs: ["libui"], + static_libs: ["libgmock"], + srcs: ["MockFence_test.cpp"], + cflags: ["-Wall", "-Werror"], +} + diff --git a/libs/ui/tests/MockFence_test.cpp b/libs/ui/tests/MockFence_test.cpp new file mode 100644 index 0000000000..6e520b1aee --- /dev/null +++ b/libs/ui/tests/MockFence_test.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License 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 <ui/MockFence.h> + +#include <gtest/gtest.h> + +namespace android::ui { + +using testing::Return; + +class MockFenceTest : public testing::Test { +public: + sp<Fence> getFenceForTesting() const { return mMockFence; } + + const mock::MockFence& getMockFence() const { return *mMockFence; } + +private: + sp<mock::MockFence> mMockFence = sp<mock::MockFence>::make(); +}; + +TEST_F(MockFenceTest, getSignalTime) { + sp<Fence> fence = getFenceForTesting(); + + EXPECT_CALL(getMockFence(), getSignalTime).WillOnce(Return(Fence::SIGNAL_TIME_PENDING)); + EXPECT_EQ(Fence::SIGNAL_TIME_PENDING, fence->getSignalTime()); + + EXPECT_CALL(getMockFence(), getSignalTime).WillOnce(Return(1234)); + EXPECT_EQ(1234, fence->getSignalTime()); +} + +} // namespace android::ui |