86
87
struct MockAsyncBufferFactory : mcl::AsyncBufferFactory
88
89
MOCK_METHOD1(cancel_requests_with_context, void(void*));
89
MOCK_METHOD1(generate_buffer, std::unique_ptr<mcl::Buffer>(mp::Buffer const&));
90
MOCK_METHOD1(generate_buffer, std::unique_ptr<mcl::MirBuffer>(mp::Buffer const&));
90
91
MOCK_METHOD7(expect_buffer, void(
91
92
std::shared_ptr<mcl::ClientBufferFactory> const& native_buffer_factory,
92
MirPresentationChain* chain,
93
MirConnection* connection,
94
95
MirPixelFormat format,
95
96
MirBufferUsage usage,
592
593
config_wait_handle->wait_for_all();
595
static MirSurface *surface;
596
static void surface_callback(MirSurface* surf, void*)
601
static bool unfocused_received;
602
static void surface_event_callback(MirSurface *, MirEvent const *ev, void *)
604
if (mir_event_type_surface != mir_event_get_type(ev))
606
auto surface_ev = mir_event_get_surface_event(ev);
607
if (mir_surface_attrib_focus != mir_surface_event_get_attribute(surface_ev))
609
if (mir_surface_unfocused != mir_surface_event_get_attribute_value(surface_ev))
611
unfocused_received = true;
614
TEST_F(MirConnectionTest, focused_window_synthesises_unfocus_event_on_release)
616
using namespace testing;
618
MirSurfaceSpec params{nullptr, 640, 480, mir_pixel_format_abgr_8888};
619
params.surface_name = __PRETTY_FUNCTION__;
621
unfocused_received = false;
623
MirWaitHandle *wait_handle = connection->connect("MirClientSurfaceTest", &connected_callback, nullptr);
624
wait_handle->wait_for_all();
626
wait_handle = connection->create_surface(params, &surface_callback, nullptr);
627
wait_handle->wait_for_all();
629
surface->handle_event(*mev::make_event(mf::SurfaceId{surface->id()}, mir_surface_attrib_focus, mir_surface_focused));
631
surface->set_event_handler(&surface_event_callback, nullptr);
633
wait_handle = connection->release_surface(surface, &surface_callback, nullptr);
634
wait_handle->wait_for_all();
636
wait_handle = connection->disconnect();
637
wait_handle->wait_for_all();
639
EXPECT_TRUE(unfocused_received);
642
TEST_F(MirConnectionTest, unfocused_window_does_not_synthesise_unfocus_event_on_release)
644
using namespace testing;
646
MirSurfaceSpec params{nullptr, 640, 480, mir_pixel_format_abgr_8888};
647
params.surface_name = __PRETTY_FUNCTION__;
649
unfocused_received = false;
651
MirWaitHandle *wait_handle = connection->connect("MirClientSurfaceTest", &connected_callback, nullptr);
652
wait_handle->wait_for_all();
654
wait_handle = connection->create_surface(params, &surface_callback, nullptr);
655
wait_handle->wait_for_all();
657
surface->handle_event(*mev::make_event(mf::SurfaceId{surface->id()}, mir_surface_attrib_focus, mir_surface_unfocused));
659
surface->set_event_handler(&surface_event_callback, nullptr);
661
wait_handle = connection->release_surface(surface, &surface_callback, nullptr);
662
wait_handle->wait_for_all();
664
wait_handle = connection->disconnect();
665
wait_handle->wait_for_all();
667
EXPECT_FALSE(unfocused_received);
932
858
params->set_buffer_usage(usage);
933
859
params->set_pixel_format(format);
934
860
EXPECT_CALL(*mock_channel, allocate_buffers(BufferAllocationMatches(mp_alloc)));
935
EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, nullptr, size, format, usage, nullptr, nullptr));
861
EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, connection.get(), size, format, usage, nullptr, nullptr));
937
863
connection->allocate_buffer(size, format, usage, nullptr, nullptr);
940
866
TEST_F(MirConnectionTest, can_release_buffer_from_connection)
942
868
int buffer_id = 1320;
869
testing::NiceMock<mtd::MockMirBuffer> mock_buffer;
870
ON_CALL(mock_buffer, valid())
871
.WillByDefault(Return(true));
872
ON_CALL(mock_buffer, rpc_id())
873
.WillByDefault(Return(buffer_id));
943
874
mp::BufferRelease release_msg;
944
875
auto released_buffer = release_msg.add_buffers();
945
876
released_buffer->set_buffer_id(buffer_id);
947
878
EXPECT_CALL(*mock_channel, release_buffers(BufferReleaseMatches(release_msg)));
949
connection->release_buffer(buffer_id);
880
connection->release_buffer(&mock_buffer);