1import QtQuick
2import QtTest
3import org.kde.kwin
4
5TestCase {
6 name: "KdeCaptureFeedback"
7 when: windowShown
8 property var feedback: null
9 SignalSpy { id: receipt; target: Workspace; signalName: "received" }
10 function create(animate) {
11 const component = Qt.createComponent("../../src/feedback.qml");
12 compare(component.status, Component.Ready, component.errorString());
13 feedback = component.createObject(null, {
14 options: { bounds: { x: -100, y: 0, width: 200, height: 100 }, pid: 123, flash: true, animate: animate },
15 screenshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4////fwAJ+wP9KobjigAAAABJRU5ErkJggg==",
16 bus: "test",
17 motionFactor: 0.01
18 });
19 verify(feedback !== null);
20 if (!Workspace.events.some(event => event.event === "ready")) receipt.wait();
21 verify(Workspace.events.some(event => event.event === "ready"));
22 }
23 function cleanup() {
24 if (feedback) { feedback.finish(); feedback.destroy(); }
25 feedback = null;
26 Workspace.events = [];
27 Workspace.pending = null;
28 Workspace.unloads = 0;
29 receipt.clear();
30 }
31 function test_flight_then_acknowledgement() {
32 create(true);
33 receipt.clear();
34 Workspace.deliver({command: "animate", title: "Draft", frame: {x: 0.5, y: 0.5, width: 0.25, height: 0.2}});
35 receipt.wait();
36 compare(Workspace.events[Workspace.events.length - 1].event, "landed");
37 compare(feedback.frame, Qt.rect(100, 150, 100, 60));
38 verify(feedback.showing);
39 Workspace.deliver({command: "close"});
40 verify(!feedback.showing);
41 compare(Workspace.events[Workspace.events.length - 1].event, "done");
42 }
43 function test_flash_without_flight() {
44 create(false);
45 compare(Workspace.events[0], {event: "ready", animate: false});
46 Workspace.deliver({command: "close"});
47 verify(!feedback.showing);
48 }
49 function test_owner_loss() {
50 create(true);
51 Workspace.pending.failed();
52 verify(!feedback.showing);
53 verify(feedback.closing);
54 compare(Workspace.unloads, 1);
55 }
56 function test_output_change() {
57 create(true);
58 Workspace.virtualScreenGeometryChanged();
59 verify(!feedback.showing);
60 }
61 function test_destination_moves_during_flight() {
62 create(true);
63 Workspace.deliver({command: "animate", title: "Draft", frame: {x: 0.5, y: 0.5, width: 0.25, height: 0.2}});
64 Workspace.windows[0].clientGeometry = Qt.rect(-100, 1, 400, 300);
65 verify(feedback.closing);
66 verify(!feedback.showing);
67 Workspace.windows[0].clientGeometry = Qt.rect(-100, 0, 400, 300);
68 }
69 function test_lock_cancels_during_flight() {
70 create(true);
71 Workspace.deliver({command: "animate", title: "Draft", frame: {x: 0.5, y: 0.5, width: 0.25, height: 0.2}});
72 Workspace.deliver({command: "close"});
73 verify(!feedback.showing);
74 verify(feedback.closing);
75 }
76 function test_invalid_destination() {
77 create(true);
78 Workspace.deliver({command: "animate", title: "Wrong window", frame: {x: 0, y: 0, width: 1, height: 1}});
79 verify(feedback.closing);
80 verify(!feedback.showing);
81 }
82}