2
* Copyright © 2013 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License version 3 as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Kevin DuBois <kevin.dubois@canonical.com>
19
#include "src/client/mesa/native_surface.h"
20
#include "src/client/client_buffer.h"
21
#include "mir_test_doubles/mock_client_surface.h"
23
#include <gmock/gmock.h>
24
#include <gtest/gtest.h>
26
namespace mtd=mir::test::doubles;
27
namespace mcl=mir::client;
28
namespace mcl=mir::client;
29
namespace mclg=mir::client::mesa;
30
namespace geom=mir::geometry;
35
struct MockClientBuffer : public mcl::ClientBuffer
39
ON_CALL(*this, native_buffer_handle())
40
.WillByDefault(testing::Return(std::make_shared<MirBufferPackage>()));
42
~MockClientBuffer() noexcept {}
44
MOCK_METHOD0(secure_for_cpu_write, std::shared_ptr<mcl::MemoryRegion>());
45
MOCK_CONST_METHOD0(size, geom::Size());
46
MOCK_CONST_METHOD0(stride, geom::Stride());
47
MOCK_CONST_METHOD0(pixel_format, MirPixelFormat());
49
MOCK_CONST_METHOD0(age, uint32_t());
50
MOCK_METHOD0(mark_as_submitted, void());
51
MOCK_METHOD0(increment_age, void());
53
MOCK_CONST_METHOD0(native_buffer_handle, std::shared_ptr<MirNativeBuffer>());
58
class MesaClientNativeSurfaceTest : public ::testing::Test
63
using namespace testing;
64
surf_params.width = 530;
65
surf_params.height = 715;
66
surf_params.pixel_format = mir_pixel_format_abgr_8888;
68
ON_CALL(mock_surface, get_parameters())
69
.WillByDefault(Return(surf_params));
70
ON_CALL(mock_surface, get_current_buffer())
71
.WillByDefault(Return(
72
std::make_shared<NiceMock<MockClientBuffer>>()));
75
MirSurfaceParameters surf_params;
76
testing::NiceMock<mtd::MockClientSurface> mock_surface;
79
TEST_F(MesaClientNativeSurfaceTest, basic_parameters)
81
mclg::NativeSurface interpreter(mock_surface);
83
MirSurfaceParameters params;
84
interpreter.surface_get_parameters(&interpreter, ¶ms);
85
EXPECT_EQ(surf_params.width, params.width);
86
EXPECT_EQ(surf_params.height, params.height);
87
EXPECT_EQ(surf_params.pixel_format, params.pixel_format);
90
TEST_F(MesaClientNativeSurfaceTest, basic_advance)
92
using namespace testing;
93
MirBufferPackage buffer_package;
94
EXPECT_CALL(mock_surface, next_buffer(_,_))
96
EXPECT_CALL(mock_surface, get_current_buffer())
99
mclg::NativeSurface interpreter(mock_surface);
100
interpreter.surface_advance_buffer(&interpreter, &buffer_package);
103
TEST_F(MesaClientNativeSurfaceTest, swapinterval_request)
105
using namespace testing;
108
EXPECT_CALL(mock_surface, configure(mir_surface_attrib_swapinterval,0))
110
EXPECT_CALL(mock_surface, configure(mir_surface_attrib_swapinterval,1))
113
mclg::NativeSurface interpreter(mock_surface);
114
interpreter.set_swapinterval(0);
115
interpreter.set_swapinterval(1);
118
TEST_F(MesaClientNativeSurfaceTest, swapinterval_unsupported_request)
120
mclg::NativeSurface interpreter(mock_surface);
121
EXPECT_EQ(MIR_MESA_FALSE, interpreter.set_swapinterval(-1));
122
EXPECT_EQ(MIR_MESA_TRUE, interpreter.set_swapinterval(0));
123
EXPECT_EQ(MIR_MESA_TRUE, interpreter.set_swapinterval(1));
124
EXPECT_EQ(MIR_MESA_FALSE, interpreter.set_swapinterval(2));