1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <ui/DisplayId.h>
18 
19 #include <gtest/gtest.h>
20 
21 namespace android::ui {
22 
TEST(DisplayIdTest,createPhysicalIdFromEdid)23 TEST(DisplayIdTest, createPhysicalIdFromEdid) {
24     constexpr uint8_t port = 1;
25     constexpr uint16_t manufacturerId = 13;
26     constexpr uint32_t modelHash = 42;
27     const PhysicalDisplayId id = PhysicalDisplayId::fromEdid(port, manufacturerId, modelHash);
28     EXPECT_EQ(port, id.getPort());
29     EXPECT_EQ(manufacturerId, id.getManufacturerId());
30     EXPECT_FALSE(VirtualDisplayId::tryCast(id));
31     EXPECT_FALSE(HalVirtualDisplayId::tryCast(id));
32     EXPECT_FALSE(GpuVirtualDisplayId::tryCast(id));
33     EXPECT_TRUE(PhysicalDisplayId::tryCast(id));
34     EXPECT_TRUE(HalDisplayId::tryCast(id));
35 
36     EXPECT_EQ(id, DisplayId::fromValue(id.value));
37     EXPECT_EQ(id, DisplayId::fromValue<PhysicalDisplayId>(id.value));
38 }
39 
TEST(DisplayIdTest,createPhysicalIdFromPort)40 TEST(DisplayIdTest, createPhysicalIdFromPort) {
41     constexpr uint8_t port = 3;
42     const PhysicalDisplayId id = PhysicalDisplayId::fromPort(port);
43     EXPECT_EQ(port, id.getPort());
44     EXPECT_FALSE(VirtualDisplayId::tryCast(id));
45     EXPECT_FALSE(HalVirtualDisplayId::tryCast(id));
46     EXPECT_FALSE(GpuVirtualDisplayId::tryCast(id));
47     EXPECT_TRUE(PhysicalDisplayId::tryCast(id));
48     EXPECT_TRUE(HalDisplayId::tryCast(id));
49 
50     EXPECT_EQ(id, DisplayId::fromValue(id.value));
51     EXPECT_EQ(id, DisplayId::fromValue<PhysicalDisplayId>(id.value));
52 }
53 
TEST(DisplayIdTest,createGpuVirtualId)54 TEST(DisplayIdTest, createGpuVirtualId) {
55     const GpuVirtualDisplayId id(42);
56     EXPECT_TRUE(VirtualDisplayId::tryCast(id));
57     EXPECT_TRUE(GpuVirtualDisplayId::tryCast(id));
58     EXPECT_FALSE(HalVirtualDisplayId::tryCast(id));
59     EXPECT_FALSE(PhysicalDisplayId::tryCast(id));
60     EXPECT_FALSE(HalDisplayId::tryCast(id));
61 
62     EXPECT_EQ(id, DisplayId::fromValue(id.value));
63     EXPECT_EQ(id, DisplayId::fromValue<GpuVirtualDisplayId>(id.value));
64 }
65 
TEST(DisplayIdTest,createVirtualIdFromGpuVirtualId)66 TEST(DisplayIdTest, createVirtualIdFromGpuVirtualId) {
67     const VirtualDisplayId id(GpuVirtualDisplayId(42));
68     EXPECT_TRUE(VirtualDisplayId::tryCast(id));
69     EXPECT_TRUE(GpuVirtualDisplayId::tryCast(id));
70     EXPECT_FALSE(HalVirtualDisplayId::tryCast(id));
71     EXPECT_FALSE(PhysicalDisplayId::tryCast(id));
72     EXPECT_FALSE(HalDisplayId::tryCast(id));
73 
74     const bool isGpuVirtualId = (id.value & VirtualDisplayId::FLAG_GPU);
75     EXPECT_EQ((id.isVirtual() && isGpuVirtualId), GpuVirtualDisplayId::tryCast(id).has_value());
76 }
77 
TEST(DisplayIdTest,createGpuVirtualIdFromUniqueId)78 TEST(DisplayIdTest, createGpuVirtualIdFromUniqueId) {
79     static const std::string kUniqueId("virtual:ui:DisplayId_test");
80     const auto idOpt = GpuVirtualDisplayId::fromUniqueId(kUniqueId);
81     ASSERT_TRUE(idOpt.has_value());
82     const GpuVirtualDisplayId id = idOpt.value();
83     EXPECT_TRUE(VirtualDisplayId::tryCast(id));
84     EXPECT_TRUE(GpuVirtualDisplayId::tryCast(id));
85     EXPECT_FALSE(HalVirtualDisplayId::tryCast(id));
86     EXPECT_FALSE(PhysicalDisplayId::tryCast(id));
87     EXPECT_FALSE(HalDisplayId::tryCast(id));
88 
89     EXPECT_EQ(id, DisplayId::fromValue(id.value));
90     EXPECT_EQ(id, DisplayId::fromValue<GpuVirtualDisplayId>(id.value));
91 }
92 
TEST(DisplayIdTest,createHalVirtualId)93 TEST(DisplayIdTest, createHalVirtualId) {
94     const HalVirtualDisplayId id(42);
95     EXPECT_TRUE(VirtualDisplayId::tryCast(id));
96     EXPECT_TRUE(HalVirtualDisplayId::tryCast(id));
97     EXPECT_FALSE(GpuVirtualDisplayId::tryCast(id));
98     EXPECT_FALSE(PhysicalDisplayId::tryCast(id));
99     EXPECT_TRUE(HalDisplayId::tryCast(id));
100 
101     EXPECT_EQ(id, DisplayId::fromValue(id.value));
102     EXPECT_EQ(id, DisplayId::fromValue<HalVirtualDisplayId>(id.value));
103 }
104 
TEST(DisplayIdTest,createVirtualIdFromHalVirtualId)105 TEST(DisplayIdTest, createVirtualIdFromHalVirtualId) {
106     const VirtualDisplayId id(HalVirtualDisplayId(42));
107     EXPECT_TRUE(VirtualDisplayId::tryCast(id));
108     EXPECT_TRUE(HalVirtualDisplayId::tryCast(id));
109     EXPECT_FALSE(GpuVirtualDisplayId::tryCast(id));
110     EXPECT_FALSE(PhysicalDisplayId::tryCast(id));
111     EXPECT_TRUE(HalDisplayId::tryCast(id));
112 
113     const bool isGpuVirtualId = (id.value & VirtualDisplayId::FLAG_GPU);
114     EXPECT_EQ((id.isVirtual() && !isGpuVirtualId), HalVirtualDisplayId::tryCast(id).has_value());
115 }
116 
117 } // namespace android::ui
118