on xenial help sign in
Unify all liblightdm mocks

Benefits: - Cleaner tests/qmltests/CMakeLists.txt - Ability change LightDM fake behavior at runtime, which makes it possible to merge several tests, reducing code duplication, such as tst_Shell, tst_TabletShell and tst_ShellWithPin. - Ability to make building of tests optional, as the demo version of lightdm mock has been moved into plugins/LightDM, removing the dependency between producition code and test code Approved by: Michael Terry

commit27613f3dd0b5f8fda27fde04591ffdc7e7364674 authorDaniel d'Andrada <daniel.dandrada@canonical.com> dateThu 5 Feb 2015, 10:28 (12 years ago) parent54b7fd40bfe3cb
56 files changed+1123−384
plugins/LightDM/CMakeLists.txt+3−3 plugins/LightDM/Greeter.cpp+1−19 plugins/LightDM/Greeter.h+1−1 tests/mocks/LightDM/single-pin/UsersModelPrivate.cpp → plugins/LightDM/GreeterPrivate.h+20−14 tests/mocks/LightDM/demo/CMakeLists.txt → plugins/LightDM/liblightdm/CMakeLists.txt+6−6 tests/mocks/LightDM/Greeter.cpp → plugins/LightDM/liblightdm/Greeter.cpp+7−7 tests/mocks/LightDM/Greeter.h → plugins/LightDM/liblightdm/Greeter.h+4−3 tests/mocks/LightDM/demo/GreeterPrivate.cpp → plugins/LightDM/liblightdm/GreeterPrivate.cpp+2−2 tests/mocks/LightDM/GreeterPrivate.h → plugins/LightDM/liblightdm/GreeterPrivate.h−1 tests/mocks/LightDM/UsersModel.cpp → plugins/LightDM/liblightdm/UsersModel.cpp+6 tests/mocks/LightDM/UsersModel.h → plugins/LightDM/liblightdm/UsersModel.h+4 tests/mocks/LightDM/demo/UsersModelPrivate.cpp → plugins/LightDM/liblightdm/UsersModelPrivate.cpp+1−1 tests/mocks/LightDM/UsersModelPrivate.h → plugins/LightDM/liblightdm/UsersModelPrivate.h plugins/Lights/CMakeLists.txt−2 plugins/Powerd/CMakeLists.txt−2 plugins/Unity/Launcher/CMakeLists.txt−1 plugins/Unity/Session/CMakeLists.txt−2 plugins/Utils/CMakeLists.txt−3 run.sh+3−26 tests/autopilot/unity8/shell/__init__.py−13 tests/autopilot/unity8/shell/tests/__init__.py+8−11 tests/autopilot/unity8/shell/tests/test_edges_demo.py−1 tests/autopilot/unity8/shell/tests/test_lock_screen.py+6−5 tests/mocks/LightDM/CMakeLists.txt+8−9 tests/mocks/LightDM/single/UsersModelPrivate.cpp → tests/mocks/LightDM/MockGreeter.cpp+13−11 tests/mocks/LightDM/MockGreeter.h+37 tests/mocks/LightDM/MockUsersModel.cpp+39 tests/mocks/LightDM/single/GreeterPrivate.cpp → tests/mocks/LightDM/MockUsersModel.h+14−23 tests/mocks/LightDM/QLightDM/Greeter+17−1 tests/mocks/LightDM/QLightDM/InfographicModel−1 tests/mocks/LightDM/QLightDM/UsersModel+17−1 tests/mocks/LightDM/full/CMakeLists.txt−18 tests/mocks/LightDM/liblightdm/CMakeLists.txt+18 tests/mocks/LightDM/liblightdm/Greeter.cpp+199 tests/mocks/LightDM/liblightdm/Greeter.h+118 tests/mocks/LightDM/full/GreeterPrivate.cpp → tests/mocks/LightDM/liblightdm/GreeterPrivate.cpp+40−6 tests/mocks/LightDM/liblightdm/GreeterPrivate.h+54 tests/mocks/LightDM/liblightdm/UsersModel.cpp+134 tests/mocks/LightDM/liblightdm/UsersModel.h+69 tests/mocks/LightDM/full/UsersModelPrivate.cpp → tests/mocks/LightDM/liblightdm/UsersModelPrivate.cpp+58−6 tests/mocks/LightDM/liblightdm/UsersModelPrivate.h+63 tests/mocks/LightDM/plugin.cpp+68 tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/LightDM/plugin.h+13−14 tests/mocks/LightDM/single-passphrase/CMakeLists.txt−19 tests/mocks/LightDM/single-passphrase/GreeterPrivate.cpp−46 tests/mocks/LightDM/single-pin/CMakeLists.txt−19 tests/mocks/LightDM/single-pin/GreeterPrivate.cpp−46 tests/mocks/LightDM/single/CMakeLists.txt−18 tests/plugins/LightDM/CMakeLists.txt+3−3 tests/plugins/LightDM/greeter.qml+5 tests/qmltests/CMakeLists.txt+19−19 tests/qmltests/Greeter/tst_Infographics.qml+10 tests/qmltests/Greeter/tst_MultiGreeter.qml+11 tests/qmltests/tst_Shell.qml+8−1 tests/qmltests/tst_ShellWithPin.qml+8 tests/qmltests/tst_TabletShell.qml+8
plugins/LightDM/CMakeLists.txt+3−3
@@ -1,9 +1,9 @@
1−# Dependencies
2−include(FindPkgConfig)
31pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
42# TODO: Once we split out a separate greeter process, uncomment these lines
53#pkg_check_modules(LIBLIGHTDM REQUIRED liblightdm-qt5-2)
64
5+add_subdirectory(liblightdm)
6+
77include_directories(
88 ${CMAKE_CURRENT_SOURCE_DIR}
99 ${CMAKE_CURRENT_BINARY_DIR}
@@ -28,7 +28,7 @@ add_library(LightDM-qml MODULE
2828 )
2929
3030target_link_libraries(LightDM-qml
31− MockLightDM-demo
31+ integratedLightDM
3232 unity8-private
3333# TODO: Once we split out a separate greeter process, uncomment these lines
3434# ${LIBLIGHTDM_LDFLAGS}
plugins/LightDM/Greeter.cpp+1−19
@@ -17,26 +17,8 @@
1717 */
1818
1919#include "Greeter.h"
20+#include "GreeterPrivate.h"
2021#include <libintl.h>
21−#include <QLightDM/Greeter>
22−
23−class GreeterPrivate
24−{
25−public:
26− explicit GreeterPrivate(Greeter *parent);
27−
28− QLightDM::Greeter *m_greeter;
29− bool m_active;
30− bool wasPrompted;
31− bool promptless;
32−
33−protected:
34− Greeter * const q_ptr;
35−
36−private:
37− Q_DECLARE_PUBLIC(Greeter)
38−};
39−
4022
4123GreeterPrivate::GreeterPrivate(Greeter* parent)
4224 : m_greeter(new QLightDM::Greeter(parent)),
plugins/LightDM/Greeter.h+1−1
@@ -68,7 +68,7 @@ Q_SIGNALS:
6868 // should switch to this user if possible.
6969 void requestAuthenticationUser(const QString &user);
7070
71−private:
71+protected:
7272 GreeterPrivate * const d_ptr;
7373
7474 Q_DECLARE_PRIVATE(Greeter)
tests/mocks/LightDM/single-pin/UsersModelPrivate.cpp → plugins/LightDM/GreeterPrivate.hrenamed+20−14
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,22 +12,28 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
19−#include "../UsersModelPrivate.h"
17+#ifndef UNITY_GREETER_PRIVATE_H
18+#define UNITY_GREETER_PRIVATE_H
2019
21−namespace QLightDM
22−{
20+#include <QLightDM/Greeter>
2321
24−UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
25− : q_ptr(parent)
22+class GreeterPrivate
2623{
27− entries =
28− {
29− { "has-pin", "Has PIN", 0, 0, false, false, 0, 0 },
30− };
31−}
24+public:
25+ explicit GreeterPrivate(Greeter *parent);
26+
27+ QLightDM::Greeter *m_greeter;
28+ bool m_active;
29+ bool wasPrompted;
30+ bool promptless;
31+
32+protected:
33+ Greeter * const q_ptr;
34+
35+private:
36+ Q_DECLARE_PUBLIC(Greeter)
37+};
3238
33−}
39+#endif // UNITY_GREETER_PRIVATE_H
tests/mocks/LightDM/demo/CMakeLists.txt → plugins/LightDM/liblightdm/CMakeLists.txtrenamed+6−6
@@ -1,14 +1,14 @@
11pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
22
33set(LibLightDM_SOURCES
4− ../Greeter.cpp
5− ../UsersModel.cpp
4+ Greeter.cpp
5+ UsersModel.cpp
66 GreeterPrivate.cpp
77 UsersModelPrivate.cpp
88 ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
99 )
1010
11−add_library(MockLightDM-demo STATIC ${LibLightDM_SOURCES})
11+add_library(integratedLightDM STATIC ${LibLightDM_SOURCES})
1212add_library(MockLightDM-demo-shared SHARED ${LibLightDM_SOURCES})
1313
1414include_directories(
@@ -16,7 +16,7 @@ include_directories(
1616 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
1717)
1818
19−target_link_libraries(MockLightDM-demo
19+target_link_libraries(integratedLightDM
2020 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
2121 -lpam
2222)
@@ -25,10 +25,10 @@ target_link_libraries(MockLightDM-demo-shared
2525 -lpam
2626)
2727
28−qt5_use_modules(MockLightDM-demo Concurrent Gui)
28+qt5_use_modules(integratedLightDM Concurrent Gui)
2929qt5_use_modules(MockLightDM-demo-shared Concurrent Gui)
3030
31−set_target_properties(MockLightDM-demo PROPERTIES COMPILE_FLAGS -fPIC)
31+set_target_properties(integratedLightDM PROPERTIES COMPILE_FLAGS -fPIC)
3232set_target_properties(MockLightDM-demo-shared PROPERTIES
3333 OUTPUT_NAME lightdm-qt5-2)
3434
tests/mocks/LightDM/Greeter.cpp → plugins/LightDM/liblightdm/Greeter.cpprenamed+7−7
@@ -16,6 +16,13 @@
1616 * Author: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19+
20+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
22+ * COUNTERPART IN tests/mocks/Lightdm/liblightdm
23+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
24+
25+
1926#include "Greeter.h"
2027#include "GreeterPrivate.h"
2128#include <QtCore/QCoreApplication>
@@ -128,13 +135,6 @@ void Greeter::authenticate(const QString &username)
128135
129136 d->authenticated = false;
130137 d->authenticationUser = username;
131− d->twoFactorDone = false;
132− QTimer::singleShot(0, this, SLOT(delayedAuthentication()));
133−}
134−
135−void Greeter::delayedAuthentication()
136−{
137− Q_D(Greeter);
138138 d->handleAuthenticate();
139139}
140140
tests/mocks/LightDM/Greeter.h → plugins/LightDM/liblightdm/Greeter.hrenamed+4−3
@@ -24,6 +24,10 @@
2424#include <QtCore/QObject>
2525#include <QtCore/QVariant>
2626
27+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
29+ * COUNTERPART IN tests/mocks/Lightdm/liblightdm
30+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
2731
2832namespace QLightDM
2933{
@@ -99,9 +103,6 @@ Q_SIGNALS:
99103protected:
100104 void sendAuthenticationComplete();
101105
102−private Q_SLOTS:
103− void delayedAuthentication();
104−
105106private:
106107 GreeterPrivate *d_ptr;
107108 Q_DECLARE_PRIVATE(Greeter)
tests/mocks/LightDM/demo/GreeterPrivate.cpp → plugins/LightDM/liblightdm/GreeterPrivate.cpprenamed+2−2
@@ -16,8 +16,8 @@
1616 * Author: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19−#include "../Greeter.h"
20−#include "../GreeterPrivate.h"
19+#include "Greeter.h"
20+#include "GreeterPrivate.h"
2121#include <QFuture>
2222#include <QFutureInterface>
2323#include <QFutureWatcher>
tests/mocks/LightDM/GreeterPrivate.h → plugins/LightDM/liblightdm/GreeterPrivate.hrenamed−1
@@ -35,7 +35,6 @@ public:
3535 // These variables may not be used by all subclasses, that's no problem
3636 bool authenticated;
3737 QString authenticationUser;
38− bool twoFactorDone;
3938
4039 void handleAuthenticate();
4140 void handleRespond(const QString &response);
tests/mocks/LightDM/UsersModel.cpp → plugins/LightDM/liblightdm/UsersModel.cpprenamed+6
@@ -16,6 +16,12 @@
1616 * Author: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19+
20+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
22+ * COUNTERPART IN tests/mocks/Lightdm/liblightdm
23+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
24+
1925// LightDM currently is Qt4 compatible, and so doesn't define setRoleNames.
2026// To use the same method of setting role name that it does, we
2127// set our compatibility to Qt4 here too.
tests/mocks/LightDM/UsersModel.h → plugins/LightDM/liblightdm/UsersModel.hrenamed+4
@@ -24,6 +24,10 @@
2424#include <QtCore/QSharedDataPointer>
2525#include <QAbstractListModel>
2626
27+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
29+ * COUNTERPART IN tests/mocks/Lightdm/liblightdm
30+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
2731
2832namespace QLightDM
2933{
tests/mocks/LightDM/demo/UsersModelPrivate.cpp → plugins/LightDM/liblightdm/UsersModelPrivate.cpprenamed+1−1
@@ -16,7 +16,7 @@
1616 * Author: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19−#include "../UsersModelPrivate.h"
19+#include "UsersModelPrivate.h"
2020
2121#include <QDir>
2222#include <QSettings>
tests/mocks/LightDM/UsersModelPrivate.h → plugins/LightDM/liblightdm/UsersModelPrivate.hrenamed

The content is the same.

plugins/Lights/CMakeLists.txt−2
@@ -1,5 +1,3 @@
1−include(FindPkgConfig)
2−
31pkg_check_modules(ANDROID_HEADERS REQUIRED android-headers)
42pkg_check_modules(ANDROID_HARDWARE REQUIRED libhardware)
53
plugins/Powerd/CMakeLists.txt−2
@@ -1,5 +1,3 @@
1−include(FindPkgConfig)
2−
31pkg_search_module(GIO REQUIRED gio-2.0)
42
53include_directories(
plugins/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
21pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=5)
32pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=5)
43pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
plugins/Unity/Session/CMakeLists.txt−2
@@ -1,5 +1,3 @@
1−include(FindPkgConfig)
2−
31pkg_search_module(GIO REQUIRED gio-2.0)
42
53include_directories(
plugins/Utils/CMakeLists.txt−3
@@ -1,6 +1,3 @@
1−# Dependencies
2−include(FindPkgConfig)
3−
41pkg_search_module(GIO REQUIRED gio-2.0)
52
63include_directories(
run.sh+3−26
@@ -6,8 +6,6 @@ export QML2_IMPORT_PATH
66QML_PHONE_SHELL_PATH=./builddir/src/unity8
77GDB=false
88FAKE=false
9−PINLOCK=false
10−KEYLOCK=false
119USE_MOCKS=false
1210MOUSE_TOUCH=true
1311
@@ -16,9 +14,6 @@ usage() {
1614 echo "Script to run the shell.\n" >&2
1715 echo "OPTIONS:" >&2
1816 echo " -f, --fake Force use of fake Qml modules." >&2
19− echo " -p, --pinlock Use a pin protected user." >&2
20− echo " -k, --keylock Use a passphrase protected user." >&2
21− echo " -l, --lightdm Use the specified lightdm mock." >&2
2217 echo " -g, --gdb Run through gdb." >&2
2318 echo " -h, --help Show this help." >&2
2419 echo " -m, --nomousetouch Run without -mousetouch argument." >&2
@@ -26,7 +21,7 @@ usage() {
2621 exit 1
2722}
2823
29−ARGS=`getopt -n$0 -u -a --longoptions="fake,pinlock,keylock,gdb,help,lightdm:,nomousetouch" -o "fpkl:ghm" -- "$@"`
24+ARGS=`getopt -n$0 -u -a --longoptions="fake,gdb,help:,nomousetouch" -o "fghm" -- "$@"`
3025[ $? -ne 0 ] && usage
3126eval set -- "$ARGS"
3227
@@ -34,12 +29,6 @@ while [ $# -gt 0 ]
3429do
3530 case "$1" in
3631 -f|--fake) USE_MOCKS=true;;
37− -p|--pinlock) USE_MOCKS=true; LIGHTDM_MOCK=single-pin;;
38− -k|--keylock) USE_MOCKS=true; LIGHTDM_MOCK=single-passphrase;;
39− -l|--lightdm) LIGHTDM_MOCK=$2; shift;
40− if [ -z "$LIGHTDM_MOCK" ]; then
41− echo "Please specify an argument to --lightdm"
42− fi;;
4332 -g|--gdb) GDB=true;;
4433 -h|--help) usage;;
4534 -m|--nomousetouch) MOUSE_TOUCH=false;;
@@ -48,23 +37,11 @@ do
4837 shift
4938done
5039
51−if [ -z "$LIGHTDM_MOCK" ]; then
52− LIGHTDM_MOCK=single
53−fi
54−
55−# Even without USE_MOCKS set, we want to fake our lightdm backend, because it's
56−# annoying to be prompted for your password when testing. To get the same
57−# backend used in production, pass '--lightdm=demo'.
58−export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/LightDM/$LIGHTDM_MOCK
59−
6040if $USE_MOCKS; then
61− rm -f $PWD/builddir/nonmirplugins/LightDM # undo symlink (from below) for cleanliness
6241 export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
63− export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/QMenuModel
42+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/LightDM/liblightdm:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/QMenuModel
6443else
65− # Just link our LightDM mock into the nonmirplugins folder. We don't want
66− # the rest of our plugins to be used.
67− ln -sf $PWD/builddir/tests/mocks/LightDM $PWD/builddir/nonmirplugins/
44+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/plugins/LightDM/liblightdm
6845fi
6946
7047QML_PHONE_SHELL_ARGS=""
tests/autopilot/unity8/shell/__init__.py−13
@@ -27,19 +27,6 @@ import logging
2727
2828logger = logging.getLogger(__name__)
2929
30−
31−def with_lightdm_mock(mock_type):
32− """A simple decorator that sets up the LightDM mock for a single test."""
33− def with_lightdm_mock_internal(fn):
34− @wraps(fn)
35− def wrapper(*args, **kwargs):
36− tests_self = args[0]
37− tests_self.patch_lightdm_mock(mock_type)
38− return fn(*args, **kwargs)
39− return wrapper
40− return with_lightdm_mock_internal
41−
42−
4330def disable_qml_mocking(fn):
4431 """Simple decorator that disables the QML mocks from being loaded."""
4532 @wraps(fn)
tests/autopilot/unity8/shell/tests/__init__.py+8−11
@@ -153,7 +153,6 @@ class UnityTestCase(AutopilotTestCase):
153153 self.useFixture(toolkit_fixtures.HideUnity7Launcher())
154154
155155 self._proxy = None
156− self._lightdm_mock_type = None
157156 self._qml_mock_enabled = True
158157 self._data_dirs_mock_enabled = True
159158 self._environment = {}
@@ -265,8 +264,7 @@ class UnityTestCase(AutopilotTestCase):
265264 binary_path
266265 )
267266
268− if self._lightdm_mock_type is None:
269− self.patch_lightdm_mock()
267+ self.patch_lightdm_mock()
270268
271269 if self._qml_mock_enabled:
272270 self._environment['QML2_IMPORT_PATH'] = (
@@ -338,12 +336,11 @@ class UnityTestCase(AutopilotTestCase):
338336 if data_dirs is not None:
339337 self._environment['XDG_DATA_DIRS'] = data_dirs
340338
341− def patch_lightdm_mock(self, mock_type='single'):
342− self._lightdm_mock_type = mock_type
343− logger.info("Setting up LightDM mock type '%s'", mock_type)
339+ def patch_lightdm_mock(self):
340+ logger.info("Setting up LightDM mock lib")
344341 new_ld_library_path = [
345342 get_default_extra_mock_libraries(),
346− self._get_lightdm_mock_path(mock_type)
343+ self._get_lightdm_mock_path()
347344 ]
348345 if os.getenv('LD_LIBRARY_PATH') is not None:
349346 new_ld_library_path.append(os.getenv('LD_LIBRARY_PATH'))
@@ -353,16 +350,16 @@ class UnityTestCase(AutopilotTestCase):
353350
354351 self._environment['LD_LIBRARY_PATH'] = new_ld_library_path
355352
356− def _get_lightdm_mock_path(self, mock_type):
353+ def _get_lightdm_mock_path(self):
357354 lib_path = get_mocks_library_path()
358355 lightdm_mock_path = os.path.abspath(
359− os.path.join(lib_path, "LightDM", mock_type)
356+ os.path.join(lib_path, "LightDM", "liblightdm")
360357 )
361358
362359 if not os.path.exists(lightdm_mock_path):
363360 raise RuntimeError(
364− "LightDM mock '%s' does not exist at path '%s'."
365− % (mock_type, lightdm_mock_path)
361+ "LightDM mock does not exist at path '%s'."
362+ % (lightdm_mock_path)
366363 )
367364 return lightdm_mock_path
368365
tests/autopilot/unity8/shell/tests/test_edges_demo.py−1
@@ -34,7 +34,6 @@ class EdgesDemoTestCase(tests.UnityTestCase):
3434 super(EdgesDemoTestCase, self).setUp()
3535 self._qml_mock_enabled = False
3636 self._data_dirs_mock_enabled = False
37− self._lightdm_mock_type = False
3837
3938 self.useFixture(fixture_setup.EdgesDemo(True))
4039 self.unity = self.launch_unity()
tests/autopilot/unity8/shell/tests/test_lock_screen.py+6−5
@@ -20,7 +20,6 @@
2020
2121from __future__ import absolute_import
2222
23−from unity8.shell import with_lightdm_mock
2423from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
2524
2625from autopilot.matchers import Eventually
@@ -41,9 +40,10 @@ class TestLockscreen(UnityTestCase):
4140
4241 scenarios = _get_device_emulation_scenarios()
4342
44− @with_lightdm_mock("single-pin")
4543 def test_can_unlock_pin_screen(self):
4644 """Must be able to unlock the PIN entry lock screen."""
45+
46+ self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-pin"
4747 self.launch_unity()
4848 greeter = self.main_window.get_greeter()
4949
@@ -56,9 +56,10 @@ class TestLockscreen(UnityTestCase):
5656 self._enter_prompt_passphrase("1234\n")
5757 self.assertThat(greeter.shown, Eventually(Equals(False)))
5858
59− @with_lightdm_mock("single-passphrase")
6059 def test_can_unlock_passphrase_screen(self):
6160 """Must be able to unlock the passphrase entry screen."""
61+
62+ self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-passphrase"
6263 self.launch_unity()
6364 greeter = self.main_window.get_greeter()
6465
@@ -71,9 +72,9 @@ class TestLockscreen(UnityTestCase):
7172 self._enter_prompt_passphrase("password")
7273 self.assertThat(greeter.shown, Eventually(Equals(False)))
7374
74− @with_lightdm_mock("single-pin")
7575 def test_pin_screen_wrong_code(self):
7676 """Entering the wrong pin code must not dismiss the lock screen."""
77+ self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-pin"
7778 self.launch_unity()
7879 greeter = self.main_window.get_greeter()
7980
@@ -90,9 +91,9 @@ class TestLockscreen(UnityTestCase):
9091 self.assertThat(prompt.text, Eventually(Equals("")))
9192 self.assertThat(greeter.shown, Eventually(Equals(True)))
9293
93− @with_lightdm_mock("single-passphrase")
9494 def test_passphrase_screen_wrong_password(self):
9595 """Entering the wrong password must not dismiss the lock screen."""
96+ self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-passphrase"
9697 self.launch_unity()
9798 greeter = self.main_window.get_greeter()
9899
tests/mocks/LightDM/CMakeLists.txt+8−9
@@ -4,16 +4,13 @@
44# actually using the system liblightdm in the normal plugin, this version can
55# be deleted.
66
7−add_subdirectory(demo)
8−add_subdirectory(full)
9−add_subdirectory(single)
10−add_subdirectory(single-pin)
11−add_subdirectory(single-passphrase)
7+add_subdirectory(liblightdm)
128
139include_directories(
1410 ${CMAKE_CURRENT_SOURCE_DIR}
1511 ${CMAKE_CURRENT_BINARY_DIR}
1612 ${CMAKE_SOURCE_DIR}/plugins/Utils
13+ ${CMAKE_SOURCE_DIR}/plugins/LightDM
1714 ${CMAKE_SOURCE_DIR}/tests/mocks/libusermetrics
1815 ${libunity8-private_SOURCE_DIR}
1916)
@@ -22,9 +19,11 @@ set(QMLPLUGIN_SRC
2219 ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeter.cpp
2320 ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeterList.cpp
2421 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
25− ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
2622 ${CMAKE_SOURCE_DIR}/plugins/LightDM/UsersModel.cpp
2723 ${CMAKE_SOURCE_DIR}/plugins/Utils/unitysortfilterproxymodelqml.cpp
24+ MockGreeter.cpp
25+ MockUsersModel.cpp
26+ plugin.cpp
2827 )
2928
3029add_library(MockLightDM-qml MODULE
@@ -35,9 +34,9 @@ add_library(MockLightDM-qml MODULE
3534# installed on the system. So we make sure we link to our full fake version
3635# At run time, we can point to whichever version we happen to be using via
3736# LD_LIBRARY_PATH.
38−add_dependencies(MockLightDM-qml MockLightDM-full MockUserMetrics)
37+add_dependencies(MockLightDM-qml MockLightDM MockUserMetrics)
3938target_link_libraries(MockLightDM-qml
40− -L${CMAKE_CURRENT_BINARY_DIR}/full
39+ -L${CMAKE_CURRENT_BINARY_DIR}/liblightdm
4140 -llightdm-qt5-2
4241 -L${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics
4342 -lusermetricsoutput
@@ -49,5 +48,5 @@ qt5_use_modules(MockLightDM-qml DBus Gui Qml)
4948add_unity8_mock(LightDM 0.1 LightDM
5049 PREFIX mocks
5150 TARGETS MockLightDM-qml
52− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/full"
51+ ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/liblightdm"
5352)
tests/mocks/LightDM/single/UsersModelPrivate.cpp → tests/mocks/LightDM/MockGreeter.cpprenamed+13−11
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -13,21 +13,23 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Michael Terry <michael.terry@canonical.com>
1716 */
1817
19−#include "../UsersModelPrivate.h"
18+#include "MockGreeter.h"
19+#include <GreeterPrivate.h>
2020
21−namespace QLightDM
21+QString MockGreeter::mockMode() const
2222{
23+ Q_D(const Greeter);
24+ return d->m_greeter->mockMode();
25+}
2326
24−UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
25− : q_ptr(parent)
27+void MockGreeter::setMockMode(QString mockMode)
2628{
27− entries =
28− {
29− { "single", "Single User", 0, 0, false, false, 0, 0 },
30− };
31−}
29+ Q_D(Greeter);
3230
31+ if (d->m_greeter->mockMode() != mockMode) {
32+ d->m_greeter->setMockMode(mockMode);
33+ Q_EMIT mockModeChanged(mockMode);
34+ }
3335}
tests/mocks/LightDM/MockGreeter.hnew file+37
@@ -0,0 +1,37 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+// The real, production, Greeter
19+#include <Greeter.h>
20+
21+#ifndef MOCK_UNITY_GREETER_H
22+#define MOCK_UNITY_GREETER_H
23+
24+class MockGreeter : public Greeter {
25+ Q_OBJECT
26+
27+ Q_PROPERTY(QString mockMode READ mockMode WRITE setMockMode NOTIFY mockModeChanged)
28+
29+public:
30+ QString mockMode() const;
31+ void setMockMode(QString mockMode);
32+
33+Q_SIGNALS:
34+ void mockModeChanged(QString mode);
35+};
36+
37+#endif // MOCK_UNITY_GREETER_H
tests/mocks/LightDM/MockUsersModel.cppnew file+39
@@ -0,0 +1,39 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+#include "MockUsersModel.h"
19+#include <QLightDM/UsersModel>
20+#include <QSortFilterProxyModel>
21+
22+QString MockUsersModel::mockMode() const
23+{
24+ QLightDM::UsersModel* qUsersModel =
25+ static_cast<QLightDM::UsersModel*>(static_cast<QSortFilterProxyModel*>(sourceModel())->sourceModel());
26+
27+ return qUsersModel->mockMode();
28+}
29+
30+void MockUsersModel::setMockMode(QString mockMode)
31+{
32+ QLightDM::UsersModel* qUsersModel =
33+ static_cast<QLightDM::UsersModel*>(static_cast<QSortFilterProxyModel*>(sourceModel())->sourceModel());
34+
35+ if (qUsersModel->mockMode() != mockMode) {
36+ qUsersModel->setMockMode(mockMode);
37+ Q_EMIT mockModeChanged(mockMode);
38+ }
39+}
tests/mocks/LightDM/single/GreeterPrivate.cpp → tests/mocks/LightDM/MockUsersModel.hrenamed+14−23
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -13,34 +13,25 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Michael Terry <michael.terry@canonical.com>
1716 */
1817
19−#include "../Greeter.h"
20−#include "../GreeterPrivate.h"
18+#ifndef MOCK_UNITY_USERSMODEL_H
19+#define MOCK_UNITY_USERSMODEL_H
2120
22−namespace QLightDM
23−{
21+#include <UsersModel.h>
2422
25−GreeterPrivate::GreeterPrivate(Greeter* parent)
26− : authenticated(false),
27− authenticationUser(),
28− twoFactorDone(false),
29− q_ptr(parent)
23+class MockUsersModel : public UsersModel
3024{
31−}
25+ Q_OBJECT
3226
33−void GreeterPrivate::handleAuthenticate()
34−{
35− Q_Q(Greeter);
27+ Q_PROPERTY(QString mockMode READ mockMode WRITE setMockMode NOTIFY mockModeChanged)
3628
37− authenticated = true;
38− Q_EMIT q->authenticationComplete();
39−}
29+public:
30+ QString mockMode() const;
31+ void setMockMode(QString mockMode);
4032
41−void GreeterPrivate::handleRespond(QString const &response)
42−{
43− Q_UNUSED(response)
44−}
33+Q_SIGNALS:
34+ void mockModeChanged(QString mode);
35+};
4536
46−}
37+#endif // MOCK_UNITY_USERSMODEL_H
tests/mocks/LightDM/QLightDM/Greetermode 120000 → 100644+17−1
@@ -1 +0,0 @@
1−../Greeter.h
@@ -0,0 +1,17 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "../liblightdm/Greeter.h"
tests/mocks/LightDM/QLightDM/InfographicModeldeleted−1
@@ -1 +0,0 @@
1−../InfographicModel.h
tests/mocks/LightDM/QLightDM/UsersModelmode 120000 → 100644+17−1
@@ -1 +0,0 @@
1−../UsersModel.h
@@ -0,0 +1,17 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "../liblightdm/UsersModel.h"
tests/mocks/LightDM/full/CMakeLists.txtdeleted−18
@@ -1,18 +0,0 @@
1−set(LibLightDM_SOURCES
2− ../Greeter.cpp
3− ../UsersModel.cpp
4− GreeterPrivate.cpp
5− UsersModelPrivate.cpp
6− ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
7− )
8−
9−add_library(MockLightDM-full SHARED ${LibLightDM_SOURCES})
10−
11−qt5_use_modules(MockLightDM-full Gui)
12−
13−set_target_properties(MockLightDM-full PROPERTIES
14− OUTPUT_NAME lightdm-qt5-2)
15−
16−install(TARGETS MockLightDM-full
17− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/full
18− )
tests/mocks/LightDM/liblightdm/CMakeLists.txtnew file+18
@@ -0,0 +1,18 @@
1+set(LibLightDM_SOURCES
2+ Greeter.cpp
3+ UsersModel.cpp
4+ GreeterPrivate.cpp
5+ UsersModelPrivate.cpp
6+ ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
7+ )
8+
9+add_library(MockLightDM SHARED ${LibLightDM_SOURCES})
10+
11+qt5_use_modules(MockLightDM Gui)
12+
13+set_target_properties(MockLightDM PROPERTIES
14+ OUTPUT_NAME lightdm-qt5-2)
15+
16+install(TARGETS MockLightDM
17+ DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/liblightdm
18+ )
tests/mocks/LightDM/liblightdm/Greeter.cppnew file+199
@@ -0,0 +1,199 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "Greeter.h"
18+#include "GreeterPrivate.h"
19+#include <QtCore/QCoreApplication>
20+#include <QTimer>
21+
22+namespace QLightDM
23+{
24+
25+Greeter::Greeter(QObject *parent)
26+ : QObject(parent),
27+ d_ptr(new GreeterPrivate(this))
28+{
29+}
30+
31+Greeter::~Greeter()
32+{
33+}
34+
35+QString Greeter::authenticationUser() const
36+{
37+ Q_D(const Greeter);
38+ return d->authenticationUser;
39+}
40+
41+bool Greeter::hasGuestAccountHint() const
42+{
43+ return true;
44+}
45+
46+QString Greeter::getHint(const QString &name) const
47+{
48+ Q_UNUSED(name)
49+ return "";
50+}
51+
52+QString Greeter::defaultSessionHint() const
53+{
54+ return "ubuntu";
55+}
56+
57+bool Greeter::hideUsersHint() const
58+{
59+ return false;
60+}
61+
62+bool Greeter::showManualLoginHint() const
63+{
64+ return true;
65+}
66+
67+bool Greeter::showRemoteLoginHint() const
68+{
69+ return true;
70+}
71+
72+bool Greeter::lockHint () const
73+{
74+ return false;
75+}
76+
77+QString Greeter::selectUserHint() const
78+{
79+ return "";
80+}
81+
82+bool Greeter::selectGuestHint() const
83+{
84+ return false;
85+}
86+
87+QString Greeter::autologinUserHint() const
88+{
89+ return "";
90+}
91+
92+bool Greeter::autologinGuestHint() const
93+{
94+ return false;
95+}
96+
97+int Greeter::autologinTimeoutHint() const
98+{
99+ return 0;
100+}
101+
102+bool Greeter::inAuthentication() const
103+{
104+ return false;
105+}
106+
107+QString Greeter::hostname() const
108+{
109+ return "hostname1";
110+}
111+
112+bool Greeter::isAuthenticated() const
113+{
114+ Q_D(const Greeter);
115+ return d->authenticated;
116+}
117+
118+bool Greeter::connectSync()
119+{
120+ return true;
121+}
122+
123+void Greeter::authenticate(const QString &username)
124+{
125+ Q_D(Greeter);
126+
127+ d->authenticated = false;
128+ d->authenticationUser = username;
129+ d->twoFactorDone = false;
130+ QTimer::singleShot(0, this, SLOT(delayedAuthentication()));
131+}
132+
133+void Greeter::delayedAuthentication()
134+{
135+ Q_D(Greeter);
136+ d->handleAuthenticate();
137+}
138+
139+void Greeter::authenticateAsGuest()
140+{}
141+
142+void Greeter::authenticateAutologin()
143+{}
144+
145+void Greeter::authenticateRemote(const QString &session, const QString &username)
146+{
147+ Q_UNUSED(session)
148+ Q_UNUSED(username)
149+}
150+
151+void Greeter::cancelAuthentication()
152+{}
153+
154+void Greeter::setLanguage (const QString &language)
155+{
156+ Q_UNUSED(language)
157+}
158+
159+bool Greeter::startSessionSync(const QString &session)
160+{
161+ Q_UNUSED(session)
162+ return true;
163+}
164+
165+void Greeter::respond(const QString &response)
166+{
167+ Q_D(Greeter);
168+
169+ d->handleRespond(response);
170+}
171+
172+void Greeter::sendAuthenticationComplete()
173+{
174+ if (qgetenv("UNITY_TESTING").isEmpty()) {
175+ // simulate PAM's delay
176+ QTimer::singleShot(1000, this, SIGNAL(authenticationComplete()));
177+ } else {
178+ Q_EMIT authenticationComplete();
179+ }
180+}
181+
182+QString Greeter::mockMode() const
183+{
184+ Q_D(const Greeter);
185+ return d->mockMode;
186+}
187+
188+
189+void Greeter::setMockMode(QString mockMode)
190+{
191+ Q_D(Greeter);
192+
193+ if (d->mockMode != mockMode) {
194+ d->mockMode = mockMode;
195+ Q_EMIT mockModeChanged(mockMode);
196+ }
197+}
198+
199+}
tests/mocks/LightDM/liblightdm/Greeter.hnew file+118
@@ -0,0 +1,118 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ * Copyright (C) 2010-2011 David Edmundson.
4+ * Copyright (C) 2010-2011 Robert Ancell
5+ *
6+ * This program is free software; you can redistribute it and/or modify
7+ * it under the terms of the GNU General Public License as published by
8+ * the Free Software Foundation; version 3.
9+ *
10+ * This program is distributed in the hope that it will be useful,
11+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+ * GNU General Public License for more details.
14+ *
15+ * You should have received a copy of the GNU General Public License
16+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17+ *
18+ * Author: David Edmundson <kde@davidedmundson.co.uk>
19+ */
20+
21+#ifndef UNITY_MOCK_GREETER_H
22+#define UNITY_MOCK_GREETER_H
23+
24+#include <QtCore/QObject>
25+#include <QtCore/QVariant>
26+
27+
28+namespace QLightDM
29+{
30+ class GreeterPrivate;
31+
32+class Q_DECL_EXPORT Greeter : public QObject
33+{
34+ Q_OBJECT
35+
36+ Q_PROPERTY(bool authenticated READ isAuthenticated ) //NOTFIY authenticationComplete
37+ Q_PROPERTY(QString authenticationUser READ authenticationUser )
38+ Q_PROPERTY(QString defaultSession READ defaultSessionHint CONSTANT)
39+ Q_PROPERTY(QString selectUser READ selectUserHint CONSTANT)
40+ Q_PROPERTY(bool selectGuest READ selectGuestHint CONSTANT)
41+
42+ Q_PROPERTY(QString hostname READ hostname CONSTANT)
43+ Q_PROPERTY(bool hasGuestAccount READ hasGuestAccountHint CONSTANT)
44+ Q_PROPERTY(bool locked READ lockHint CONSTANT)
45+
46+ Q_PROPERTY(QString hostname READ hostname CONSTANT)
47+
48+ Q_ENUMS(PromptType MessageType)
49+
50+ //Mock-only API for testing purposes
51+ Q_PROPERTY(QString mockMode READ mockMode WRITE setMockMode NOTIFY mockModeChanged)
52+
53+public:
54+ enum PromptType {
55+ PromptTypeQuestion,
56+ PromptTypeSecret
57+ };
58+
59+ enum MessageType {
60+ MessageTypeInfo,
61+ MessageTypeError
62+ };
63+
64+ explicit Greeter(QObject* parent=0);
65+ virtual ~Greeter();
66+
67+ QString getHint(const QString &name) const;
68+ QString defaultSessionHint() const;
69+ bool hideUsersHint() const;
70+ bool showManualLoginHint() const;
71+ bool showRemoteLoginHint() const;
72+ bool lockHint () const;
73+ bool hasGuestAccountHint() const;
74+ QString selectUserHint() const;
75+ bool selectGuestHint() const;
76+ QString autologinUserHint() const;
77+ bool autologinGuestHint() const;
78+ int autologinTimeoutHint() const;
79+
80+ bool inAuthentication() const;
81+ bool isAuthenticated() const;
82+ QString authenticationUser() const;
83+ QString hostname() const;
84+
85+ QString mockMode() const;
86+ void setMockMode(QString mockMode);
87+
88+public Q_SLOTS:
89+ bool connectSync();
90+ void authenticate(const QString &username=QString());
91+ void authenticateAsGuest();
92+ void authenticateAutologin();
93+ void authenticateRemote(const QString &session=QString(), const QString &username=QString());
94+ void respond(const QString &response);
95+ void cancelAuthentication();
96+ void setLanguage (const QString &language);
97+ bool startSessionSync(const QString &session=QString());
98+
99+Q_SIGNALS:
100+ void showMessage(QString text, QLightDM::Greeter::MessageType type);
101+ void showPrompt(QString text, QLightDM::Greeter::PromptType type);
102+ void authenticationComplete();
103+ void autologinTimerExpired();
104+ void mockModeChanged(QString mode);
105+
106+protected:
107+ void sendAuthenticationComplete();
108+
109+private Q_SLOTS:
110+ void delayedAuthentication();
111+
112+private:
113+ GreeterPrivate *d_ptr;
114+ Q_DECLARE_PRIVATE(Greeter)
115+};
116+}
117+
118+#endif // UNITY_MOCK_GREETER_H
tests/mocks/LightDM/full/GreeterPrivate.cpp → tests/mocks/LightDM/liblightdm/GreeterPrivate.cpprenamed+40−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,12 +12,10 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
19−#include "../Greeter.h"
20−#include "../GreeterPrivate.h"
17+#include "Greeter.h"
18+#include "GreeterPrivate.h"
2119
2220namespace QLightDM
2321{
@@ -26,14 +24,33 @@ GreeterPrivate::GreeterPrivate(Greeter* parent)
2624 : authenticated(false),
2725 authenticationUser(),
2826 twoFactorDone(false),
27+ mockMode("single"),
2928 q_ptr(parent)
3029{
30+ char *envMockMode = getenv("LIBLIGHTDM_MOCK_MODE");
31+ if (envMockMode) {
32+ mockMode = envMockMode;
33+ }
3134}
3235
3336void GreeterPrivate::handleAuthenticate()
3437{
3538 Q_Q(Greeter);
3639
40+ if (mockMode == "single") {
41+ authenticated = true;
42+ Q_EMIT q->authenticationComplete();
43+ } else if (mockMode == "single-passphrase" || mockMode == "single-pin") {
44+ Q_EMIT q->showPrompt("Password: ", Greeter::PromptTypeSecret);
45+ } else if (mockMode == "full") {
46+ handleAuthenticate_full();
47+ }
48+}
49+
50+void GreeterPrivate::handleAuthenticate_full()
51+{
52+ Q_Q(Greeter);
53+
3754 // Send out any messages we need to
3855 if (authenticationUser == "info-prompt")
3956 Q_EMIT q->showMessage("Welcome to Unity Greeter", Greeter::MessageTypeInfo);
@@ -65,7 +82,24 @@ void GreeterPrivate::handleAuthenticate()
6582 }
6683}
6784
68−void GreeterPrivate::handleRespond(const QString &response)
85+void GreeterPrivate::handleRespond(QString const &response)
86+{
87+ Q_Q(Greeter);
88+
89+ if (mockMode == "single") {
90+ // NOOP
91+ } else if (mockMode == "single-passphrase") {
92+ authenticated = (response == "password");
93+ q->sendAuthenticationComplete();
94+ } else if (mockMode == "single-pin") {
95+ authenticated = (response == "1234");
96+ q->sendAuthenticationComplete();
97+ } else if (mockMode == "full") {
98+ handleRespond_full(response);
99+ }
100+}
101+
102+void GreeterPrivate::handleRespond_full(const QString &response)
69103{
70104 Q_Q(Greeter);
71105
tests/mocks/LightDM/liblightdm/GreeterPrivate.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_MOCK_GREETER_PRIVATE_H
18+#define UNITY_MOCK_GREETER_PRIVATE_H
19+
20+#include <QtCore/QObject>
21+
22+namespace QLightDM
23+{
24+class Greeter;
25+class GreeterImpl;
26+
27+class GreeterPrivate
28+{
29+public:
30+ explicit GreeterPrivate(Greeter* parent=0);
31+ virtual ~GreeterPrivate() = default;
32+
33+ // These variables may not be used by all subclasses, that's no problem
34+ bool authenticated;
35+ QString authenticationUser;
36+ bool twoFactorDone;
37+
38+ QString mockMode;
39+
40+ void handleAuthenticate();
41+ void handleRespond(const QString &response);
42+
43+protected:
44+ GreeterImpl *m_impl; // if the backend needs more private data
45+ Greeter * const q_ptr;
46+
47+private:
48+ void handleAuthenticate_full();
49+ void handleRespond_full(const QString &response);
50+ Q_DECLARE_PUBLIC(Greeter)
51+};
52+}
53+
54+#endif // UNITY_MOCK_GREETER_PRIVATE_H
tests/mocks/LightDM/liblightdm/UsersModel.cppnew file+134
@@ -0,0 +1,134 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Michael Terry <michael.terry@canonical.com>
17+ */
18+
19+// LightDM currently is Qt4 compatible, and so doesn't define setRoleNames.
20+// To use the same method of setting role name that it does, we
21+// set our compatibility to Qt4 here too.
22+#define QT_DISABLE_DEPRECATED_BEFORE QT_VERSION_CHECK(4, 0, 0)
23+
24+#include "UsersModel.h"
25+#include "UsersModelPrivate.h"
26+#include <QtCore/QDir>
27+#include <QtCore/QString>
28+#include <QtGui/QIcon>
29+
30+namespace QLightDM
31+{
32+
33+UsersModel::UsersModel(QObject *parent) :
34+ QAbstractListModel(parent),
35+ d_ptr(new UsersModelPrivate(this))
36+{
37+ Q_D(UsersModel);
38+
39+ // Extend roleNames (we want to keep the "display" role)
40+ QHash<int, QByteArray> roles = roleNames();
41+ roles[NameRole] = "name";
42+ roles[RealNameRole] = "realName";
43+ roles[LoggedInRole] = "loggedIn";
44+ roles[BackgroundRole] = "background";
45+ roles[BackgroundPathRole] = "backgroundPath";
46+ roles[SessionRole] = "session";
47+ roles[HasMessagesRole] = "hasMessages";
48+ roles[ImagePathRole] = "imagePath";
49+ setRoleNames(roles);
50+
51+ // Now modify our mock user backgrounds
52+ QDir bgdir = QDir("/usr/share/demo-assets/shell/backgrounds/");
53+ QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
54+
55+ for (int i = 0, j = 0; i < d->entries.size(); i++) {
56+ Entry &entry = d->entries[i];
57+ if (entry.background.isNull() && !backgrounds.isEmpty()) {
58+ entry.background = bgdir.filePath(backgrounds[j++]);
59+ if (j >= backgrounds.length()) {
60+ j = 0;
61+ }
62+ }
63+ }
64+}
65+
66+UsersModel::~UsersModel()
67+{
68+ delete d_ptr;
69+}
70+
71+int UsersModel::rowCount(const QModelIndex &parent) const
72+{
73+ Q_D(const UsersModel);
74+
75+ if (parent.isValid()) {
76+ return 0;
77+ } else { // parent is root
78+ return d->entries.size();
79+ }
80+}
81+
82+QVariant UsersModel::data(const QModelIndex &index, int role) const
83+{
84+ Q_D(const UsersModel);
85+
86+ if (!index.isValid()) {
87+ return QVariant();
88+ }
89+
90+ int row = index.row();
91+ switch (role) {
92+ case Qt::DisplayRole:
93+ return d->entries[row].real_name;
94+ case Qt::DecorationRole:
95+ return QIcon();
96+ case UsersModel::NameRole:
97+ return d->entries[row].username;
98+ case UsersModel::RealNameRole:
99+ return d->entries[row].real_name;
100+ case UsersModel::SessionRole:
101+ return d->entries[row].session;
102+ case UsersModel::LoggedInRole:
103+ return d->entries[row].is_active;
104+ case UsersModel::BackgroundRole:
105+ return QPixmap(d->entries[row].background);
106+ case UsersModel::BackgroundPathRole:
107+ return d->entries[row].background;
108+ case UsersModel::HasMessagesRole:
109+ return d->entries[row].has_messages;
110+ case UsersModel::ImagePathRole:
111+ return "";
112+ default:
113+ return QVariant();
114+ }
115+}
116+
117+QString UsersModel::mockMode() const
118+{
119+ Q_D(const UsersModel);
120+ return d->mockMode;
121+}
122+
123+void UsersModel::setMockMode(QString mockMode)
124+{
125+ Q_D(UsersModel);
126+
127+ if (d->mockMode != mockMode) {
128+ d->mockMode = mockMode;
129+ Q_EMIT mockModeChanged(mockMode);
130+ d->resetEntries();
131+ }
132+}
133+
134+}
tests/mocks/LightDM/liblightdm/UsersModel.hnew file+69
@@ -0,0 +1,69 @@
1+/*
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3+ * Copyright (C) 2010-2011 David Edmundson.
4+ *
5+ * This program is free software; you can redistribute it and/or modify
6+ * it under the terms of the GNU General Public License as published by
7+ * the Free Software Foundation; version 3.
8+ *
9+ * This program is distributed in the hope that it will be useful,
10+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+ * GNU General Public License for more details.
13+ *
14+ * You should have received a copy of the GNU General Public License
15+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
16+ */
17+
18+#ifndef UNITY_MOCK_USERSMODEL_H
19+#define UNITY_MOCK_USERSMODEL_H
20+
21+#include <QtCore/QString>
22+#include <QtCore/QSharedDataPointer>
23+#include <QAbstractListModel>
24+
25+
26+namespace QLightDM
27+{
28+class UsersModelPrivate;
29+
30+class Q_DECL_EXPORT UsersModel : public QAbstractListModel
31+{
32+ Q_OBJECT
33+
34+ Q_ENUMS(UserModelRoles)
35+
36+ //Mock-only API for testing purposes
37+ Q_PROPERTY(QString mockMode READ mockMode WRITE setMockMode NOTIFY mockModeChanged)
38+
39+Q_SIGNALS:
40+ void mockModeChanged(QString mode);
41+
42+public:
43+ explicit UsersModel(QObject *parent = 0);
44+ virtual ~UsersModel();
45+
46+ enum UserModelRoles {NameRole = Qt::UserRole,
47+ RealNameRole,
48+ LoggedInRole,
49+ BackgroundRole,
50+ SessionRole,
51+ HasMessagesRole,
52+ ImagePathRole,
53+ BackgroundPathRole
54+ };
55+
56+ int rowCount(const QModelIndex &parent) const;
57+ QVariant data(const QModelIndex &index, int role) const;
58+
59+ QString mockMode() const;
60+ void setMockMode(QString mockMode);
61+
62+private:
63+ UsersModelPrivate * const d_ptr;
64+ Q_DECLARE_PRIVATE(UsersModel)
65+};
66+
67+}
68+
69+#endif // UNITY_MOCK_USERSMODEL_H
tests/mocks/LightDM/full/UsersModelPrivate.cpp → tests/mocks/LightDM/liblightdm/UsersModelPrivate.cpprenamed+58−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,17 +12,69 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
19−#include "../UsersModelPrivate.h"
17+#include "UsersModelPrivate.h"
18+#include "UsersModel.h"
2019
2120namespace QLightDM
2221{
2322
2423UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
25− : q_ptr(parent)
24+ : mockMode("single")
25+ , q_ptr(parent)
26+{
27+ char *envMockMode = getenv("LIBLIGHTDM_MOCK_MODE");
28+ if (envMockMode) {
29+ mockMode = envMockMode;
30+ }
31+ resetEntries();
32+}
33+
34+void UsersModelPrivate::resetEntries()
35+{
36+ Q_Q(UsersModel);
37+
38+ q->beginResetModel();
39+
40+ if (mockMode == "single") {
41+ resetEntries_single();
42+ } else if (mockMode == "single-passphrase") {
43+ resetEntries_singlePassphrase();
44+ } else if (mockMode == "single-pin") {
45+ resetEntries_singlePin();
46+ } else if (mockMode == "full") {
47+ resetEntries_full();
48+ }
49+
50+ q->endResetModel();
51+}
52+
53+void UsersModelPrivate::resetEntries_single()
54+{
55+ entries =
56+ {
57+ { "single", "Single User", 0, 0, false, false, 0, 0 },
58+ };
59+}
60+
61+void UsersModelPrivate::resetEntries_singlePassphrase()
62+{
63+ entries =
64+ {
65+ { "single", "Single User", 0, 0, false, false, 0, 0 },
66+ };
67+}
68+
69+void UsersModelPrivate::resetEntries_singlePin()
70+{
71+ entries =
72+ {
73+ { "has-pin", "Has PIN", 0, 0, false, false, 0, 0 },
74+ };
75+}
76+
77+void UsersModelPrivate::resetEntries_full()
2678{
2779 entries =
2880 {
@@ -49,4 +101,4 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
49101 };
50102}
51103
52−}
104+} // namespace QLightDM
tests/mocks/LightDM/liblightdm/UsersModelPrivate.hnew file+63
@@ -0,0 +1,63 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_MOCK_USERSMODEL_PRIVATE_H
18+#define UNITY_MOCK_USERSMODEL_PRIVATE_H
19+
20+#include <QtCore/QList>
21+#include <QtCore/QString>
22+
23+namespace QLightDM
24+{
25+class UsersModel;
26+
27+class Entry
28+{
29+public:
30+ QString username;
31+ QString real_name;
32+ QString background;
33+ QString layouts;
34+ bool is_active;
35+ bool has_messages;
36+ QString session;
37+ QString infographic;
38+};
39+
40+class UsersModelPrivate
41+{
42+public:
43+ explicit UsersModelPrivate(UsersModel *parent = 0);
44+ virtual ~UsersModelPrivate() = default;
45+
46+ QList<Entry> entries;
47+ QString mockMode;
48+
49+ void resetEntries();
50+protected:
51+ UsersModel * const q_ptr;
52+
53+private:
54+ void resetEntries_single();
55+ void resetEntries_singlePassphrase();
56+ void resetEntries_singlePin();
57+ void resetEntries_full();
58+ Q_DECLARE_PUBLIC(UsersModel)
59+};
60+
61+}
62+
63+#endif // UNITY_MOCK_USERSMODEL_PRIVATE_H
tests/mocks/LightDM/plugin.cppnew file+68
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "plugin.h"
18+#include <DBusGreeter.h>
19+#include <DBusGreeterList.h>
20+#include "MockGreeter.h"
21+#include "MockUsersModel.h"
22+#include <libusermetricsoutput/ColorTheme.h>
23+#include <libusermetricsoutput/UserMetrics.h>
24+#include <QLightDM/UsersModel>
25+
26+#include <QAbstractItemModel>
27+#include <QDBusConnection>
28+#include <QtQml/qqml.h>
29+
30+static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
31+{
32+ Q_UNUSED(engine)
33+ Q_UNUSED(scriptEngine)
34+
35+ MockGreeter *greeter = new MockGreeter;
36+ new DBusGreeter(greeter, "/");
37+ new DBusGreeterList(greeter, "/list");
38+
39+ return greeter;
40+}
41+
42+static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
43+{
44+ Q_UNUSED(engine)
45+ Q_UNUSED(scriptEngine)
46+ return new MockUsersModel;
47+}
48+
49+static QObject *infographic_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
50+{
51+ Q_UNUSED(engine)
52+ Q_UNUSED(scriptEngine)
53+ return UserMetricsOutput::UserMetrics::getInstance();
54+}
55+
56+void LightDMPlugin::registerTypes(const char *uri)
57+{
58+ qmlRegisterType<QAbstractItemModel>();
59+ qmlRegisterType<UserMetricsOutput::ColorTheme>();
60+
61+ Q_ASSERT(uri == QLatin1String("LightDM"));
62+ qRegisterMetaType<QLightDM::Greeter::MessageType>("QLightDM::Greeter::MessageType");
63+ qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
64+ qmlRegisterSingletonType<MockGreeter>(uri, 0, 1, "Greeter", greeter_provider);
65+ qmlRegisterSingletonType<MockUsersModel>(uri, 0, 1, "Users", users_provider);
66+ qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", "Type is not instantiable");
67+ qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
68+}
tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/LightDM/plugin.hrenamed+13−14
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,22 +12,21 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
19−#include "../UsersModelPrivate.h"
17+#ifndef MOCK_LIGHTDM_PLUGIN_H
18+#define MOCK_LIGHTDM_PLUGIN_H
2019
21−namespace QLightDM
22−{
20+#include <QtQml/QQmlEngine>
21+#include <QtQml/QQmlExtensionPlugin>
2322
24−UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
25− : q_ptr(parent)
23+class LightDMPlugin : public QQmlExtensionPlugin
2624{
27− entries =
28− {
29− { "single", "Has Passphrase", 0, 0, false, false, 0, 0 },
30− };
31−}
25+ Q_OBJECT
26+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27+
28+public:
29+ void registerTypes(const char *uri);
30+};
3231
33−}
32+#endif
tests/mocks/LightDM/single-passphrase/CMakeLists.txtdeleted−19
@@ -1,19 +0,0 @@
1−set(LibLightDM_SOURCES
2− ../Greeter.cpp
3− ../UsersModel.cpp
4− GreeterPrivate.cpp
5− UsersModelPrivate.cpp
6− ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
7− )
8−
9−
10−add_library(MockLightDM-single-passphrase SHARED ${LibLightDM_SOURCES})
11−
12−qt5_use_modules(MockLightDM-single-passphrase Gui)
13−
14−set_target_properties(MockLightDM-single-passphrase PROPERTIES
15− OUTPUT_NAME lightdm-qt5-2)
16−
17−install(TARGETS MockLightDM-single-passphrase
18− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/single-passphrase
19− )
tests/mocks/LightDM/single-passphrase/GreeterPrivate.cppdeleted−46
@@ -1,46 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
17− */
18−
19−#include "../Greeter.h"
20−#include "../GreeterPrivate.h"
21−
22−namespace QLightDM
23−{
24−
25−GreeterPrivate::GreeterPrivate(Greeter* parent)
26− : authenticated(false),
27− authenticationUser(),
28− q_ptr(parent)
29−{
30−}
31−
32−void GreeterPrivate::handleAuthenticate()
33−{
34− Q_Q(Greeter);
35− Q_EMIT q->showPrompt("Password: ", Greeter::PromptTypeSecret);
36−}
37−
38−void GreeterPrivate::handleRespond(const QString &response)
39−{
40− Q_Q(Greeter);
41−
42− authenticated = (response == "password");
43− q->sendAuthenticationComplete();
44−}
45−
46−}
tests/mocks/LightDM/single-pin/CMakeLists.txtdeleted−19
@@ -1,19 +0,0 @@
1−set(LibLightDM_SOURCES
2− ../Greeter.cpp
3− ../UsersModel.cpp
4− GreeterPrivate.cpp
5− UsersModelPrivate.cpp
6− ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
7− )
8−
9−
10−add_library(MockLightDM-single-pin SHARED ${LibLightDM_SOURCES})
11−
12−qt5_use_modules(MockLightDM-single-pin Gui)
13−
14−set_target_properties(MockLightDM-single-pin PROPERTIES
15− OUTPUT_NAME lightdm-qt5-2)
16−
17−install(TARGETS MockLightDM-single-pin
18− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/single-pin
19− )
tests/mocks/LightDM/single-pin/GreeterPrivate.cppdeleted−46
@@ -1,46 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
17− */
18−
19−#include "../Greeter.h"
20−#include "../GreeterPrivate.h"
21−
22−namespace QLightDM
23−{
24−
25−GreeterPrivate::GreeterPrivate(Greeter* parent)
26− : authenticated(false),
27− authenticationUser(),
28− q_ptr(parent)
29−{
30−}
31−
32−void GreeterPrivate::handleAuthenticate()
33−{
34− Q_Q(Greeter);
35− Q_EMIT q->showPrompt("Password: ", Greeter::PromptTypeSecret);
36−}
37−
38−void GreeterPrivate::handleRespond(const QString &response)
39−{
40− Q_Q(Greeter);
41−
42− authenticated = (response == "1234");
43− q->sendAuthenticationComplete();
44−}
45−
46−}
tests/mocks/LightDM/single/CMakeLists.txtdeleted−18
@@ -1,18 +0,0 @@
1−set(LibLightDM_SOURCES
2− ../Greeter.cpp
3− ../UsersModel.cpp
4− GreeterPrivate.cpp
5− UsersModelPrivate.cpp
6− ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
7− )
8−
9−add_library(MockLightDM-single SHARED ${LibLightDM_SOURCES})
10−
11−qt5_use_modules(MockLightDM-single Gui)
12−
13−set_target_properties(MockLightDM-single PROPERTIES
14− OUTPUT_NAME lightdm-qt5-2)
15−
16−install(TARGETS MockLightDM-single
17− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/single
18− )
tests/plugins/LightDM/CMakeLists.txt+3−3
@@ -11,10 +11,10 @@ include_directories(
1111 ${LIBLIGHTDM_INCLUDE_DIRS}
1212 )
1313
14−add_dependencies(GreeterDBusTestExec MockLightDM-full)
15−target_link_libraries(GreeterDBusTestExec -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full
14+add_dependencies(GreeterDBusTestExec MockLightDM)
15+target_link_libraries(GreeterDBusTestExec -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm
1616 -llightdm-qt5-2)
1717
1818add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
1919
20−add_binary_qml_test(GreeterDBus "${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full" MockLightDM-full "QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/tests/mocks")
20+add_binary_qml_test(GreeterDBus "${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm" MockLightDM "QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/tests/mocks")
tests/plugins/LightDM/greeter.qml+5
@@ -19,4 +19,9 @@ import LightDM 0.1 as LightDM
1919
2020Item {
2121 property var greeter: LightDM.Greeter
22+ Binding {
23+ target: LightDM.Greeter
24+ property: "mockMode"
25+ value: "full"
26+ }
2227}
tests/qmltests/CMakeLists.txt+19−19
@@ -16,11 +16,11 @@ add_qml_test(utils/Unity/Test UnityTest)
1616
1717set(qmltest_DEFAULT_TARGETS qmluitests)
1818set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
19−set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LC_ALL=C")
19+set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/liblightdm:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
2020
21−add_qml_test(. Shell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
22−add_qml_test(. ShellWithPin ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single-pin:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
23−add_qml_test(. TabletShell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
21+add_qml_test(. Shell)
22+add_qml_test(. ShellWithPin)
23+add_qml_test(. TabletShell)
2424add_qml_test(Components Background)
2525add_qml_test(Components Carousel)
2626add_qml_test(Components Dialogs)
@@ -61,10 +61,10 @@ add_qml_test(Dash/ScopeSettings ScopeSettingList)
6161add_qml_test(Dash/ScopeSettings ScopeSettingNumber)
6262add_qml_test(Dash/ScopeSettings ScopeSettingString)
6363add_qml_test(Dash/ScopeSettings ScopeSettingsWidgetFactory)
64−add_qml_test(Greeter MultiGreeter ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
65−add_qml_test(Greeter SingleGreeter ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
66−add_qml_test(Greeter Infographics ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
67−add_qml_test(Greeter Clock ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
64+add_qml_test(Greeter MultiGreeter)
65+add_qml_test(Greeter SingleGreeter)
66+add_qml_test(Greeter Infographics)
67+add_qml_test(Greeter Clock)
6868add_qml_test(Launcher Launcher)
6969add_qml_test(Notifications Notifications)
7070add_qml_test(Notifications VisualSnapDecisionsQueue)
@@ -72,22 +72,22 @@ add_qml_test(Notifications OptionToggle)
7272add_qml_test(Notifications SwipeToAct)
7373add_qml_test(Panel ActiveCallHint)
7474add_qml_test(Panel IndicatorItem)
75−add_qml_test(Panel IndicatorItemRow ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
76−add_qml_test(Panel IndicatorPage ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
77−add_qml_test(Panel IndicatorsBar ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
78−add_qml_test(Panel IndicatorsMenu ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
79−add_qml_test(Panel MenuContent ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
80−add_qml_test(Panel Panel ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
75+add_qml_test(Panel IndicatorItemRow)
76+add_qml_test(Panel IndicatorPage)
77+add_qml_test(Panel IndicatorsBar)
78+add_qml_test(Panel IndicatorsMenu)
79+add_qml_test(Panel MenuContent)
80+add_qml_test(Panel Panel)
8181add_qml_test(Panel SearchIndicator)
8282add_qml_test(Panel/Indicators IndicatorsLight ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
8383# These MenuItemFactory tests need the test/mocks/ to come before plugins/
8484add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
8585add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
86−add_qml_test(Stages ApplicationWindow ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
87−add_qml_test(Stages PhoneStage ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
88−add_qml_test(Stages SpreadDelegate ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
89−add_qml_test(Stages SurfaceContainer ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
90−add_qml_test(Stages SessionContainer ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
86+add_qml_test(Stages ApplicationWindow)
87+add_qml_test(Stages PhoneStage ENVIRONMENT)
88+add_qml_test(Stages SpreadDelegate ENVIRONMENT)
89+add_qml_test(Stages SurfaceContainer ENVIRONMENT)
90+add_qml_test(Stages SessionContainer ENVIRONMENT)
9191add_qml_test(Stages WindowMoveResizeArea)
9292add_qml_test(Stages Splash)
9393add_qml_test(Wizard Wizard)
tests/qmltests/Greeter/tst_Infographics.qml+10
@@ -23,6 +23,16 @@ import Unity.Test 0.1 as UT
2323import LightDM 0.1 as LightDM
2424
2525Item {
26+ Binding {
27+ target: LightDM.Greeter
28+ property: "mockMode"
29+ value: "full"
30+ }
31+ Binding {
32+ target: LightDM.Users
33+ property: "mockMode"
34+ value: "full"
35+ }
2636 property variant infographicModel: LightDM.Infographic
2737
2838 width: units.gu(120)
tests/qmltests/Greeter/tst_MultiGreeter.qml+11
@@ -26,6 +26,17 @@ Item {
2626 width: units.gu(120)
2727 height: units.gu(80)
2828
29+ Binding {
30+ target: LightDM.Greeter
31+ property: "mockMode"
32+ value: "full"
33+ }
34+ Binding {
35+ target: LightDM.Users
36+ property: "mockMode"
37+ value: "full"
38+ }
39+
2940 Greeter {
3041 id: greeter
3142 anchors.fill: parent
tests/qmltests/tst_Shell.qml+8−1
@@ -36,6 +36,13 @@ Item {
3636 width: units.gu(60)
3737 height: units.gu(71)
3838
39+ Component.onCompleted: {
40+ // must set the mock mode before loading the Shell
41+ LightDM.Greeter.mockMode = "single";
42+ LightDM.Users.mockMode = "single";
43+ shellLoader.active = true;
44+ }
45+
3946 QtObject {
4047 id: applicationArguments
4148
@@ -56,7 +63,7 @@ Item {
5663 anchors.fill: parent
5764 Loader {
5865 id: shellLoader
59−
66+ active: false
6067 property bool itemDestroyed: false
6168 sourceComponent: Component {
6269 Shell {
tests/qmltests/tst_ShellWithPin.qml+8
@@ -33,6 +33,13 @@ Item {
3333 width: contentRow.width
3434 height: contentRow.height
3535
36+ Component.onCompleted: {
37+ // must set the mock mode before loading the Shell
38+ LightDM.Greeter.mockMode = "single-pin";
39+ LightDM.Users.mockMode = "single-pin";
40+ shellLoader.active = true;
41+ }
42+
3643 QtObject {
3744 id: applicationArguments
3845
@@ -54,6 +61,7 @@ Item {
5461
5562 Loader {
5663 id: shellLoader
64+ active: false
5765
5866 width: units.gu(40)
5967 height: units.gu(71)
tests/qmltests/tst_TabletShell.qml+8
@@ -32,6 +32,13 @@ Row {
3232 id: root
3333 spacing: 0
3434
35+ Component.onCompleted: {
36+ // must set the mock mode before loading the Shell
37+ LightDM.Greeter.mockMode = "full";
38+ LightDM.Users.mockMode = "full";
39+ shellLoader.active = true;
40+ }
41+
3542 QtObject {
3643 id: applicationArguments
3744
@@ -51,6 +58,7 @@ Row {
5158 Loader {
5259 id: shellLoader
5360
61+ active: false
5462 width: units.gu(100)
5563 height: units.gu(80)
5664