on xenial help sign in
Add a test
commitbbdd069b0b8d73fa42d80ba54ae89b5ea905cdf5 authorJosh Arenson <joshua.arenson@canonical.com> dateTue 8 Nov 2016, 15:01 (10 years ago) parent10f5f17
6 files changed+73
qml/Greeter/WideView.qml+1 tests/mocks/liblightdm/MockController.cpp+24 tests/mocks/liblightdm/MockController.h+15 tests/mocks/liblightdm/MockUsersModel.cpp+17 tests/mocks/liblightdm/MockUsersModel.h+2 tests/qmltests/Greeter/tst_WideView.qml+14
qml/Greeter/WideView.qml+1
@@ -145,6 +145,7 @@ FocusScope {
145145 LightDM.UserRoles.SessionRole);
146146 onResponded: root.responded(response)
147147 onSelected: {
148+ LightDM.Users.mock.currentUsername = currentUser;
148149 root.selected(index)
149150 selectedUserIndex = index;
150151 }
tests/mocks/liblightdm/MockController.cpp+24
@@ -98,6 +98,30 @@ void MockController::setSessionMode(const QString &sessionMode)
9898 }
9999}
100100
101+QString MockController::sessionName() const
102+{
103+ return QString("INVALID - Please read directly from the UserModel");
104+}
105+
106+void MockController::setSessionName(const QString &sessionName)
107+{
108+ // Let the user model deal with this
109+ Q_EMIT sessionNameChanged(sessionName, m_currentUsername);
110+}
111+
112+QString MockController::currentUsername() const
113+{
114+ return m_currentUsername;
115+}
116+
117+void MockController::setCurrentUsername(const QString &username)
118+{
119+ if (m_currentUsername != username) {
120+ m_currentUsername = username;
121+ Q_EMIT currentUsernameChanged();
122+ }
123+}
124+
101125const QList<MockController::SessionItem> &MockController::fullSessionItems() const
102126{
103127 return m_fullSessions;
tests/mocks/liblightdm/MockController.h+15
@@ -35,6 +35,11 @@ class Q_DECL_EXPORT MockController : public QObject
3535 // single, none, full
3636 Q_PROPERTY(QString sessionMode READ sessionMode WRITE setSessionMode NOTIFY sessionModeChanged)
3737
38+ // This would be best as a Q_INVOKABLE, but using a property allows for
39+ // keeping the mock cleaner
40+ Q_PROPERTY(QString sessionName READ sessionName WRITE setSessionName NOTIFY sessionNameChanged)
41+ Q_PROPERTY(QString currentUsername READ currentUsername WRITE setCurrentUsername NOTIFY currentUsernameChanged)
42+
3843 Q_PROPERTY(int numAvailableSessions READ numFullSessions CONSTANT)
3944 Q_PROPERTY(int numSessions READ numSessions WRITE setNumSessions NOTIFY numSessionsChanged)
4045
@@ -51,6 +56,12 @@ public:
5156 QString sessionMode() const;
5257 void setSessionMode(const QString &sessionMode);
5358
59+ QString sessionName() const;
60+ void setSessionName(const QString &sessionName);
61+
62+ QString currentUsername() const;
63+ void setCurrentUsername(const QString &userIndex);
64+
5465 class SessionItem
5566 {
5667 public:
@@ -64,14 +75,18 @@ public:
6475 void setNumSessions(int numSessions);
6576
6677Q_SIGNALS:
78+ void currentUsernameChanged();
6779 void selectUserHintChanged();
6880 void userModeChanged();
6981 void sessionModeChanged();
82+ void sessionNameChanged(const QString &sessionName, const QString &username);
7083 void numSessionsChanged();
7184
7285private:
7386 explicit MockController(QObject* parent=0);
7487
88+ QString m_currentUsername;
89+ QString m_sessionName;
7590 QString m_selectUserHint;
7691 QString m_userMode;
7792 QString m_sessionMode;
tests/mocks/liblightdm/MockUsersModel.cpp+17
@@ -67,6 +67,8 @@ UsersModel::UsersModel(QObject *parent)
6767
6868 connect(MockController::instance(), &MockController::userModeChanged,
6969 this, &UsersModel::resetEntries);
70+ connect(MockController::instance(), &MockController::sessionNameChanged,
71+ this, &UsersModel::setCurrentSessionName);
7072 resetEntries();
7173}
7274
@@ -75,6 +77,21 @@ UsersModel::~UsersModel()
7577 delete d_ptr;
7678}
7779
80+void UsersModel::setCurrentSessionName(const QString &sessionName, const QString &username)
81+{
82+ Q_D(UsersModel);
83+
84+ for (auto &entry : d->entries) {
85+ if (username == entry.username) {
86+ entry.session = sessionName;
87+
88+ // Since the incides are mangled, there is no easy way to emit dataChanged
89+ // and that doesn't matter for the limited use of this function
90+ return;
91+ }
92+ }
93+}
94+
7895int UsersModel::rowCount(const QModelIndex &parent) const
7996{
8097 Q_D(const UsersModel);
tests/mocks/liblightdm/MockUsersModel.h+2
@@ -52,6 +52,8 @@ public:
5252 int rowCount(const QModelIndex &parent) const override;
5353 QVariant data(const QModelIndex &index, int role) const override;
5454
55+ void setCurrentSessionName(const QString &sessionName, const QString &username);
56+
5557 QObject *mock();
5658
5759private Q_SLOTS:
tests/qmltests/Greeter/tst_WideView.qml+14
@@ -409,6 +409,20 @@ StyledItem {
409409 waitForRendering(view);
410410 }
411411
412+ function test_stuff() {
413+ LightDM.Sessions.mock.sessionMode = "full";
414+ var loginList = findChild(view, "loginList");
415+
416+ var currentUser = loginList.currentUser
417+ var fakeSessionName = "ASessionWillNeverBeCalledThis"
418+
419+ compare(LightDM.Users.data(getIndexOf(currentUser), LightDM.UserRoles.SessionRole) != fakeSessionName, true);
420+
421+ LightDM.Users.mock.sessionName = fakeSessionName;
422+
423+ compare(LightDM.Users.data(getIndexOf(currentUser), LightDM.UserRoles.SessionRole) == fakeSessionName, true);
424+ }
425+
412426 function test_tease_data() {
413427 return [
414428 {tag: "locked", x: 0, offset: 0, count: 0, locked: true},