summaryrefslogtreecommitdiffstatshomepage
path: root/tests/fixtures/display-lifecycle.js
blob: 2173c471042a9fe88c9f815fdabb510138f1dfef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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();