AtlatestRepositorysigil-wm

sigil-wm / tree / testoutput-inventory.c

1/* SPDX-License-Identifier: BSD-3-Clause
2 * 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_drm
5#define wlr_backend_is_multi fixture_is_multi
6#define wlr_backend_get_drm_fd fixture_drm_fd
7#define wlr_output_is_drm fixture_output_is_drm
8#define wlr_drm_connector_get_id fixture_connector_id
9#define drmModeGetResources fixture_resources
10#define drmModeGetConnectorCurrent fixture_connector
11#define drmModeFreeResources fixture_free_resources
12#define drmModeFreeConnector fixture_free_connector
13#include "../src/c/host.c"
14#include <assert.h>
15static uint32_t connector_ids[]={42,43};
16static drmModeRes resources={.count_connectors=2,.connectors=connector_ids};
17static drmModeConnector unplugged={.connector_id=42,.connector_type=DRM_MODE_CONNECTOR_DisplayPort,
18 .connector_type_id=1,.connection=DRM_MODE_DISCONNECTED};
19static drmModeConnector connected={.connector_id=43,.connector_type=DRM_MODE_CONNECTOR_HDMIA,
20 .connector_type_id=1,.connection=DRM_MODE_CONNECTED};
21bool fixture_is_drm(struct wlr_backend *backend) { (void)backend; return true; }
22bool fixture_is_multi(struct wlr_backend *backend) { (void)backend; return false; }
23int fixture_drm_fd(struct wlr_backend *backend) { (void)backend; return STDIN_FILENO; }
24bool fixture_output_is_drm(struct wlr_output *output) { (void)output; return true; }
25uint32_t fixture_connector_id(struct wlr_output *output) { (void)output; return 43; }
26drmModeRes *fixture_resources(int fd) { (void)fd; return &resources; }
27drmModeConnector *fixture_connector(int fd,uint32_t id) { (void)fd; return id==42 ? &unplugged : &connected; }
28void fixture_free_resources(drmModeRes *value) { (void)value; }
29void fixture_free_connector(drmModeConnector *value) { (void)value; }
30int 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=&copy->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");