on xenial help sign in
Add a test
bbdd069Josh Arenson
qml/Greeter/WideView.qml+1
@@ -145,6 +145,7 @@ FocusScope {
145 LightDM.UserRoles.SessionRole);
145 LightDM.UserRoles.SessionRole);
146 onResponded: root.responded(response)
146 onResponded: root.responded(response)
147 onSelected: {
147 onSelected: {
148+ LightDM.Users.mock.currentUsername = currentUser;
148 root.selected(index)
149 root.selected(index)
149 selectedUserIndex = index;
150 selectedUserIndex = index;
150 }
151 }
tests/mocks/liblightdm/MockController.cpp+24
@@ -98,6 +98,30 @@ void MockController::setSessionMode(const QString &sessionMode)
98 }
98 }
99}
99}
100
100
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+
101const QList<MockController::SessionItem> &MockController::fullSessionItems() const
125const QList<MockController::SessionItem> &MockController::fullSessionItems() const
102{
126{
103 return m_fullSessions;
127 return m_fullSessions;
tests/mocks/liblightdm/MockController.h+15
@@ -35,6 +35,11 @@ class Q_DECL_EXPORT MockController : public QObject
35 // single, none, full
35 // single, none, full
36 Q_PROPERTY(QString sessionMode READ sessionMode WRITE setSessionMode NOTIFY sessionModeChanged)
36 Q_PROPERTY(QString sessionMode READ sessionMode WRITE setSessionMode NOTIFY sessionModeChanged)
37
37
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+
38 Q_PROPERTY(int numAvailableSessions READ numFullSessions CONSTANT)
43 Q_PROPERTY(int numAvailableSessions READ numFullSessions CONSTANT)
39 Q_PROPERTY(int numSessions READ numSessions WRITE setNumSessions NOTIFY numSessionsChanged)
44 Q_PROPERTY(int numSessions READ numSessions WRITE setNumSessions NOTIFY numSessionsChanged)
40
45
@@ -51,6 +56,12 @@ public:
51 QString sessionMode() const;
56 QString sessionMode() const;
52 void setSessionMode(const QString &sessionMode);
57 void setSessionMode(const QString &sessionMode);
53
58
59+ QString sessionName() const;
60+ void setSessionName(const QString &sessionName);
61+
62+ QString currentUsername() const;
63+ void setCurrentUsername(const QString &userIndex);
64+
54 class SessionItem
65 class SessionItem
55 {
66 {
56 public:
67 public:
@@ -64,14 +75,18 @@ public:
64 void setNumSessions(int numSessions);
75 void setNumSessions(int numSessions);
65
76
66Q_SIGNALS:
77Q_SIGNALS:
78+ void currentUsernameChanged();
67 void selectUserHintChanged();
79 void selectUserHintChanged();
68 void userModeChanged();
80 void userModeChanged();
69 void sessionModeChanged();
81 void sessionModeChanged();
82+ void sessionNameChanged(const QString &sessionName, const QString &username);
70 void numSessionsChanged();
83 void numSessionsChanged();
71
84
72private:
85private:
73 explicit MockController(QObject* parent=0);
86 explicit MockController(QObject* parent=0);
74
87
88+ QString m_currentUsername;
89+ QString m_sessionName;
75 QString m_selectUserHint;
90 QString m_selectUserHint;
76 QString m_userMode;
91 QString m_userMode;
77 QString m_sessionMode;
92 QString m_sessionMode;
tests/mocks/liblightdm/MockUsersModel.cpp+17
@@ -67,6 +67,8 @@ UsersModel::UsersModel(QObject *parent)
67
67
68 connect(MockController::instance(), &MockController::userModeChanged,
68 connect(MockController::instance(), &MockController::userModeChanged,
69 this, &UsersModel::resetEntries);
69 this, &UsersModel::resetEntries);
70+ connect(MockController::instance(), &MockController::sessionNameChanged,
71+ this, &UsersModel::setCurrentSessionName);
70 resetEntries();
72 resetEntries();
71}
73}
72
74
@@ -75,6 +77,21 @@ UsersModel::~UsersModel()
75 delete d_ptr;
77 delete d_ptr;
76}
78}
77
79
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+
78int UsersModel::rowCount(const QModelIndex &parent) const
95int UsersModel::rowCount(const QModelIndex &parent) const
79{
96{
80 Q_D(const UsersModel);
97 Q_D(const UsersModel);
tests/mocks/liblightdm/MockUsersModel.h+2
@@ -52,6 +52,8 @@ public:
52 int rowCount(const QModelIndex &parent) const override;
52 int rowCount(const QModelIndex &parent) const override;
53 QVariant data(const QModelIndex &index, int role) const override;
53 QVariant data(const QModelIndex &index, int role) const override;
54
54
55+ void setCurrentSessionName(const QString &sessionName, const QString &username);
56+
55 QObject *mock();
57 QObject *mock();
56
58
57private Q_SLOTS:
59private Q_SLOTS:
tests/qmltests/Greeter/tst_WideView.qml+14
@@ -409,6 +409,20 @@ StyledItem {
409 waitForRendering(view);
409 waitForRendering(view);
410 }
410 }
411
411
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+
412 function test_tease_data() {
426 function test_tease_data() {
413 return [
427 return [
414 {tag: "locked", x: 0, offset: 0, count: 0, locked: true},
428 {tag: "locked", x: 0, offset: 0, count: 0, locked: true},