blob: 231e775c45e79bb94f040141c88741efdb01a901 [file] [log] [blame]
// Copyright 2021 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 <fuchsia/ui/views/cpp/fidl.h>
#include <lib/ui/scenic/cpp/view_identity.h>
#include <zircon/rights.h>
#include <zircon/syscalls/object.h>
#include <zircon/types.h>
#include <gtest/gtest.h>
namespace {
TEST(ViewIdentityTest, ViewRefPairIsRelated) {
auto [view_ref, control_ref] = scenic::NewViewIdentityOnCreation();
// Get info about the |control_ref|.
zx_info_handle_basic_t c_info;
zx_status_t c_status = zx_object_get_info(control_ref.reference.get(), ZX_INFO_HANDLE_BASIC,
&c_info, sizeof(c_info), nullptr, nullptr);
EXPECT_EQ(c_status, ZX_OK);
// Get info about the |view_ref|.
zx_info_handle_basic_t v_info;
zx_status_t v_status = zx_object_get_info(view_ref.reference.get(), ZX_INFO_HANDLE_BASIC, &v_info,
sizeof(v_info), nullptr, nullptr);
EXPECT_EQ(v_status, ZX_OK);
// The refs' koids should always be related.
EXPECT_EQ(c_info.koid, v_info.related_koid);
EXPECT_EQ(c_info.related_koid, v_info.koid);
}
TEST(ViewIdentityTest, ViewRefPairRights) {
auto [view_ref, control_ref] = scenic::NewViewIdentityOnCreation();
// Get info about the |control_ref|.
zx_info_handle_basic_t c_info;
zx_status_t c_status = zx_object_get_info(control_ref.reference.get(), ZX_INFO_HANDLE_BASIC,
&c_info, sizeof(c_info), nullptr, nullptr);
EXPECT_EQ(c_status, ZX_OK);
// Control ref has most eventpair rights, except for duplication.
EXPECT_EQ(c_info.rights, ZX_DEFAULT_EVENTPAIR_RIGHTS & (~ZX_RIGHT_DUPLICATE));
// Get info about the |view_ref|.
zx_info_handle_basic_t v_info;
zx_status_t v_status = zx_object_get_info(view_ref.reference.get(), ZX_INFO_HANDLE_BASIC, &v_info,
sizeof(v_info), nullptr, nullptr);
EXPECT_EQ(v_status, ZX_OK);
// View ref has basic rights (but no signaling).
EXPECT_EQ(v_info.rights, ZX_RIGHTS_BASIC);
}
} // namespace