Warning, file /graphics/krita/sdk/tests/ui_manager_test.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  *  SPDX-FileCopyrightText: 2012 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __UI_MANAGER_TEST_H
0008 #define __UI_MANAGER_TEST_H
0009 
0010 #include <testutil.h>
0011 #include "qimage_based_test.h"
0012 #include "ksharedconfig.h"
0013 #include <kis_filter_configuration.h>
0014 #include <resources/KoPattern.h>
0015 #include "KisResourceServerProvider.h"
0016 #include "kis_canvas_resource_provider.h"
0017 #include "kis_filter_strategy.h"
0018 #include "kis_selection_manager.h"
0019 #include "kis_node_manager.h"
0020 #include "KisViewManager.h"
0021 #include "KisView.h"
0022 #include "KisPart.h"
0023 #include <KisDocument.h>
0024 #include <kis_action_manager.h>
0025 #include "KisMainWindow.h"
0026 #include "kis_selection_mask.h"
0027 #include <KisGlobalResourcesInterface.h>
0028 
0029 namespace TestUtil
0030 {
0031 
0032 class UiManagerTest : public TestUtil::QImageBasedTest
0033 {
0034 public:
0035     UiManagerTest(bool useSelection, bool useShapeLayer, const QString &testName)
0036         : QImageBasedTest(testName) // "selection_manager_test"
0037     {
0038         undoStore = new KisSurrogateUndoStore();
0039         image = createImage(undoStore);
0040 
0041         part = KisPart::instance();
0042         doc = qobject_cast<KisDocument*>(part->createDocument());
0043         doc->setCurrentImage(image);
0044 
0045         if(useSelection) addGlobalSelection(image);
0046         if(useShapeLayer) addShapeLayer(doc, image);
0047         image->initialRefreshGraph();
0048 
0049         mainWindow = new KisMainWindow();
0050         imageView = new KisView(doc, mainWindow->viewManager(), mainWindow);
0051         view = new KisViewManager(mainWindow, mainWindow->actionCollection());
0052 
0053         KoPatternSP newPattern(new KoPattern(fetchDataFileLazy("HR_SketchPaper_01.pat")));
0054         newPattern->load(KisGlobalResourcesInterface::instance());
0055         Q_ASSERT(newPattern->valid());
0056         view->canvasResourceProvider()->slotPatternActivated(newPattern);
0057 
0058         KoColor fgColor(Qt::black, image->colorSpace());
0059         KoColor bgColor(Qt::white, image->colorSpace());
0060         view->canvasResourceProvider()->blockSignals(true);
0061         view->canvasResourceProvider()->setBGColor(bgColor);
0062         view->canvasResourceProvider()->setFGColor(fgColor);
0063         view->canvasResourceProvider()->setOpacity(1.0);
0064 
0065         KisNodeSP paint1 = findNode(image->root(), "paint1");
0066         Q_ASSERT(paint1);
0067 
0068         imageView->setViewManager(view);
0069         view->setCurrentView(imageView);
0070 
0071         view->nodeManager()->slotUiActivatedNode(paint1);
0072 
0073         selectionManager = view->selectionManager();
0074         Q_ASSERT(selectionManager);
0075         actionManager = view->actionManager();
0076         Q_ASSERT(actionManager);
0077 
0078         QVERIFY(checkLayersInitial());
0079 
0080     }
0081 
0082     ~UiManagerTest() {
0083         /**
0084          * Here is a weird way of precessing pending events.
0085          * This is needed for the dummies facade could process
0086          * all the queued events telling it some nodes were
0087          * added/deleted
0088          */
0089         QApplication::processEvents();
0090         QTest::qSleep(500);
0091         QApplication::processEvents();
0092 
0093         delete mainWindow;
0094         delete doc;
0095 
0096         /**
0097          * The event queue may have up to 200k events
0098          * by the time all the tests are finished. Removing
0099          * all of them may last forever, so clear them after
0100          * every single test is finished
0101          */
0102         QApplication::removePostedEvents(0);
0103     }
0104 
0105     void checkUndo() {
0106         undoStore->undo();
0107         image->waitForDone();
0108         QVERIFY(checkLayersInitial());
0109     }
0110 
0111     void checkDoubleUndo() {
0112         undoStore->undo();
0113         undoStore->undo();
0114         image->waitForDone();
0115         QVERIFY(checkLayersInitial());
0116     }
0117 
0118     void startConcurrentTask() {
0119         KisFilterStrategy * filter = new KisBoxFilterStrategy();
0120         QSize initialSize = image->size();
0121 
0122         image->scaleImage(2 * initialSize, image->xRes(), image->yRes(), filter);
0123         image->waitForDone();
0124 
0125         image->scaleImage(initialSize, image->xRes(), image->yRes(), filter);
0126     }
0127 
0128     using QImageBasedTest::checkLayers;
0129 
0130     bool checkLayers(const QString &name) {
0131         return checkLayers(image, name);
0132     }
0133 
0134     using QImageBasedTest::checkLayersInitial;
0135 
0136     bool checkLayersInitial() {
0137         return checkLayersInitial(image);
0138     }
0139 
0140     bool checkLayersFuzzy(const QString &name) {
0141         return checkLayers(image, name, 1);
0142     }
0143 
0144     bool checkSelectionOnly(const QString &name) {
0145         KisNodeSP mask = dynamic_cast<const KisLayer*>(image->root().data())->selectionMask();
0146         return checkOneLayer(image, mask, name);
0147     }
0148 
0149     bool checkNoSelection() {
0150         KisNodeSP mask = dynamic_cast<const KisLayer*>(image->root().data())->selectionMask();
0151         return !mask && !image->globalSelection();
0152     }
0153 
0154     KisImageSP image;
0155     KisSelectionManager *selectionManager;
0156     KisActionManager *actionManager;
0157     KisSurrogateUndoStore *undoStore;
0158 
0159 protected:
0160     KisView *imageView;
0161     KisViewManager *view;
0162     KisDocument *doc;
0163     KisPart *part;
0164     KisMainWindow *mainWindow;
0165 };
0166 
0167 }
0168 
0169 #endif /* __UI_MANAGER_TEST_H */