AtlatestRepositorysigil-wm
1
/* SPDX-License-Identifier: BSD-3-Clause2
* Exercise real enumeration/copy code with a two-connector DRM fixture.3
* The unplugged connector has never had a wlroots output. No display opens. */4
#define wlr_backend_is_drm fixture_is_drm5
#define wlr_backend_is_multi fixture_is_multi6
#define wlr_backend_get_drm_fd fixture_drm_fd7
#define wlr_output_is_drm fixture_output_is_drm8
#define wlr_drm_connector_get_id fixture_connector_id9
#define drmModeGetResources fixture_resources10
#define drmModeGetConnectorCurrent fixture_connector11
#define drmModeFreeResources fixture_free_resources12
#define drmModeFreeConnector fixture_free_connector13
#include "../src/c/host.c"14
#include <assert.h>15
static uint32_t connector_ids[]={42,43};16
static drmModeRes resources={.count_connectors=2,.connectors=connector_ids};17
static drmModeConnector unplugged={.connector_id=42,.connector_type=DRM_MODE_CONNECTOR_DisplayPort,18
.connector_type_id=1,.connection=DRM_MODE_DISCONNECTED};19
static drmModeConnector connected={.connector_id=43,.connector_type=DRM_MODE_CONNECTOR_HDMIA,20
.connector_type_id=1,.connection=DRM_MODE_CONNECTED};21
bool fixture_is_drm(struct wlr_backend *backend) { (void)backend; return true; }22
bool fixture_is_multi(struct wlr_backend *backend) { (void)backend; return false; }23
int fixture_drm_fd(struct wlr_backend *backend) { (void)backend; return STDIN_FILENO; }24
bool fixture_output_is_drm(struct wlr_output *output) { (void)output; return true; }25
uint32_t fixture_connector_id(struct wlr_output *output) { (void)output; return 43; }26
drmModeRes *fixture_resources(int fd) { (void)fd; return &resources; }27
drmModeConnector *fixture_connector(int fd,uint32_t id) { (void)fd; return id==42 ? &unplugged : &connected; }28
void fixture_free_resources(drmModeRes *value) { (void)value; }29
void fixture_free_connector(drmModeConnector *value) { (void)value; }30
int main(void) {31
struct server s={0};32
struct wlr_backend backend={0};33
struct wlr_output native={.backend=&backend,.name="HDMI-A-1",.make="Acme",.model="Panel",.serial="123",34
.width=2560,.height=1440,.refresh=60000,.enabled=true,.scale=1.5,.transform=3};35
struct output output={.server=&s,.native=&native,.id=7,.configured_enabled=true,.x=-1707,.y=20};36
s.backend=&backend;37
wl_list_init(&s.outputs); wl_list_insert(&s.outputs,&output.link); wl_list_init(&native.modes);38
inventory_refresh(&s);39
struct inventory_snapshot *copy=malloc(wm_inventory_size());40
assert(copy && wm_inventory_copy(copy,wm_inventory_size()));41
assert(copy->version==1 && copy->count==2 && !copy->truncated);42
assert(!strcmp(copy->records[0].name,"DP-1"));43
assert(copy->records[0].word[0]==0 && copy->records[0].word[1]==0);44
assert(copy->records[0].word[13]==42 && !copy->records[0].make[0]);45
struct inventory_record *record=©->records[1];46
assert(record->word[0]==7 && record->word[1]==1 && record->word[2]==1);47
assert(record->word[4]==-1707 && record->word[6]==1500 && record->word[7]==3);48
assert(!strcmp(record->make,"Acme") && !strcmp(record->model,"Panel") && !strcmp(record->serial,"123"));49
assert(!wm_inventory_copy(copy,1));50
native.enabled=false; inventory_refresh(&s);51
assert(record->word[3]==1); /* Detached copy survives owner mutation. */52
assert(wm_inventory_copy(copy,wm_inventory_size()) && record->word[3]==0 && record->word[2]==1);53
free(copy);54
puts("OUTPUT_INVENTORY=PASS never-connected metadata geometry power detached bounds");55
}