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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#include "completion/Adapter.hpp"
#include "completion/Completer.hpp"
#include "testUtils.h"
#include "widgets/InputLine.hpp"
#include <QAbstractItemView>
#include <QtCore/qsharedpointer.h>
#include <QtCore/qstringlistmodel.h>
#include <QtCore>
#include <QtTest/qtestkeyboard.h>
class InputLineSpec : public QObject {
Q_OBJECT
class FakeInputAdapter : public Adapter {
public:
FakeInputAdapter() : Adapter() {
completerInstance = new Completer;
QStringList list = {"one", "two", "three"};
QStringListModel model(list);
completerInstance->setSourceModel(&model);
}
Completer *completer() { return completerInstance; }
QString prompt() { return "fake prompt"; }
private:
Completer *completerInstance;
};
private slots:
void testWithInitialInput() {
context("when initialized with some text");
it("sets the initial input text") {
InputLine inputWidget("Initial content", new QWidget());
QCOMPARE(inputWidget.getInputText(), "Initial content");
}
}
void testInputUpdate() {
context("when user types in input");
it("updates input text") {
InputLine inputWidget("Initial content", new QWidget());
auto input = inputWidget.findChild<QLineEdit *>();
QTest::keyClicks(input, " updated");
QCOMPARE(inputWidget.getInputText(), "Initial content updated");
}
context("when setInputText is called");
it("sets input text") {
InputLine inputWidget("Initial content", new QWidget());
inputWidget.setInputText("New content");
QCOMPARE(inputWidget.getInputText(), "New content");
}
}
void testSubmitSignalOnReturnKey() {
context("when user hits return key");
it("emits the submitted signal with the input text") {
InputLine inputWidget("Initial content", new QWidget());
QSignalSpy submitSignal(&inputWidget, &InputLine::submitted);
auto input = inputWidget.findChild<QLineEdit *>();
QTest::keyClicks(input, " updated");
QTest::keyClick(&inputWidget, Qt::Key_Return);
QCOMPARE(submitSignal.count(), 1);
QCOMPARE(submitSignal.takeFirst().at(0).toString(),
QString("Initial content updated"));
}
}
void testCancelSignalOnEscapeKey() {
context("when user hits escape key");
it("emits 'cancelled' signal") {
InputLine inputWidget("Initial content", new QWidget());
QSignalSpy cancelSignal(&inputWidget, &InputLine::cancelled);
auto input = inputWidget.findChild<QLineEdit *>();
QTest::keyClick(&inputWidget, Qt::Key_Escape);
QCOMPARE(cancelSignal.count(), 1);
}
context("when user hits ctrl+l key");
it("emits 'cancelled' signal") {
InputLine inputWidget("Initial content", new QWidget());
QSignalSpy cancelSignal(&inputWidget, &InputLine::cancelled);
auto input = inputWidget.findChild<QLineEdit *>();
QTest::keyClick(&inputWidget, Qt::Key_L, Qt::ControlModifier);
QCOMPARE(cancelSignal.count(), 1);
}
}
void testSetFocus() {
context("when setInputFocus is called with true");
xit("focusses input field") {
InputLine inputWidget("Initial content", new QWidget());
inputWidget.setInputFocus(true);
QApplication::processEvents();
QVERIFY(inputWidget.isInputFocussed());
}
context("when setInputFocus is called with false");
xit("unfocusses input field") {
InputLine inputWidget("Initial content", new QWidget());
inputWidget.setInputFocus(false);
QApplication::processEvents();
QVERIFY(!inputWidget.isInputFocussed());
}
}
void testInputPrompt() {
it("sets the prompt text using the adapter") {
InputLine inputWidget("Initial content", new QWidget());
FakeInputAdapter inputAdapter;
inputWidget.setAdapter(&inputAdapter);
QCOMPARE(inputWidget.prompt(), "fake prompt");
}
}
// TODO: completions test
};
QTEST_REGISTER(InputLineSpec)
#include "InputLineSpec.moc"
|