mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 10:52:51 +00:00
166 lines
5.6 KiB
C++
166 lines
5.6 KiB
C++
/* This file is part of the KDE project
|
|
Copyright (C) 2007 John Tapsell <tapsell@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
|
|
#include <QtTest>
|
|
#include <QtCore>
|
|
#include <QTreeView>
|
|
|
|
#include <klocale.h>
|
|
#include <qtest_kde.h>
|
|
#include <kdebug.h>
|
|
|
|
#include "processcore/processes.h"
|
|
#include "processcore/process.h"
|
|
#include "processcore/processes_base_p.h"
|
|
|
|
#include "processui/ksysguardprocesslist.h"
|
|
|
|
#include "processtest.h"
|
|
|
|
void testProcess::testProcesses() {
|
|
KSysGuard::Processes *processController = new KSysGuard::Processes();
|
|
processController->updateAllProcesses();
|
|
QList<KSysGuard::Process *> processes = processController->getAllProcesses();
|
|
QSet<long> pids;
|
|
Q_FOREACH( KSysGuard::Process *process, processes) {
|
|
if(process->pid == 0) continue;
|
|
QVERIFY(process->pid > 0);
|
|
QVERIFY(!process->name.isEmpty());
|
|
|
|
//test all the pids are unique
|
|
QVERIFY(!pids.contains(process->pid));
|
|
pids.insert(process->pid);
|
|
}
|
|
processController->updateAllProcesses();
|
|
QList<KSysGuard::Process *> processes2 = processController->getAllProcesses();
|
|
Q_FOREACH( KSysGuard::Process *process, processes2) {
|
|
if(process->pid == 0) continue;
|
|
QVERIFY(process->pid > 0);
|
|
QVERIFY(!process->name.isEmpty());
|
|
|
|
//test all the pids are unique
|
|
if(!pids.contains(process->pid)) {
|
|
kDebug() << process->pid << " not found. " << process->name;
|
|
}
|
|
pids.remove(process->pid);
|
|
}
|
|
|
|
// Make sure calling it twice gives the same results. The difference in
|
|
// time is so small that it really shouldn't have changed
|
|
if (processes2.size() != processes.size()) {
|
|
// But when it happens, it happens..
|
|
QSKIP("Flaky test, run on idle system", SkipSingle);
|
|
}
|
|
QVERIFY(processes2.size() == processes.size());
|
|
QCOMPARE(processes, processes2);
|
|
delete processController;
|
|
}
|
|
|
|
|
|
unsigned long testProcess::countNumChildren(KSysGuard::Process *p) {
|
|
unsigned long total = p->children.size();
|
|
for(int i =0; i < p->children.size(); i++) {
|
|
total += countNumChildren(p->children[i]);
|
|
}
|
|
return total;
|
|
}
|
|
|
|
void testProcess::testProcessesTreeStructure() {
|
|
KSysGuard::Processes *processController = new KSysGuard::Processes();
|
|
processController->updateAllProcesses();
|
|
QList<KSysGuard::Process *> processes = processController->getAllProcesses();
|
|
|
|
Q_FOREACH( KSysGuard::Process *process, processes) {
|
|
QCOMPARE(countNumChildren(process), process->numChildren);
|
|
|
|
for(int i =0; i < process->children.size(); i++) {
|
|
QVERIFY(process->children[i]->parent);
|
|
QCOMPARE(process->children[i]->parent, process);
|
|
}
|
|
}
|
|
delete processController;
|
|
}
|
|
|
|
void testProcess::testProcessesModification() {
|
|
//We will modify the tree, then re-call getProcesses and make sure that it fixed everything we modified
|
|
KSysGuard::Processes *processController = new KSysGuard::Processes();
|
|
processController->updateAllProcesses();
|
|
KSysGuard::Process *initProcess = processController->getProcess(1);
|
|
|
|
if(!initProcess || initProcess->numChildren < 3) {
|
|
delete processController;
|
|
return;
|
|
}
|
|
|
|
QVERIFY(initProcess);
|
|
QVERIFY(initProcess->children[0]);
|
|
QVERIFY(initProcess->children[1]);
|
|
kDebug() << initProcess->numChildren;
|
|
initProcess->children[0]->parent = initProcess->children[1];
|
|
initProcess->children[1]->children.append(initProcess->children[0]);
|
|
initProcess->children[1]->numChildren++;
|
|
initProcess->numChildren--;
|
|
initProcess->children.removeAt(0);
|
|
delete processController;
|
|
}
|
|
|
|
void testProcess::testTimeToUpdateAllProcesses() {
|
|
//See how long it takes to get process information
|
|
KSysGuard::Processes *processController = new KSysGuard::Processes();
|
|
QBENCHMARK {
|
|
processController->updateAllProcesses();
|
|
}
|
|
delete processController;
|
|
}
|
|
|
|
void testProcess::testTimeToUpdateModel() {
|
|
KSysGuardProcessList *processList = new KSysGuardProcessList;
|
|
processList->treeView()->setColumnHidden(13, false);
|
|
processList->show();
|
|
QTest::qWaitForWindowShown(processList);
|
|
|
|
QBENCHMARK {
|
|
processList->updateList();
|
|
QTest::qWait(0);
|
|
}
|
|
delete processList;
|
|
}
|
|
|
|
void testProcess::testUpdateOrAddProcess() {
|
|
KSysGuard::Processes *processController = new KSysGuard::Processes();
|
|
processController->updateAllProcesses();
|
|
KSysGuard::Process *process;
|
|
// Make sure that this doesn't crash at least
|
|
process = processController->getProcess(0);
|
|
process = processController->getProcess(1);
|
|
if (process)
|
|
QCOMPARE(process->pid, 1l);
|
|
|
|
// Make sure that this doesn't crash at least
|
|
processController->updateOrAddProcess(1);
|
|
processController->updateOrAddProcess(0);
|
|
processController->updateOrAddProcess(-1);
|
|
delete processController;
|
|
}
|
|
|
|
QTEST_KDEMAIN(testProcess,GUI)
|
|
|
|
#include "moc_processtest.cpp"
|
|
|