blob: bd50e085483f67d4053763cd83a0d4367883280b [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/gtest/test_loop_fixture.h>
#include "src/ui/scenic/lib/display/display_manager2.h"
#include "src/ui/scenic/lib/display/tests/mock_display_controller.h"
namespace scenic_impl {
namespace display {
namespace test {
class DisplayControllerTest : public gtest::TestLoopFixture {};
TEST_F(DisplayControllerTest, Display2Test) {
const uint64_t kDisplayId = 2;
const fuchsia::hardware::display::Mode kDisplayMode = {
.horizontal_resolution = 1024, .vertical_resolution = 800, .refresh_rate_e2 = 60, .flags = 0};
const zx_pixel_format_t kPixelFormat = ZX_PIXEL_FORMAT_ARGB_8888;
Display2 display(kDisplayId, /*display_modes=*/{kDisplayMode}, /*pixel_format=*/{kPixelFormat});
EXPECT_EQ(kDisplayId, display.display_id());
EXPECT_TRUE(fidl::Equals(kDisplayMode, display.display_modes()[0]));
EXPECT_EQ(kPixelFormat, display.pixel_formats()[0]);
display.OnVsync(zx::time(1), {1});
bool invoked_vsync_callback = false;
display.set_on_vsync_callback([&](zx::time timestamp, const std::vector<uint64_t>& images) {
invoked_vsync_callback = true;
EXPECT_EQ(zx::time(2), timestamp);
EXPECT_EQ(1u, images.size());
EXPECT_EQ(2u, images[0]);
});
EXPECT_FALSE(invoked_vsync_callback);
display.OnVsync(zx::time(2), {2});
EXPECT_TRUE(invoked_vsync_callback);
}
TEST_F(DisplayControllerTest, DisplayControllerTest) {
DisplayControllerObjects display_controller_objs = CreateMockDisplayController();
const uint64_t kDisplayId1 = 1;
const uint64_t kDisplayId2 = 2;
const fuchsia::hardware::display::Mode kDisplayMode = {
.horizontal_resolution = 1024, .vertical_resolution = 800, .refresh_rate_e2 = 60, .flags = 0};
const zx_pixel_format_t kPixelFormat = ZX_PIXEL_FORMAT_ARGB_8888;
Display2 display1(kDisplayId1, {kDisplayMode}, {kPixelFormat});
Display2 display2(kDisplayId2, {kDisplayMode}, {kPixelFormat});
std::vector<Display2> displays;
displays.push_back(std::move(display1));
DisplayController dc(std::move(displays), display_controller_objs.interface_ptr);
EXPECT_EQ(display_controller_objs.interface_ptr.get(), dc.controller().get());
EXPECT_EQ(1u, dc.displays()->size());
EXPECT_EQ(kDisplayId1, dc.displays()->at(0).display_id());
bool display_removed = false;
dc.set_on_display_removed_callback([&](uint64_t display_id) {
display_removed = true;
EXPECT_EQ(kDisplayId1, display_id);
});
bool display_added = false;
dc.set_on_display_added_callback([&](Display2* display) {
display_added = true;
EXPECT_EQ(kDisplayId2, display->display_id());
});
dc.AddDisplay(std::move(display2));
EXPECT_TRUE(display_added);
EXPECT_EQ(2u, dc.displays()->size());
EXPECT_EQ(kDisplayId2, dc.displays()->at(1).display_id());
dc.RemoveDisplay(kDisplayId1);
EXPECT_EQ(1u, dc.displays()->size());
EXPECT_EQ(kDisplayId2, dc.displays()->at(0).display_id());
}
} // namespace test
} // namespace display
} // namespace scenic_impl