diff options
author | Andrew Christian <andrew.christian@nokia.com> | 2012-03-22 07:51:25 -0400 |
---|---|---|
committer | Andrew Christian <andrew.christian@nokia.com> | 2012-03-22 19:29:10 +0100 |
commit | 1a45397265d17753225c2ca3134fd0793f70cfc8 (patch) | |
tree | 3e83dc0a3b20e188ea3cf4d9990e7003a7b70d9d /tests | |
parent | 6490c4501e8a2c4f734bb163d273000f43b21de9 (diff) |
Exposed IdleDelegates to ProcessManager and added declarative test case
Change-Id: I95dd813cdcee26e1ce654cc4fd49bbe63697c5fc
Reviewed-by: Lasse Holmstedt <lasse.holmstedt@nokia.com>
Reviewed-by: Chris Craig <ext-chris.craig@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/declarative/tst_declarative.cpp | 66 | ||||
-rw-r--r-- | tests/auto/processmanager/tst_processmanager.cpp | 39 |
2 files changed, 105 insertions, 0 deletions
diff --git a/tests/auto/declarative/tst_declarative.cpp b/tests/auto/declarative/tst_declarative.cpp index c486c6c..a01a9e8 100644 --- a/tests/auto/declarative/tst_declarative.cpp +++ b/tests/auto/declarative/tst_declarative.cpp @@ -58,6 +58,7 @@ #include "processfrontend.h" #include "processbackend.h" #include "process.h" +#include "timeoutidledelegate.h" QT_USE_NAMESPACE_PROCESSMANAGER @@ -80,6 +81,7 @@ private slots: void match(); void rewrite(); + void timeoutIdleDelegate(); }; @@ -102,6 +104,9 @@ void tst_DeclarativeProcessManager::initTestCase() qmlRegisterType<DeclarativeRewriteDelegate>(uri, 1, 0, "DeclarativeRewriteDelegate"); qmlRegisterUncreatableType<Process>(uri, 1, 0, "Process", "Don't try to make this"); + qmlRegisterUncreatableType<IdleDelegate>(uri, 1, 0, "IdleDelegate", "Don't try to make this"); + qmlRegisterType<TimeoutIdleDelegate>(uri, 1, 0, "TimeoutIdleDelegate"); + qRegisterMetaType<QProcess::ProcessState>(); qRegisterMetaType<QProcess::ExitStatus>(); qRegisterMetaType<QProcess::ProcessError>(); @@ -130,6 +135,30 @@ static void waitForSocket(const QString& socketname, int timeout=5000) } } +static void waitForChange(QSignalSpy& spy, int count, int timeout=4000) +{ + QTime stopWatch; + stopWatch.start(); + forever { + if (spy.count() >= count) + break; + if (stopWatch.elapsed() >= timeout) + QFAIL("Timed out"); + QTestEventLoop::instance().enterLoop(1); + } +} + +static void waitForTimeout(int timeout=5000) +{ + QTime stopWatch; + stopWatch.start(); + forever { + if (stopWatch.elapsed() >= timeout) + break; + QTestEventLoop::instance().enterLoop(1); + } +} + class Spy { public: @@ -369,6 +398,43 @@ void tst_DeclarativeProcessManager::rewrite() QCOMPARE(info.environment().value(QStringLiteral("noiselevel")).toInt(), 85); } + +const char *kTimeoutIdleDelegateTest = "import QtQuick 2.0; import Test 1.0; \n" +"TimeoutIdleDelegate { \n" +" id: idled\n" +" idleInterval: 1000\n" +" enabled: false\n" +"}\n"; + +void tst_DeclarativeProcessManager::timeoutIdleDelegate() +{ + QQmlEngine engine; + QQmlContext context(&engine); + QQmlComponent component(&engine); + component.setData(kTimeoutIdleDelegateTest, QUrl()); + QCOMPARE(component.status(), QQmlComponent::Ready); + TimeoutIdleDelegate *delegate = qobject_cast<TimeoutIdleDelegate *>(component.create()); + QVERIFY(delegate); + + QSignalSpy spyIdleInterval(delegate, SIGNAL(idleIntervalChanged())); + QSignalSpy spyIdleCpu(delegate, SIGNAL(idleCpuAvailable())); + QSignalSpy spyEnabled(delegate, SIGNAL(enabledChanged())); + + waitForTimeout(2000); + QCOMPARE(spyIdleCpu.count(), 0); + + delegate->requestIdleCpu(true); + waitForTimeout(2000); + QCOMPARE(spyIdleCpu.count(), 0); + + delegate->setEnabled(true); + waitForChange(spyIdleCpu, 1); + waitForChange(spyIdleCpu, 2); + + delete delegate; +} + + QTEST_MAIN(tst_DeclarativeProcessManager) #include "tst_declarative.moc" diff --git a/tests/auto/processmanager/tst_processmanager.cpp b/tests/auto/processmanager/tst_processmanager.cpp index f66654c..fba8def 100644 --- a/tests/auto/processmanager/tst_processmanager.cpp +++ b/tests/auto/processmanager/tst_processmanager.cpp @@ -176,6 +176,19 @@ static void waitForInternalProcess(ProcessBackendManager *manager, int num=1, in } } +static void waitForInternalProcess(ProcessManager *manager, int num=1, int timeout=5000) +{ + QTime stopWatch; + stopWatch.start(); + forever { + if (stopWatch.elapsed() >= timeout) + QFAIL("Timed out"); + if (manager->internalProcesses().count() == num) + break; + QTestEventLoop::instance().enterLoop(1); + } +} + static void waitForSocket(const QString& socketname, int timeout=5000) { QTime stopWatch; @@ -972,6 +985,7 @@ private slots: void prelaunchWaitIdleTest(); void frontend(); + void frontendWaitIdleTest(); void subclassFrontend(); }; @@ -1069,6 +1083,31 @@ void tst_ProcessManager::frontend() delete manager; } +void tst_ProcessManager::frontendWaitIdleTest() +{ + ProcessManager *manager = new ProcessManager; + TimeoutIdleDelegate *delegate = new TimeoutIdleDelegate; + manager->setIdleDelegate(delegate); + + ProcessInfo info; + info.setValue("program", "testPrelaunch/testPrelaunch"); + PrelaunchProcessBackendFactory *factory = new PrelaunchProcessBackendFactory; + factory->setProcessInfo(info); + manager->addBackendFactory(factory); + + // The factory should not have launched + QCOMPARE(manager->internalProcesses().count(), 0); + waitForInternalProcess(manager, 1, delegate->idleInterval() + 2000); + QCOMPARE(manager->internalProcesses().count(), 1); + Q_PID pid = manager->internalProcesses().at(0); + + // Kill the prelaunched process and verify that it is restarted + ::kill(pid, SIGKILL); + waitForInternalProcess(manager, 0); + waitForInternalProcess(manager, 1, delegate->idleInterval() + 2000); + delete manager; +} + class TestProcess : public ProcessFrontend { Q_OBJECT Q_PROPERTY(QString magic READ magic WRITE setMagic NOTIFY magicChanged) |