mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Add infrastructure for auto-type tests.
This commit is contained in:
parent
f1719cfc5f
commit
606dbc6eb4
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
AutoType* AutoType::m_instance = Q_NULLPTR;
|
AutoType* AutoType::m_instance = Q_NULLPTR;
|
||||||
|
|
||||||
AutoType::AutoType(QObject* parent)
|
AutoType::AutoType(QObject* parent, bool test)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_inAutoType(false)
|
, m_inAutoType(false)
|
||||||
, m_pluginLoader(new QPluginLoader(this))
|
, m_pluginLoader(new QPluginLoader(this))
|
||||||
@ -42,7 +42,15 @@ AutoType::AutoType(QObject* parent)
|
|||||||
// prevent crash when the plugin has unresolved symbols
|
// prevent crash when the plugin has unresolved symbols
|
||||||
m_pluginLoader->setLoadHints(QLibrary::ResolveAllSymbolsHint);
|
m_pluginLoader->setLoadHints(QLibrary::ResolveAllSymbolsHint);
|
||||||
|
|
||||||
QString pluginPath = filePath()->pluginPath("keepassx-autotype-" + Tools::platform());
|
QString pluginName = "keepassx-autotype-";
|
||||||
|
if (!test) {
|
||||||
|
pluginName += Tools::platform();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pluginName += "test";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString pluginPath = filePath()->pluginPath(pluginName);
|
||||||
|
|
||||||
if (!pluginPath.isEmpty()) {
|
if (!pluginPath.isEmpty()) {
|
||||||
loadPlugin(pluginPath);
|
loadPlugin(pluginPath);
|
||||||
@ -81,6 +89,13 @@ AutoType* AutoType::instance()
|
|||||||
return m_instance;
|
return m_instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AutoType::createTestInstance()
|
||||||
|
{
|
||||||
|
Q_ASSERT(!m_instance);
|
||||||
|
|
||||||
|
m_instance = new AutoType(qApp, true);
|
||||||
|
}
|
||||||
|
|
||||||
QStringList AutoType::windowTitles()
|
QStringList AutoType::windowTitles()
|
||||||
{
|
{
|
||||||
if (!m_plugin) {
|
if (!m_plugin) {
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static AutoType* instance();
|
static AutoType* instance();
|
||||||
|
static void createTestInstance();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void performGlobalAutoType(const QList<Database*>& dbList);
|
void performGlobalAutoType(const QList<Database*>& dbList);
|
||||||
@ -60,7 +61,7 @@ private Q_SLOTS:
|
|||||||
void resetInAutoType();
|
void resetInAutoType();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AutoType(QObject* parent = Q_NULLPTR);
|
explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false);
|
||||||
~AutoType();
|
~AutoType();
|
||||||
void loadPlugin(const QString& pluginPath);
|
void loadPlugin(const QString& pluginPath);
|
||||||
bool parseActions(const QString& sequence, const Entry* entry, QList<AutoTypeAction*>& actions);
|
bool parseActions(const QString& sequence, const Entry* entry, QList<AutoTypeAction*>& actions);
|
||||||
|
@ -5,3 +5,7 @@ if(Q_WS_X11)
|
|||||||
add_subdirectory(x11)
|
add_subdirectory(x11)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_TESTS)
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif()
|
||||||
|
111
src/autotype/test/AutoTypeTest.cpp
Normal file
111
src/autotype/test/AutoTypeTest.cpp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 or (at your option)
|
||||||
|
* version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "AutoTypeTest.h"
|
||||||
|
|
||||||
|
QStringList AutoTypePlatformTest::windowTitles()
|
||||||
|
{
|
||||||
|
return QStringList();
|
||||||
|
}
|
||||||
|
|
||||||
|
WId AutoTypePlatformTest::activeWindow()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString AutoTypePlatformTest::activeWindowTitle()
|
||||||
|
{
|
||||||
|
return m_activeWindowTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AutoTypePlatformTest::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||||
|
{
|
||||||
|
Q_UNUSED(key);
|
||||||
|
Q_UNUSED(modifiers);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypePlatformTest::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||||
|
{
|
||||||
|
Q_UNUSED(key);
|
||||||
|
Q_UNUSED(modifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
int AutoTypePlatformTest::platformEventFilter(void* event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
AutoTypeExecutor* AutoTypePlatformTest::createExecutor()
|
||||||
|
{
|
||||||
|
return new AutoTypeExecturorTest(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypePlatformTest::setActiveWindowTitle(const QString& title)
|
||||||
|
{
|
||||||
|
m_activeWindowTitle = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString AutoTypePlatformTest::actionChars()
|
||||||
|
{
|
||||||
|
return m_actionChars;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<AutoTypeAction*> AutoTypePlatformTest::actionList()
|
||||||
|
{
|
||||||
|
return m_actionList;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypePlatformTest::clearActions()
|
||||||
|
{
|
||||||
|
qDeleteAll(m_actionList);
|
||||||
|
m_actionList.clear();
|
||||||
|
|
||||||
|
m_actionChars.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypePlatformTest::addActionChar(AutoTypeChar* action)
|
||||||
|
{
|
||||||
|
m_actionList.append(action->clone());
|
||||||
|
m_actionChars += action->character;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypePlatformTest::addActionKey(AutoTypeKey* action)
|
||||||
|
{
|
||||||
|
m_actionList.append(action->clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AutoTypeExecturorTest::AutoTypeExecturorTest(AutoTypePlatformTest* platform)
|
||||||
|
: m_platform(platform)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypeExecturorTest::execChar(AutoTypeChar* action)
|
||||||
|
{
|
||||||
|
m_platform->addActionChar(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoTypeExecturorTest::execKey(AutoTypeKey* action)
|
||||||
|
{
|
||||||
|
m_platform->addActionKey(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_EXPORT_PLUGIN2(keepassx-autotype-test, AutoTypePlatformTest)
|
74
src/autotype/test/AutoTypeTest.h
Normal file
74
src/autotype/test/AutoTypeTest.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 or (at your option)
|
||||||
|
* version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KEEPASSX_AUTOTYPETEST_H
|
||||||
|
#define KEEPASSX_AUTOTYPETEST_H
|
||||||
|
|
||||||
|
#include <QtCore/QtPlugin>
|
||||||
|
|
||||||
|
#include "autotype/AutoTypePlatformPlugin.h"
|
||||||
|
#include "autotype/AutoTypeAction.h"
|
||||||
|
#include "autotype/test/AutoTypeTestInterface.h"
|
||||||
|
#include "core/Global.h"
|
||||||
|
|
||||||
|
class AutoTypePlatformTest : public QObject,
|
||||||
|
public AutoTypePlatformInterface,
|
||||||
|
public AutoTypeTestInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface)
|
||||||
|
|
||||||
|
public:
|
||||||
|
QStringList windowTitles();
|
||||||
|
WId activeWindow();
|
||||||
|
QString activeWindowTitle();
|
||||||
|
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||||
|
void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||||
|
int platformEventFilter(void* event);
|
||||||
|
AutoTypeExecutor* createExecutor();
|
||||||
|
|
||||||
|
void setActiveWindowTitle(const QString& title);
|
||||||
|
|
||||||
|
QString actionChars();
|
||||||
|
QList<AutoTypeAction*> actionList();
|
||||||
|
void clearActions();
|
||||||
|
|
||||||
|
void addActionChar(AutoTypeChar* action);
|
||||||
|
void addActionKey(AutoTypeKey* action);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void globalShortcutTriggered();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_activeWindowTitle;
|
||||||
|
QList<AutoTypeAction*> m_actionList;
|
||||||
|
QString m_actionChars;
|
||||||
|
};
|
||||||
|
|
||||||
|
class AutoTypeExecturorTest : public AutoTypeExecutor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform);
|
||||||
|
|
||||||
|
void execChar(AutoTypeChar* action);
|
||||||
|
void execKey(AutoTypeKey* action);
|
||||||
|
|
||||||
|
private:
|
||||||
|
AutoTypePlatformTest* const m_platform;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // KEEPASSX_AUTOTYPETEST_H
|
36
src/autotype/test/AutoTypeTestInterface.h
Normal file
36
src/autotype/test/AutoTypeTestInterface.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 or (at your option)
|
||||||
|
* version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KEEPASSX_AUTOTYPETESTINTERFACE_H
|
||||||
|
#define KEEPASSX_AUTOTYPETESTINTERFACE_H
|
||||||
|
|
||||||
|
#include "autotype/AutoTypeAction.h"
|
||||||
|
|
||||||
|
class AutoTypeTestInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~AutoTypeTestInterface() {}
|
||||||
|
virtual void setActiveWindowTitle(const QString& title) = 0;
|
||||||
|
|
||||||
|
virtual QString actionChars() = 0;
|
||||||
|
virtual QList<AutoTypeAction*> actionList() = 0;
|
||||||
|
virtual void clearActions() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_INTERFACE(AutoTypeTestInterface, "org.keepassx.AutoTypeTestInterface/1")
|
||||||
|
|
||||||
|
#endif // KEEPASSX_AUTOTYPETESTINTERFACE_H
|
12
src/autotype/test/CMakeLists.txt
Normal file
12
src/autotype/test/CMakeLists.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
set(autotype_test_SOURCES
|
||||||
|
AutoTypeTest.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(autotype_test_MOC
|
||||||
|
AutoTypeTest.h
|
||||||
|
)
|
||||||
|
|
||||||
|
qt4_wrap_cpp(autotype_test_SOURCES ${autotype_test_MOC})
|
||||||
|
|
||||||
|
add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES})
|
||||||
|
target_link_libraries(keepassx-autotype-test ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
|
@ -38,10 +38,15 @@ QString FilePath::dataPath(const QString& name)
|
|||||||
QString FilePath::pluginPath(const QString& name)
|
QString FilePath::pluginPath(const QString& name)
|
||||||
{
|
{
|
||||||
QStringList pluginPaths;
|
QStringList pluginPaths;
|
||||||
|
|
||||||
QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype");
|
QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype");
|
||||||
Q_FOREACH (const QString& dir, buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
|
Q_FOREACH (const QString& dir, buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
|
||||||
pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir;
|
pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for TestAutoType
|
||||||
|
pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test";
|
||||||
|
|
||||||
pluginPaths << QCoreApplication::applicationDirPath();
|
pluginPaths << QCoreApplication::applicationDirPath();
|
||||||
pluginPaths << QCoreApplication::applicationDirPath() + "/../lib/keepassx";
|
pluginPaths << QCoreApplication::applicationDirPath() + "/../lib/keepassx";
|
||||||
|
|
||||||
|
@ -152,6 +152,9 @@ add_unit_test(NAME testqsavefile SOURCES TestQSaveFile.cpp MOCS TestQSaveFile.h
|
|||||||
add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp MOCS TestWildcardMatcher.h
|
add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp MOCS TestWildcardMatcher.h
|
||||||
LIBS ${TEST_LIBRARIES})
|
LIBS ${TEST_LIBRARIES})
|
||||||
|
|
||||||
|
add_unit_test(NAME testautotype SOURCES TestAutoType.cpp MOCS TestAutoType.h
|
||||||
|
LIBS ${TEST_LIBRARIES})
|
||||||
|
|
||||||
if(WITH_GUI_TESTS)
|
if(WITH_GUI_TESTS)
|
||||||
add_subdirectory(gui)
|
add_subdirectory(gui)
|
||||||
endif(WITH_GUI_TESTS)
|
endif(WITH_GUI_TESTS)
|
||||||
|
Loading…
Reference in New Issue
Block a user