File indexing completed on 2025-02-23 04:11:56

0001 /*
0002  * This file is part of Krita
0003  *
0004  * SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include <KisGlobalResourcesInterface.h>
0010 #include <KisImageResolutionProxy.h>
0011 #include <KoColorSpace.h>
0012 #include <KoColorSpaceRegistry.h>
0013 #include <KoProgressUpdater.h>
0014 #include <KoUpdater.h>
0015 #include <generator/kis_generator_registry.h>
0016 #include <kis_default_bounds.h>
0017 #include <kis_fill_painter.h>
0018 #include <kis_filter_configuration.h>
0019 #include <kis_processing_information.h>
0020 #include <kis_selection.h>
0021 #include <resources/KisSeExprScript.h>
0022 #include <simpletest.h>
0023 #include <testimage.h>
0024 #include <testutil.h>
0025 
0026 
0027 #include "kis_seexpr_generator_test.h"
0028 
0029 #define BASE_SCRIPT                                                                                                                                                                                                                            \
0030     "$val=voronoi(5*[$u,$v,.5],4,.6,.2); \n \
0031 $color=ccurve($val,\n\
0032     0.000, [0.141, 0.059, 0.051], 4,\n\
0033     0.185, [0.302, 0.176, 0.122], 4,\n\
0034     0.301, [0.651, 0.447, 0.165], 4,\n\
0035     0.462, [0.976, 0.976, 0.976], 4);\n\
0036 $color\n\
0037 "
0038 
0039 void KisSeExprGeneratorTest::initTestCase()
0040 {
0041     KisGeneratorRegistry::instance();
0042 }
0043 
0044 void KisSeExprGeneratorTest::testGenerationFromScript()
0045 {
0046     KisGeneratorSP generator = KisGeneratorRegistry::instance()->get("seexpr");
0047     QVERIFY(generator);
0048 
0049     KisFilterConfigurationSP config = generator->defaultConfiguration(KisGlobalResourcesInterface::instance());
0050     QVERIFY(config);
0051 
0052     config->setProperty("script", BASE_SCRIPT);
0053 
0054     QPoint point(0, 0);
0055     QSize testSize(256, 256);
0056 
0057     KisDefaultBoundsBaseSP bounds(new KisWrapAroundBoundsWrapper(new KisDefaultBounds(), QRect(point.x(), point.y(), testSize.width(), testSize.height())));
0058     const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8();
0059     KisPaintDeviceSP dev = new KisPaintDevice(cs);
0060     dev->setDefaultBounds(bounds);
0061     dev->setSupportsWraparoundMode(true);
0062 
0063     KisFillPainter fillPainter(dev);
0064     fillPainter.fillRect(point.x(), point.y(), 256, 256, config);
0065 
0066     QImage qimage(QString(FILES_DATA_DIR) + QDir::separator() + "noisecolor2.png");
0067 
0068     QPoint errpoint;
0069     if (!TestUtil::compareQImages(errpoint, qimage, dev->convertToQImage(nullptr, point.x(), point.y(), testSize.width(), testSize.height()), 1)) {
0070         dev->convertToQImage(nullptr, point.x(), point.y(), testSize.width(), testSize.height()).save("filtertest.png");
0071         QFAIL(QString("Failed to create image, first different pixel: %1,%2 ").arg(errpoint.x()).arg(errpoint.y()).toLatin1());
0072     }
0073 }
0074 
0075 void KisSeExprGeneratorTest::testGenerationFromKoResource()
0076 {
0077     KisGeneratorSP generator = KisGeneratorRegistry::instance()->get("seexpr");
0078     QVERIFY(generator);
0079 
0080     KisFilterConfigurationSP config = generator->defaultConfiguration(KisGlobalResourcesInterface::instance());
0081     QVERIFY(config);
0082 
0083     auto resource = new KisSeExprScript(TestUtil::fetchDataFileLazy("Disney_noisecolor2.kse"));
0084     resource->load(KisGlobalResourcesInterface::instance());
0085     Q_ASSERT(resource->valid());
0086 
0087     config->setProperty("script", resource->script());
0088 
0089     QPoint point(0, 0);
0090     QSize testSize(256, 256);
0091 
0092     KisDefaultBoundsBaseSP bounds(new KisWrapAroundBoundsWrapper(new KisDefaultBounds(), QRect(point.x(), point.y(), testSize.width(), testSize.height())));
0093     const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8();
0094     KisPaintDeviceSP dev = new KisPaintDevice(cs);
0095     dev->setDefaultBounds(bounds);
0096     dev->setSupportsWraparoundMode(true);
0097 
0098     KisFillPainter fillPainter(dev);
0099     fillPainter.fillRect(point.x(), point.y(), 256, 256, config);
0100 
0101     QImage qimage(QString(FILES_DATA_DIR) + QDir::separator() + "noisecolor2.png");
0102 
0103     QPoint errpoint;
0104     if (!TestUtil::compareQImages(errpoint, qimage, dev->convertToQImage(nullptr, point.x(), point.y(), testSize.width(), testSize.height()), 1)) {
0105         dev->convertToQImage(nullptr, point.x(), point.y(), testSize.width(), testSize.height()).save("filtertest.png");
0106         QFAIL(QString("Failed to create image, first different pixel: %1,%2 ").arg(errpoint.x()).arg(errpoint.y()).toLatin1());
0107     }
0108 }
0109 
0110 KISTEST_MAIN(KisSeExprGeneratorTest)