[calligra/calligra/2.6] /: Fixed all but one unittests in Krita
Dmitry Kazakov
dimula73 at gmail.com
Sun Dec 2 07:15:14 UTC 2012
Git commit 74b74e9c5bc72f31d3ae047acaed86081c9bc0b6 by Dmitry Kazakov.
Committed on 27/11/2012 at 10:13.
Pushed by dkazakov into branch 'calligra/2.6'.
Fixed all but one unittests in Krita
Now all the unittests in folders ./image/ ./ui/ and ./plugins/ pass
on my machine. The only exception is krita-fileformat-kis_exr_test, but
it probably related to the fact that I don't have all the needed libraries
installed.
Good news: now KisSelectionManagerTest and KisZoomAndPanTest do not take
30+ min to execute. The delay was related to the overfilled Qt event queue,
and now they take 90 and 40 sec correspondingly.
CCMAIL:kimageshop at kde.org
Conflicts:
libs/pigment/compositeops/KoStreamedMath.h
M +- -- krita/image/tests/data/merged_hakonepa.png
M +- -- krita/image/tests/data/processings/crop/crop_root_original.png
M +- -- krita/image/tests/data/processings/crop/crop_root_projection.png
M +- -- krita/image/tests/data/processings/initial/initial_root_original.png
M +- -- krita/image/tests/data/processings/initial/initial_root_projection.png
M +- -- krita/image/tests/data/processings/transform_scale/transform_scale_root_original.png
M +- -- krita/image/tests/data/processings/transform_scale/transform_scale_root_projection.png
M +- -- krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_original.png
M +- -- krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_projection.png
M +1 -1 krita/image/tests/kis_async_merger_test.cpp
M +1 -1 krita/image/tests/kis_paint_layer_test.cpp
M +5 -1 krita/image/tests/kis_processing_applicator_test.cpp
M +1 -1 krita/plugins/formats/xcf/tests/kis_xcf_test.cpp
M +11 -8 krita/sdk/tests/qimage_based_test.h
M +16 -3 krita/sdk/tests/stroke_testing_utils.cpp
M +1 -0 krita/sdk/tests/stroke_testing_utils.h
M +2 -2 krita/sdk/tests/testutil.h
M +15 -2 krita/ui/tests/kis_selection_manager_test.cpp
M +9 -0 krita/ui/tests/kis_zoom_and_pan_test.cpp
M +1 -1 libs/flake/KoToolManager.cpp
M +2 -2 libs/flake/KoToolManager_p.cpp
M +1 -1 libs/flake/KoToolManager_p.h
http://commits.kde.org/calligra/74b74e9c5bc72f31d3ae047acaed86081c9bc0b6
diff --git a/krita/image/tests/data/merged_hakonepa.png b/krita/image/tests/data/merged_hakonepa.png
index d4f79c2..0d85556 100644
Binary files a/krita/image/tests/data/merged_hakonepa.png and b/krita/image/tests/data/merged_hakonepa.png differ
diff --git a/krita/image/tests/data/processings/crop/crop_root_original.png b/krita/image/tests/data/processings/crop/crop_root_original.png
index 1d22d19..69831ee 100644
Binary files a/krita/image/tests/data/processings/crop/crop_root_original.png and b/krita/image/tests/data/processings/crop/crop_root_original.png differ
diff --git a/krita/image/tests/data/processings/crop/crop_root_projection.png b/krita/image/tests/data/processings/crop/crop_root_projection.png
index 1d22d19..69831ee 100644
Binary files a/krita/image/tests/data/processings/crop/crop_root_projection.png and b/krita/image/tests/data/processings/crop/crop_root_projection.png differ
diff --git a/krita/image/tests/data/processings/initial/initial_root_original.png b/krita/image/tests/data/processings/initial/initial_root_original.png
index ee1e25b..4034da7 100644
Binary files a/krita/image/tests/data/processings/initial/initial_root_original.png and b/krita/image/tests/data/processings/initial/initial_root_original.png differ
diff --git a/krita/image/tests/data/processings/initial/initial_root_projection.png b/krita/image/tests/data/processings/initial/initial_root_projection.png
index ee1e25b..4034da7 100644
Binary files a/krita/image/tests/data/processings/initial/initial_root_projection.png and b/krita/image/tests/data/processings/initial/initial_root_projection.png differ
diff --git a/krita/image/tests/data/processings/transform_scale/transform_scale_root_original.png b/krita/image/tests/data/processings/transform_scale/transform_scale_root_original.png
index 544d3d0..b2bab8c 100644
Binary files a/krita/image/tests/data/processings/transform_scale/transform_scale_root_original.png and b/krita/image/tests/data/processings/transform_scale/transform_scale_root_original.png differ
diff --git a/krita/image/tests/data/processings/transform_scale/transform_scale_root_projection.png b/krita/image/tests/data/processings/transform_scale/transform_scale_root_projection.png
index 544d3d0..b2bab8c 100644
Binary files a/krita/image/tests/data/processings/transform_scale/transform_scale_root_projection.png and b/krita/image/tests/data/processings/transform_scale/transform_scale_root_projection.png differ
diff --git a/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_original.png b/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_original.png
index 98eeed0..67c0e0f 100644
Binary files a/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_original.png and b/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_original.png differ
diff --git a/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_projection.png b/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_projection.png
index 98eeed0..67c0e0f 100644
Binary files a/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_projection.png and b/krita/image/tests/data/processings/transform_scale_rotate/transform_scale_rotate_root_projection.png differ
diff --git a/krita/image/tests/kis_async_merger_test.cpp b/krita/image/tests/kis_async_merger_test.cpp
index c166983..3c2e9b0 100644
--- a/krita/image/tests/kis_async_merger_test.cpp
+++ b/krita/image/tests/kis_async_merger_test.cpp
@@ -118,7 +118,7 @@ void KisAsyncMergerTest::testMerger()
QImage resultProjection = rootLayer->projection()->convertToQImage(0);
resultProjection.save(QString(FILES_OUTPUT_DIR) + QDir::separator() + "actual_merge_result.png");
QPoint pt;
- QVERIFY(TestUtil::compareQImages(pt, resultProjection, referenceProjection));
+ QVERIFY(TestUtil::compareQImages(pt, resultProjection, referenceProjection, 1));
}
diff --git a/krita/image/tests/kis_paint_layer_test.cpp b/krita/image/tests/kis_paint_layer_test.cpp
index 2936258..573ed5f 100644
--- a/krita/image/tests/kis_paint_layer_test.cpp
+++ b/krita/image/tests/kis_paint_layer_test.cpp
@@ -89,7 +89,7 @@ void KisPaintLayerTest::testProjection()
// Now fill the layer with some opaque pixels
transparencyMask->select(qimage.rect());
transparencyMask->setDirty(qimage.rect());
- layer->updateProjection(qimage.rect());
+ image->waitForDone();
layer->projection()->convertToQImage(0, 0, 0, qimage.width(), qimage.height()).save("aaa.png");
// Nothing is transparent anymore, so the projection and the paint device should be identical again
diff --git a/krita/image/tests/kis_processing_applicator_test.cpp b/krita/image/tests/kis_processing_applicator_test.cpp
index 1565324..4412a62 100644
--- a/krita/image/tests/kis_processing_applicator_test.cpp
+++ b/krita/image/tests/kis_processing_applicator_test.cpp
@@ -31,6 +31,8 @@
#include "processing/kis_crop_processing_visitor.h"
#include "kis_image.h"
+#include "testutil.h"
+
/*
+----------+
|root |
@@ -84,7 +86,9 @@ bool checkLayers(KisImageWSP image,
QImage ref(QString(FILES_DATA_DIR) + QDir::separator() +
"applicator" + QDir::separator() + names[i]);
- if(ref != images[i]) {
+ QPoint temp;
+
+ if(!TestUtil::compareQImages(temp, ref, images[i], 1)) {
qDebug() << "--- Wrong image:" << names[i];
valid = false;
images[i].save(QString(FILES_OUTPUT_DIR) + QDir::separator() + names[i]);
diff --git a/krita/plugins/formats/xcf/tests/kis_xcf_test.cpp b/krita/plugins/formats/xcf/tests/kis_xcf_test.cpp
index e2dc4c8..3409b0f 100644
--- a/krita/plugins/formats/xcf/tests/kis_xcf_test.cpp
+++ b/krita/plugins/formats/xcf/tests/kis_xcf_test.cpp
@@ -32,7 +32,7 @@
void KisXCFTest::testFiles()
{
- TestUtil::testFiles(QString(FILES_DATA_DIR) + "/sources", QStringList());
+ TestUtil::testFiles(QString(FILES_DATA_DIR) + "/sources", QStringList(), QString(), 1);
}
QTEST_KDEMAIN(KisXCFTest, GUI)
diff --git a/krita/sdk/tests/qimage_based_test.h b/krita/sdk/tests/qimage_based_test.h
index 7f405a7..a2dc744 100644
--- a/krita/sdk/tests/qimage_based_test.h
+++ b/krita/sdk/tests/qimage_based_test.h
@@ -116,7 +116,7 @@ protected:
* Checks the content of image's layers against the set of
* QImages stored in @p prefix subfolder
*/
- bool checkLayers(KisImageWSP image, const QString &prefix) {
+ bool checkLayers(KisImageWSP image, const QString &prefix, int baseFuzzyness = 0) {
QVector<QImage> images;
QVector<QString> names;
@@ -126,7 +126,7 @@ protected:
const int stackSize = images.size();
for(int i = 0; i < stackSize; i++) {
- if(!checkOneQImage(images[i], prefix, names[i])) {
+ if(!checkOneQImage(images[i], prefix, names[i], baseFuzzyness)) {
valid = false;
}
}
@@ -138,22 +138,23 @@ protected:
* Checks the content of one image's layer against the QImage
* stored in @p prefix subfolder
*/
- bool checkOneLayer(KisImageWSP image, KisNodeSP node, const QString &prefix) {
+ bool checkOneLayer(KisImageWSP image, KisNodeSP node, const QString &prefix, int baseFuzzyness = 0) {
QVector<QImage> images;
QVector<QString> names;
fillNamesImages(node, image->bounds(), images, names);
- return checkOneQImage(images.first(), prefix, names.first());
+ return checkOneQImage(images.first(), prefix, names.first(), baseFuzzyness);
}
// add default bounds param
bool checkOneDevice(KisPaintDeviceSP device,
const QString &prefix,
- const QString &name)
+ const QString &name,
+ int baseFuzzyness = 0)
{
QImage image = device->convertToQImage(0);
- return checkOneQImage(image, prefix, name);
+ return checkOneQImage(image, prefix, name, baseFuzzyness);
}
KisNodeSP findNode(KisNodeSP root, const QString &name) {
@@ -171,7 +172,8 @@ protected:
private:
bool checkOneQImage(const QImage &image,
const QString &prefix,
- const QString &name)
+ const QString &name,
+ int baseFuzzyness)
{
QString realName = prefix + "_" + name + ".png";
QString expectedName = prefix + "_" + name + "_expected.png";
@@ -183,7 +185,7 @@ private:
prefix + QDir::separator() + realName);
QPoint temp;
- int fuzzy = 0;
+ int fuzzy = baseFuzzyness;
{
QStringList terms = name.split('_');
@@ -195,6 +197,7 @@ private:
if(ref != image &&
!TestUtil::compareQImages(temp, ref, image, fuzzy)) {
+
qDebug() << "--- Wrong image:" << realName;
valid = false;
diff --git a/krita/sdk/tests/stroke_testing_utils.cpp b/krita/sdk/tests/stroke_testing_utils.cpp
index bbfa889..243d675 100644
--- a/krita/sdk/tests/stroke_testing_utils.cpp
+++ b/krita/sdk/tests/stroke_testing_utils.cpp
@@ -32,6 +32,8 @@
#include "kis_paint_device.h"
#include "kis_paint_layer.h"
+#include "testutil.h"
+
KisImageSP utils::createImage(KisUndoStore *undoStore, const QSize &imageSize) {
QRect imageRect(0,0,imageSize.width(),imageSize.height());
@@ -178,11 +180,13 @@ void utils::StrokeTester::testOneStroke(bool cancelled,
QImage refImage;
refImage.load(referenceFile(testName));
- if(resultImage != refImage) {
+ QPoint temp;
+ if(!TestUtil::compareQImages(temp, refImage, resultImage, 1, 1)) {
+ refImage.save(dumpReferenceFile(testName));
resultImage.save(resultFile(testName));
- }
- QCOMPARE(resultImage, refImage);
+ QFAIL("Images do not coincide");
+ }
}
QString utils::StrokeTester::formatTestName(const QString &baseName,
@@ -209,6 +213,15 @@ QString utils::StrokeTester::referenceFile(const QString &testName)
return path;
}
+QString utils::StrokeTester::dumpReferenceFile(const QString &testName)
+{
+ QString path = QString(FILES_OUTPUT_DIR) + QDir::separator();
+ path += testName;
+ path += "_expected";
+ path += ".png";
+ return path;
+}
+
QString utils::StrokeTester::resultFile(const QString &testName)
{
QString path = QString(FILES_OUTPUT_DIR) + QDir::separator();
diff --git a/krita/sdk/tests/stroke_testing_utils.h b/krita/sdk/tests/stroke_testing_utils.h
index 006aba6..1792eba 100644
--- a/krita/sdk/tests/stroke_testing_utils.h
+++ b/krita/sdk/tests/stroke_testing_utils.h
@@ -73,6 +73,7 @@ namespace utils {
QString formatTestName(const QString &baseName, bool cancelled,
bool indirectPainting, bool externalLayer);
QString referenceFile(const QString &testName);
+ QString dumpReferenceFile(const QString &testName);
QString resultFile(const QString &testName);
private:
diff --git a/krita/sdk/tests/testutil.h b/krita/sdk/tests/testutil.h
index 8972192..6440dce 100644
--- a/krita/sdk/tests/testutil.h
+++ b/krita/sdk/tests/testutil.h
@@ -92,7 +92,7 @@ private:
};
-inline bool compareQImages(QPoint & pt, const QImage & image1, const QImage & image2, int fuzzy = 0)
+inline bool compareQImages(QPoint & pt, const QImage & image1, const QImage & image2, int fuzzy = 0, int fuzzyAlpha = 0)
{
// QTime t;
// t.start();
@@ -121,7 +121,7 @@ inline bool compareQImages(QPoint & pt, const QImage & image1, const QImage & im
const bool same = qAbs(qRed(a) - qRed(b)) <= fuzzy
&& qAbs(qGreen(a) - qGreen(b)) <= fuzzy
&& qAbs(qBlue(a) - qBlue(b)) <= fuzzy;
- const bool sameAlpha = qAlpha(a) == qAlpha(b);
+ const bool sameAlpha = qAlpha(a) - qAlpha(b) <= fuzzyAlpha;
const bool bothTransparent = sameAlpha && qAlpha(a)==0;
if (!bothTransparent && (!same || !sameAlpha)) {
diff --git a/krita/ui/tests/kis_selection_manager_test.cpp b/krita/ui/tests/kis_selection_manager_test.cpp
index 465e820..ba1a75d 100644
--- a/krita/ui/tests/kis_selection_manager_test.cpp
+++ b/krita/ui/tests/kis_selection_manager_test.cpp
@@ -82,9 +82,18 @@ public:
QApplication::processEvents();
QTest::qSleep(500);
QApplication::processEvents();
+
delete shell;
delete doc;
delete part;
+
+ /**
+ * The event queue may have up to 200k events
+ * by the time all the tests are finished. Removing
+ * all of them may last forever, so clear them after
+ * every single test is finished
+ */
+ QApplication::removePostedEvents(0);
}
void checkUndo() {
@@ -116,6 +125,10 @@ public:
return checkLayers(image, name);
}
+ bool checkLayersFuzzy(const QString &name) {
+ return checkLayers(image, name, 1);
+ }
+
bool checkSelectionOnly(const QString &name) {
KisNodeSP mask = findNode(image->root(), "selection");
return checkOneLayer(image, mask, name);
@@ -297,7 +310,7 @@ void KisSelectionManagerTest::testCopyPasteMerged()
t.selectionManager->copyMerged();
t.selectionManager->paste();
t.image->waitForDone();
- QVERIFY(t.checkLayers("copy_paste_merged"));
+ QVERIFY(t.checkLayersFuzzy("copy_paste_merged"));
t.checkUndo();
t.startConcurrentTask();
@@ -305,7 +318,7 @@ void KisSelectionManagerTest::testCopyPasteMerged()
t.selectionManager->copyMerged();
t.selectionManager->paste();
t.image->waitForDone();
- QVERIFY(t.checkLayers("copy_paste_merged"));
+ QVERIFY(t.checkLayersFuzzy("copy_paste_merged"));
}
void KisSelectionManagerTest::testCutPaste()
diff --git a/krita/ui/tests/kis_zoom_and_pan_test.cpp b/krita/ui/tests/kis_zoom_and_pan_test.cpp
index d1f47a2..bacef6a 100644
--- a/krita/ui/tests/kis_zoom_and_pan_test.cpp
+++ b/krita/ui/tests/kis_zoom_and_pan_test.cpp
@@ -68,10 +68,19 @@ public:
~ZoomAndPanTester() {
m_image->waitForDone();
+ QApplication::processEvents();
delete m_shell;
delete m_part;
delete m_doc;
+
+ /**
+ * The event queue may have up to 200k events
+ * by the time all the tests are finished. Removing
+ * all of them may last forever, so clear them after
+ * every single test is finished
+ */
+ QApplication::removePostedEvents(0);
}
KisView2* view() {
diff --git a/libs/flake/KoToolManager.cpp b/libs/flake/KoToolManager.cpp
index d91c8d8..4e09a8d 100644
--- a/libs/flake/KoToolManager.cpp
+++ b/libs/flake/KoToolManager.cpp
@@ -792,7 +792,7 @@ void KoToolManager::registerTools(KActionCollection *ac, KoCanvasController *con
}
}
foreach(ToolHelper * th, d->tools) {
- ToolAction* action = new ToolAction(this, th->id(), th->toolTip());
+ ToolAction* action = new ToolAction(this, th->id(), th->toolTip(), ac);
action->setShortcut(th->shortcut());
ac->addAction(th->id(), action);
}
diff --git a/libs/flake/KoToolManager_p.cpp b/libs/flake/KoToolManager_p.cpp
index e282fb5..92e3b4a 100644
--- a/libs/flake/KoToolManager_p.cpp
+++ b/libs/flake/KoToolManager_p.cpp
@@ -106,8 +106,8 @@ void Connector::selectionChanged()
}
// ************ ToolAction **********
-ToolAction::ToolAction(KoToolManager* toolManager, QString id, QString name)
- : KAction(name, toolManager),
+ToolAction::ToolAction(KoToolManager* toolManager, QString id, QString name, QObject *parent)
+ : KAction(name, parent),
m_toolManager(toolManager),
m_toolID(id)
{
diff --git a/libs/flake/KoToolManager_p.h b/libs/flake/KoToolManager_p.h
index 90513bf..171e185 100644
--- a/libs/flake/KoToolManager_p.h
+++ b/libs/flake/KoToolManager_p.h
@@ -168,7 +168,7 @@ class ToolAction : public KAction
{
Q_OBJECT
public:
- ToolAction(KoToolManager* toolManager, QString id, QString name);
+ ToolAction(KoToolManager* toolManager, QString id, QString name, QObject *parent);
virtual ~ToolAction();
private slots:
More information about the kimageshop
mailing list