1 /*
2     SPDX-FileCopyrightText: 2016 Martin Graesslin <mgraesslin@kde.org>
3 
4     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5 
6 */
7 
8 #include "onscreennotificationtest.h"
9 
10 #include "onscreennotification.h"
11 #include "input.h"
12 
13 #include <KSharedConfig>
14 #include <KConfigGroup>
15 
16 #include <QQmlEngine>
17 #include <QSignalSpy>
18 #include <QTest>
19 
20 QTEST_MAIN(OnScreenNotificationTest);
21 
22 namespace KWin
23 {
24 
installInputEventSpy(InputEventSpy * spy)25 void InputRedirection::installInputEventSpy(InputEventSpy *spy)
26 {
27     Q_UNUSED(spy);
28 }
29 
uninstallInputEventSpy(InputEventSpy * spy)30 void InputRedirection::uninstallInputEventSpy(InputEventSpy *spy)
31 {
32     Q_UNUSED(spy);
33 }
34 
35 InputRedirection *InputRedirection::s_self = nullptr;
36 
37 }
38 
39 using KWin::OnScreenNotification;
40 
show()41 void OnScreenNotificationTest::show()
42 {
43     OnScreenNotification notification;
44     auto config = KSharedConfig::openConfig(QString(), KSharedConfig::SimpleConfig);
45     KConfigGroup group = config->group("OnScreenNotification");
46     group.writeEntry(QStringLiteral("QmlPath"), QString("/does/not/exist.qml"));
47     group.sync();
48     notification.setConfig(config);
49     notification.setEngine(new QQmlEngine(&notification));
50     notification.setMessage(QStringLiteral("Some text so that we see it in the test"));
51 
52     QSignalSpy visibleChangedSpy(&notification, &OnScreenNotification::visibleChanged);
53     QCOMPARE(notification.isVisible(), false);
54     notification.setVisible(true);
55     QCOMPARE(notification.isVisible(), true);
56     QCOMPARE(visibleChangedSpy.count(), 1);
57 
58     // show again should not trigger
59     notification.setVisible(true);
60     QCOMPARE(visibleChangedSpy.count(), 1);
61 
62     // timer should not have hidden
63     QTest::qWait(500);
64     QCOMPARE(notification.isVisible(), true);
65 
66     // hide again
67     notification.setVisible(false);
68     QCOMPARE(notification.isVisible(), false);
69     QCOMPARE(visibleChangedSpy.count(), 2);
70 
71     // now show with timer
72     notification.setTimeout(250);
73     notification.setVisible(true);
74     QCOMPARE(notification.isVisible(), true);
75     QCOMPARE(visibleChangedSpy.count(), 3);
76     QVERIFY(visibleChangedSpy.wait());
77     QCOMPARE(notification.isVisible(), false);
78     QCOMPARE(visibleChangedSpy.count(), 4);
79 }
80 
timeout()81 void OnScreenNotificationTest::timeout()
82 {
83     OnScreenNotification notification;
84     QSignalSpy timeoutChangedSpy(&notification, &OnScreenNotification::timeoutChanged);
85     QCOMPARE(notification.timeout(), 0);
86     notification.setTimeout(1000);
87     QCOMPARE(notification.timeout(), 1000);
88     QCOMPARE(timeoutChangedSpy.count(), 1);
89     notification.setTimeout(1000);
90     QCOMPARE(timeoutChangedSpy.count(), 1);
91     notification.setTimeout(0);
92     QCOMPARE(notification.timeout(), 0);
93     QCOMPARE(timeoutChangedSpy.count(), 2);
94 }
95 
iconName()96 void OnScreenNotificationTest::iconName()
97 {
98     OnScreenNotification notification;
99     QSignalSpy iconNameChangedSpy(&notification, &OnScreenNotification::iconNameChanged);
100     QVERIFY(iconNameChangedSpy.isValid());
101     QCOMPARE(notification.iconName(), QString());
102     notification.setIconName(QStringLiteral("foo"));
103     QCOMPARE(notification.iconName(), QStringLiteral("foo"));
104     QCOMPARE(iconNameChangedSpy.count(), 1);
105     notification.setIconName(QStringLiteral("foo"));
106     QCOMPARE(iconNameChangedSpy.count(), 1);
107     notification.setIconName(QStringLiteral("bar"));
108     QCOMPARE(notification.iconName(), QStringLiteral("bar"));
109     QCOMPARE(iconNameChangedSpy.count(), 2);
110 }
111 
message()112 void OnScreenNotificationTest::message()
113 {
114     OnScreenNotification notification;
115     QSignalSpy messageChangedSpy(&notification, &OnScreenNotification::messageChanged);
116     QVERIFY(messageChangedSpy.isValid());
117     QCOMPARE(notification.message(), QString());
118     notification.setMessage(QStringLiteral("foo"));
119     QCOMPARE(notification.message(), QStringLiteral("foo"));
120     QCOMPARE(messageChangedSpy.count(), 1);
121     notification.setMessage(QStringLiteral("foo"));
122     QCOMPARE(messageChangedSpy.count(), 1);
123     notification.setMessage(QStringLiteral("bar"));
124     QCOMPARE(notification.message(), QStringLiteral("bar"));
125     QCOMPARE(messageChangedSpy.count(), 2);
126 }
127