diff options
Diffstat (limited to 'tests/fixtures/display-lifecycle.js')
| -rw-r--r-- | tests/fixtures/display-lifecycle.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/fixtures/display-lifecycle.js b/tests/fixtures/display-lifecycle.js new file mode 100644 index 0000000..2173c47 --- /dev/null +++ b/tests/fixtures/display-lifecycle.js @@ -0,0 +1,56 @@ +import assert from 'node:assert/strict'; + +class Extension {} +const Meta = {MonitorSwitchConfigType: {EXTERNAL: 2}}; +let callback; +let requests = 0; +let switchable = true; +let builtinOn = true; +const manager = { + has_builtin_panel: true, + connect(signal, handler) { + assert.equal(signal, 'monitors-changed'); + callback = handler; + return 1; + }, + disconnect(id) { + assert.equal(id, 1); + callback = null; + }, + can_switch_config: () => switchable, + get_is_builtin_display_on: () => builtinOn, + switch_config(type) { + assert.equal(type, Meta.MonitorSwitchConfigType.EXTERNAL); + requests++; + builtinOn = false; + }, +}; +globalThis.global = {backend: {get_monitor_manager: () => manager}}; + +// EXTENSION + +const extension = new ExternalDisplay(); +extension.enable(); +assert.equal(requests, 1); +callback(); +assert.equal(requests, 1); + +// One connected display, or a closed lid, prevents switching. +switchable = false; +builtinOn = true; +callback(); +assert.equal(requests, 1); +switchable = true; +callback(); +assert.equal(requests, 2); + +manager.has_builtin_panel = false; +builtinOn = true; +callback(); +assert.equal(requests, 2); +extension.disable(); +assert.equal(callback, null); +manager.has_builtin_panel = true; +extension.enable(); +assert.equal(requests, 3); +extension.disable(); |
