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();
|