| 1 | import QtQuick |
| 2 | import QtTest |
| 3 | import org.kde.kwin |
| 4 | |
| 5 | TestCase { |
| 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 | } |