File indexing completed on 2024-05-26 04:29:21

0001 /*
0002  *  SPDX-License-Identifier: GPL-3.0-or-later
0003  */
0004 
0005 #include "TestKoColorSet.h"
0006 #include <KoColorSet.h>
0007 #include <KisGlobalResourcesInterface.h>
0008 #include <simpletest.h>
0009 #include <KisSwatch.h>
0010 #include <KisSwatchGroup.h>
0011 #include <kundo2stack.h>
0012 #include <KoColorSpaceRegistry.h>
0013 
0014 #ifndef FILES_DATA_DIR
0015 #error "FILES_DATA_DIR not set. A directory with the data used for testing the importing of files in krita"
0016 #endif
0017 
0018 void TestKoColorSet::testLoadGPL()
0019 {
0020     KoColorSet set(QString(FILES_DATA_DIR)+ "/gimp.gpl");
0021     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0022     QCOMPARE(set.paletteType(), KoColorSet::GPL);
0023 
0024     QCOMPARE(set.colorCount(), 17);
0025 
0026     set.setFilename("test.gpl");
0027     QVERIFY(set.save());
0028     QVERIFY(set.filename() == "test.gpl");
0029     QCOMPARE(set.paletteType(), KoColorSet::GPL);
0030 
0031     KoColorSet set2("test.gpl");
0032     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0033     QCOMPARE(set2.paletteType(), KoColorSet::GPL);
0034 
0035 }
0036 void TestKoColorSet::testLoadRIFF()
0037 {
0038 
0039     KoColorSet set(QString(FILES_DATA_DIR)+ "/ms_riff.pal");
0040     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0041     QCOMPARE(set.paletteType(), KoColorSet::RIFF_PAL);
0042 
0043     QCOMPARE(set.colorCount(), 17);
0044 
0045     set.setFilename("test_riff.pal");
0046     QVERIFY(set.save());
0047     QVERIFY(set.filename() == "test_riff.pal");
0048     QCOMPARE(set.paletteType(), KoColorSet::RIFF_PAL);
0049 
0050     KoColorSet set2("test_riff.pal");
0051     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0052     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0053 }
0054 void TestKoColorSet::testLoadACT()
0055 {
0056     KoColorSet set(QString(FILES_DATA_DIR)+ "/photoshop.act");
0057     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0058     QCOMPARE(set.paletteType(), KoColorSet::ACT);
0059     QVERIFY(set.valid());
0060 
0061     QCOMPARE(set.colorCount(), 258);
0062 
0063     QFile("test.act").remove();
0064 
0065     set.setFilename("test.act");
0066     QVERIFY(set.save());
0067 
0068     KoColorSet set2("test.act");
0069     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0070     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0071 }
0072 
0073 void TestKoColorSet::testLoadPSP_PAL()
0074 {
0075     KoColorSet set(QString(FILES_DATA_DIR)+ "/jasc.pal");
0076     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0077     QCOMPARE(set.paletteType(), KoColorSet::PSP_PAL);
0078     QVERIFY(set.valid());
0079 
0080     QCOMPARE(set.colorCount(), 249);
0081 
0082     QFile("test_jasc.pal").remove();
0083 
0084     set.setFilename("test_jasc.pal");
0085     QVERIFY(set.save());
0086 
0087     KoColorSet set2("test_jasc.pal");
0088     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0089     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0090 
0091 
0092 }
0093 void TestKoColorSet::testLoadACO()
0094 {
0095     KoColorSet set(QString(FILES_DATA_DIR)+ "/photoshop.aco");
0096     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0097     QCOMPARE(set.paletteType(), KoColorSet::ACO);
0098     QVERIFY(set.valid());
0099 
0100     QCOMPARE(set.colorCount(), 18);
0101 
0102     QFile("test.aco").remove();
0103 
0104     set.setFilename("test.aco");
0105     QVERIFY(set.save());
0106 
0107     KoColorSet set2("test.aco");
0108     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0109     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0110 }
0111 void TestKoColorSet::testLoadXML()
0112 {
0113     KoColorSet set(QString(FILES_DATA_DIR)+ "/scribus.xml");
0114     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0115     QCOMPARE(set.paletteType(), KoColorSet::XML);
0116     QVERIFY(set.valid());
0117 
0118     QCOMPARE(set.colorCount(), 8);
0119 
0120     QFile("test.xml").remove();
0121 
0122     set.setFilename("test.xml");
0123     QVERIFY(set.save());
0124 
0125     KoColorSet set2("test.xml");
0126     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0127     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0128 }
0129 void TestKoColorSet::testLoadKPL()
0130 {
0131     KoColorSet set(QString(FILES_DATA_DIR)+ "/krita.kpl");
0132     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0133     QCOMPARE(set.paletteType(), KoColorSet::KPL);
0134     QVERIFY(set.valid());
0135 
0136     QCOMPARE(set.colorCount(), 0);
0137 
0138     QFile("test.kpl").remove();
0139 
0140     set.setFilename("test.kpl");
0141     QVERIFY(set.save());
0142     QCOMPARE(set.paletteType(), KoColorSet::KPL);
0143 
0144     KoColorSet set2("test.kpl");
0145     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0146     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0147 
0148 }
0149 
0150 void TestKoColorSet::testLoadSBZ_data()
0151 {
0152     QTest::addColumn<QString>("fileName");
0153     QTest::addColumn<int>("expectedColorCount");
0154     QTest::addColumn<QString>("sampleGroup");
0155     QTest::addColumn<QPoint>("samplePoint");
0156     QTest::addColumn<QString>("expectedColorModel");
0157     QTest::addColumn<QString>("expectedColorDepth");
0158     QTest::addColumn<QString>("expectedName");
0159     QTest::addColumn<QString>("expectedId");
0160     QTest::addColumn<QVector<float>>("expectedResult");
0161 
0162     QTest::newRow("swatchbook.sbz")
0163         << "swatchbook.sbz"
0164         << 5
0165         << "Sample swatch book" << QPoint(1, 0)
0166         << RGBAColorModelID.id()
0167         << Float32BitsColorDepthID.id()
0168         << "Cyan 100%"
0169         << "C10"
0170         << QVector<float>({0,1,1,1});
0171 
0172     QTest::newRow("sample_swatchbook.sbz")
0173         << "sample_swatchbook.sbz"
0174         << 47
0175         << "" << QPoint(5, 1)
0176         << CMYKAColorModelID.id()
0177         << Float32BitsColorDepthID.id()
0178         << "Cyan 90%"
0179         << "C09"
0180         << QVector<float>({90,0,0,0,1.0});
0181 }
0182 
0183 void TestKoColorSet::testLoadSBZ()
0184 {
0185     QFETCH(QString, fileName);
0186     QFETCH(int, expectedColorCount);
0187     QFETCH(QString, sampleGroup);
0188     QFETCH(QPoint, samplePoint);
0189     QFETCH(QString, expectedColorModel);
0190     QFETCH(QString, expectedColorDepth);
0191     QFETCH(QString, expectedName);
0192     QFETCH(QString, expectedId);
0193     QFETCH(QVector<float>, expectedResult);
0194 
0195     KoColorSet set(QString(FILES_DATA_DIR) + QDir::separator() + fileName);
0196     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0197     QCOMPARE(set.paletteType(), KoColorSet::SBZ);
0198 
0199     QCOMPARE(set.colorCount(), expectedColorCount);
0200 
0201 #if 0
0202     qDebug() << set.swatchGroupNames();
0203 
0204     const int numColumns = set.getGroup(sampleGroup)->columnCount();
0205     const int numRows = set.getGroup(sampleGroup)->rowCount();
0206 
0207     for (int row = 0; row < numRows; row++) {
0208         for (int col = 0; col < numColumns; col++) {
0209             KisSwatch s = set.getSwatchFromGroup(col, row, sampleGroup);
0210 
0211             qDebug() << row << col << ppVar(s.name()) << ppVar(s.id()) << ppVar(s.color());
0212         }
0213     }
0214 #endif
0215 
0216     KisSwatch s = set.getSwatchFromGroup(samplePoint.x(), samplePoint.y(), sampleGroup);
0217     QCOMPARE(s.name(), expectedName);
0218     QCOMPARE(s.id(), expectedId);
0219 
0220     KoColor c = s.color();
0221     QCOMPARE(c.colorSpace()->colorModelId().id(), expectedColorModel);
0222     QCOMPARE(c.colorSpace()->colorDepthId().id(), expectedColorDepth);
0223 
0224     const float *ptr = reinterpret_cast<float*>(c.data());
0225     for (int i = 0; i < expectedResult.size(); i++) {
0226         QCOMPARE(ptr[i], expectedResult[i]);
0227     }
0228 
0229     set.setFilename("test.sbz");
0230     QVERIFY(set.save());
0231     QVERIFY(set.filename() == "test.sbz");
0232     QCOMPARE(set.paletteType(), KoColorSet::SBZ);
0233 
0234     KoColorSet set2("test.sbz");
0235     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0236     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0237 }
0238 
0239 void TestKoColorSet::testLoadASE()
0240 {
0241     KoColorSet set(QString(FILES_DATA_DIR) + "/photoshop.ase");
0242     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0243     QCOMPARE(set.paletteType(), KoColorSet::ASE);
0244 
0245     QCOMPARE(set.colorCount(), 249);
0246 
0247     set.setFilename("test.ase");
0248     QVERIFY(set.save());
0249     QVERIFY(set.filename() == "test.ase");
0250     QCOMPARE(set.paletteType(), KoColorSet::ASE);
0251 
0252     KoColorSet set2("test.ase");
0253     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0254     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0255 }
0256 
0257 void TestKoColorSet::testLoadACB()
0258 {
0259     KoColorSet set(QString(FILES_DATA_DIR) + "/photoshop.acb");
0260     QVERIFY(set.load(KisGlobalResourcesInterface::instance()));
0261     QCOMPARE(set.paletteType(), KoColorSet::ACB);
0262 
0263     QCOMPARE(set.colorCount(), 17);
0264 
0265     set.setFilename("test.acb");
0266     QVERIFY(set.save());
0267     QVERIFY(set.filename() == "test.acb");
0268     QCOMPARE(set.paletteType(), KoColorSet::ACB);
0269 
0270     KoColorSet set2("test.acb");
0271     QVERIFY(set2.load(KisGlobalResourcesInterface::instance()));
0272     QCOMPARE(set2.paletteType(), KoColorSet::KPL);
0273 }
0274 
0275 void TestKoColorSet::TestKoColorSet::testLock()
0276 {
0277     KoColorSetSP cs = createColorSet();
0278     QVERIFY(!cs->isLocked());
0279     QVERIFY(!cs->isDirty());
0280     cs->setLocked(true);
0281     QVERIFY(!cs->isDirty());
0282     QVERIFY(cs->isLocked());
0283     QVERIFY(cs->getGlobalGroup()->colorCount() == 0);
0284     cs->addSwatch(KisSwatch(red(), "red"));
0285     QVERIFY(cs->getGlobalGroup()->colorCount() == 0);
0286     QVERIFY(!cs->isDirty());
0287     cs->setLocked(false);
0288     cs->addSwatch(KisSwatch(red(), "red"));
0289     QVERIFY(cs->getGlobalGroup()->colorCount() == 1);
0290     QVERIFY(cs->isDirty());
0291 }
0292 
0293 void TestKoColorSet::testColumnCount()
0294 {
0295     KoColorSetSP cs = createColorSet();
0296     QVERIFY(cs->columnCount() == KisSwatchGroup::DEFAULT_COLUMN_COUNT);
0297     cs->setColumnCount(200);
0298     QVERIFY(cs->columnCount() == 200);
0299     QVERIFY(cs->isDirty());
0300     cs->undoStack()->undo();
0301     QVERIFY(cs->columnCount() == KisSwatchGroup::DEFAULT_COLUMN_COUNT);
0302     QVERIFY(!cs->isDirty());
0303     cs->undoStack()->redo();
0304     QVERIFY(cs->columnCount() == 200);
0305     QVERIFY(cs->isDirty());
0306 }
0307 
0308 void TestKoColorSet::testComment()
0309 {
0310     KoColorSetSP cs = createColorSet();
0311     QVERIFY(cs->comment().isEmpty());
0312     cs->setComment("dummy");
0313     QVERIFY(cs->comment() == "dummy");
0314     QVERIFY(cs->isDirty());
0315     cs->undoStack()->undo();
0316     QVERIFY(cs->comment().isEmpty());
0317     QVERIFY(!cs->isDirty());
0318     cs->undoStack()->redo();
0319     QVERIFY(cs->comment() == "dummy");
0320     QVERIFY(cs->isDirty());
0321 }
0322 
0323 void TestKoColorSet::testPaletteType()
0324 {
0325     KoColorSetSP cs = createColorSet();
0326     QVERIFY(cs->paletteType() == KoColorSet::KPL);
0327     QCOMPARE(QFileInfo(cs->filename()).suffix().toLower(), "kpl");
0328 
0329     cs->setPaletteType(KoColorSet::GPL);
0330     QVERIFY(cs->paletteType() == KoColorSet::GPL);
0331     QCOMPARE(QFileInfo(cs->filename()).suffix().toLower(), "gpl");
0332     QVERIFY(cs->isDirty());
0333 
0334     cs->undoStack()->undo();
0335     QVERIFY(cs->paletteType() == KoColorSet::KPL);
0336     QCOMPARE(QFileInfo(cs->filename()).suffix().toLower(), "kpl");
0337     QVERIFY(!cs->isDirty());
0338 
0339     cs->undoStack()->redo();
0340     QVERIFY(cs->paletteType() == KoColorSet::GPL);
0341     QCOMPARE(QFileInfo(cs->filename()).suffix().toLower(), "gpl");
0342     QVERIFY(cs->isDirty());
0343 }
0344 
0345 void TestKoColorSet::testAddSwatch()
0346 {
0347     KoColorSetSP cs = createColorSet();
0348     cs->addSwatch(KisSwatch(red(), "red"));
0349     QVERIFY(cs->getGlobalGroup()->colorCount() == 1);
0350     QVERIFY(cs->isDirty());
0351 
0352     cs->undoStack()->undo();
0353     QVERIFY(cs->getGlobalGroup()->colorCount() == 0);
0354     QVERIFY(!cs->isDirty());
0355 
0356     cs->undoStack()->redo();
0357     QVERIFY(cs->getGlobalGroup()->colorCount() == 1);
0358     QVERIFY(cs->isDirty());
0359 }
0360 
0361 void TestKoColorSet::testRemoveSwatch()
0362 {
0363     KoColorSetSP cs = createColorSet();
0364     cs->addSwatch(KisSwatch(red()), KoColorSet::GLOBAL_GROUP_NAME, 5, 5);
0365     KisSwatch sw = cs->getSwatchFromGroup(5, 5, KoColorSet::GLOBAL_GROUP_NAME);
0366     QVERIFY(sw.isValid());
0367     QColor c = sw.color().toQColor();
0368     QVERIFY(c == QColor(Qt::red));
0369 
0370     KisSwatchGroupSP group = cs->getGlobalGroup();
0371     QVERIFY(group);
0372 
0373     cs->removeSwatch(5, 5, group);
0374     QVERIFY(cs->isDirty());
0375     sw = cs->getSwatchFromGroup(5, 5, KoColorSet::GLOBAL_GROUP_NAME);
0376     QVERIFY(!sw.isValid());
0377 
0378     cs->undoStack()->undo();
0379     sw = cs->getSwatchFromGroup(5, 5, KoColorSet::GLOBAL_GROUP_NAME);
0380     QVERIFY(sw.isValid());
0381     c = sw.color().toQColor();
0382     QVERIFY(c == QColor(Qt::red));
0383 
0384     QVERIFY(cs->isDirty());
0385 
0386     // Undo the initial addSwatch
0387     cs->undoStack()->undo();
0388     QVERIFY(!cs->isDirty());
0389 }
0390 
0391 void TestKoColorSet::testAddGroup()
0392 {
0393     KoColorSetSP cs = createColorSet();
0394     cs->addGroup("newgroup");
0395     QVERIFY(cs->swatchGroupNames().size() == 2);
0396     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0397     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0398     QVERIFY(cs->isDirty());
0399 
0400     cs->undoStack()->undo();
0401     QVERIFY(cs->swatchGroupNames().size() == 1);
0402     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0403     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0404     QVERIFY(!cs->isDirty());
0405 
0406     cs->undoStack()->redo();
0407     QVERIFY(cs->swatchGroupNames().size() == 2);
0408     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0409     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0410     QVERIFY(cs->isDirty());
0411 
0412     cs->addGroup("newgroup2");
0413 
0414     QCOMPARE(cs->getGroup(11)->name(), "");
0415     QCOMPARE(cs->getGroup(21)->name(), "newgroup");
0416     QCOMPARE(cs->getGroup(50)->name(), "newgroup2");
0417 
0418 }
0419 
0420 
0421 void TestKoColorSet::testChangeGroupName()
0422 {
0423     KoColorSetSP cs = createColorSet();
0424     cs->addGroup("newgroup");
0425     QVERIFY(cs->swatchGroupNames().size() == 2);
0426     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0427     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0428     QVERIFY(cs->isDirty());
0429 
0430     cs->changeGroupName("newgroup", "newnewgroup");
0431     QVERIFY(cs->swatchGroupNames().size() == 2);
0432     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0433     QVERIFY(cs->swatchGroupNames().contains("newnewgroup"));
0434     QVERIFY(cs->isDirty());
0435 
0436     cs->undoStack()->undo();
0437     QVERIFY(cs->swatchGroupNames().size() == 2);
0438     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0439     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0440     QVERIFY(cs->isDirty());
0441 
0442     cs->undoStack()->redo();
0443     QVERIFY(cs->swatchGroupNames().size() == 2);
0444     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0445     QVERIFY(cs->swatchGroupNames().contains("newnewgroup"));
0446     QVERIFY(cs->isDirty());
0447 
0448     cs->undoStack()->undo();
0449     cs->undoStack()->undo();
0450 
0451     QVERIFY(cs->swatchGroupNames().size() == 1);
0452     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0453     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0454     QVERIFY(!cs->isDirty());
0455 }
0456 
0457 
0458 void TestKoColorSet::testMoveGroup()
0459 {
0460     KoColorSetSP cs = createColorSet();
0461     cs->addGroup("group1");
0462     cs->addGroup("group2");
0463     cs->addGroup("group3");
0464     cs->addGroup("group4");
0465 
0466     QStringList original({"", "group1", "group2", "group3", "group4"});
0467     QCOMPARE(cs->swatchGroupNames(), original);
0468 
0469     cs->moveGroup("group3", "group2");
0470 
0471     QStringList move3({"", "group1", "group3", "group2", "group4"});
0472     QCOMPARE(cs->swatchGroupNames(), move3);
0473 
0474     cs->undoStack()->undo();
0475     QCOMPARE(cs->swatchGroupNames(), original);
0476 
0477     cs->undoStack()->redo();
0478     QCOMPARE(cs->swatchGroupNames(), move3);
0479 }
0480 
0481 void TestKoColorSet::testRemoveGroup()
0482 {
0483     KoColorSetSP cs = createColorSet();
0484 
0485     // Discard Colors
0486 
0487     cs->addGroup("newgroup");
0488     QVERIFY(cs->swatchGroupNames().size() == 2);
0489     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0490     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0491     QVERIFY(cs->isDirty());
0492 
0493     cs->removeGroup("newgroup", false);
0494     QVERIFY(cs->swatchGroupNames().size() == 1);
0495     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0496     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0497     QVERIFY(cs->isDirty());
0498 
0499     cs->undoStack()->undo();
0500     QVERIFY(cs->swatchGroupNames().size() == 2);
0501     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0502     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0503     QVERIFY(cs->isDirty());
0504 
0505     cs->undoStack()->redo();
0506     QVERIFY(cs->swatchGroupNames().size() == 1);
0507     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0508     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0509     QVERIFY(cs->isDirty());
0510 
0511     cs->undoStack()->undo();
0512     cs->undoStack()->undo();
0513 
0514     QVERIFY(cs->swatchGroupNames().size() == 1);
0515     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0516     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0517     QVERIFY(!cs->isDirty());
0518 
0519     // Keep Colors
0520 
0521     cs->clear();
0522     cs->addGroup("newgroup");
0523     cs->addSwatch(KisSwatch(red()), "newgroup", 5, 5);
0524 
0525     QCOMPARE(cs->swatchGroupNames().size(), 2);
0526     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0527     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0528     QCOMPARE(cs->colorCount(), 1);
0529     QVERIFY(cs->isDirty());
0530 
0531     cs->removeGroup("newgroup", true);
0532     QCOMPARE(cs->swatchGroupNames().size(), 1);
0533     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0534     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0535     QCOMPARE(cs->colorCount(), 1);
0536     QVERIFY(cs->isDirty());
0537 
0538     cs->undoStack()->undo();
0539     QCOMPARE(cs->swatchGroupNames().size(), 2);
0540     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0541     QVERIFY(cs->swatchGroupNames().contains("newgroup"));
0542     QCOMPARE(cs->colorCount(), 2);
0543     QVERIFY(cs->isDirty());
0544 
0545     cs->undoStack()->redo();
0546     QCOMPARE(cs->swatchGroupNames().size(), 1);
0547     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0548     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0549     QCOMPARE(cs->colorCount(), 1);
0550     QVERIFY(cs->isDirty());
0551 
0552     cs->undoStack()->undo();
0553     cs->undoStack()->undo();
0554     cs->undoStack()->undo();
0555 
0556     QCOMPARE(cs->swatchGroupNames().size(), 1);
0557     QVERIFY(cs->swatchGroupNames().contains(KoColorSet::GLOBAL_GROUP_NAME));
0558     QVERIFY(!cs->swatchGroupNames().contains("newgroup"));
0559     QVERIFY(cs->isDirty());
0560 
0561     QCOMPARE(cs->colorCount(), 1);
0562 
0563     cs->undoStack()->undo();
0564     QCOMPARE(cs->colorCount(), 0);
0565     QVERIFY(!cs->isDirty());
0566 }
0567 
0568 void TestKoColorSet::testClear()
0569 {
0570     KoColorSetSP cs = createColorSet();
0571     cs->addGroup("newgroup");
0572     cs->addSwatch(KisSwatch(red()), "newgroup", 5, 5);
0573     cs->addSwatch(KisSwatch(blue()), KoColorSet::GLOBAL_GROUP_NAME, 1, 1);
0574 
0575     QVERIFY(cs->colorCount() == 2);
0576 
0577     cs->clear();
0578     QVERIFY(cs->colorCount() == 0);
0579     QVERIFY(cs->swatchGroupNames().size() == 1);
0580 
0581     cs->undoStack()->undo();
0582     QVERIFY(cs->colorCount() == 2);
0583     QVERIFY(cs->swatchGroupNames().size() == 2);
0584 
0585     cs->undoStack()->redo();
0586     QVERIFY(cs->colorCount() == 0);
0587     QVERIFY(cs->swatchGroupNames().size() == 1);
0588 }
0589 
0590 void TestKoColorSet::testGetSwatchFromGroup()
0591 {
0592     KoColorSetSP cs = createColorSet();
0593     cs->addGroup("newgroup");
0594     cs->addSwatch(KisSwatch(red()), "newgroup", 5, 5);
0595     cs->addSwatch(blue(), KoColorSet::GLOBAL_GROUP_NAME, 1, 1);
0596 
0597     KisSwatch sw = cs->getSwatchFromGroup(5, 5, "newgroup");
0598     QVERIFY(sw.isValid());
0599     QColor c = sw.color().toQColor();
0600     QVERIFY(c == QColor(Qt::red));
0601 
0602     sw = cs->getSwatchFromGroup(1, 1, KoColorSet::GLOBAL_GROUP_NAME);
0603     QVERIFY(sw.isValid());
0604     c = sw.color().toQColor();
0605     QVERIFY(c == QColor(Qt::blue));
0606 
0607     sw = cs->getSwatchFromGroup(1, 1, "newgroup");
0608     QVERIFY(!sw.isValid());
0609 }
0610 
0611 void TestKoColorSet::testIsGroupNameRow()
0612 {
0613     KoColorSetSP cs = createColorSet();
0614     cs->getGlobalGroup()->setRowCount(7);
0615     cs->addGroup("group1", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 6);
0616     cs->addGroup("group2", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 5);
0617 
0618     for (int i = 0; i < cs->rowCountWithTitles(); ++i) {
0619         if (i == 7 || i == 14) {
0620             QVERIFY(cs->isGroupTitleRow(i));
0621         }
0622         else {
0623             QVERIFY(!cs->isGroupTitleRow(i));
0624         }
0625     }
0626 }
0627 
0628 void TestKoColorSet::testStartRowForNamedGroup()
0629 {
0630     KoColorSetSP cs = createColorSet();
0631     cs->getGlobalGroup()->setRowCount(7);
0632     cs->addGroup("group1", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 6);
0633     cs->addGroup("group2", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 5);
0634     cs->addGroup("group3", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 4);
0635 
0636     QCOMPARE(cs->rowCountWithTitles(), 25);
0637 
0638 
0639     QCOMPARE(cs->startRowForGroup(""), 0);
0640     QCOMPARE(cs->startRowForGroup("group1"), 7);
0641     QCOMPARE(cs->startRowForGroup("group2"), 14);
0642     QCOMPARE(cs->startRowForGroup("group3"), 20);
0643 }
0644 
0645 void TestKoColorSet::testGetClosestSwatchInfo()
0646 {
0647     KoColorSetSP cs = createColorSet();
0648     cs->addSwatch(red(), "", 10, 5);
0649     QColor c;
0650     c.setRgb(255,10,10);
0651     KoColor  kc(c, KoColorSpaceRegistry::instance()->rgb8());
0652     KisSwatchGroup::SwatchInfo info = cs->getClosestSwatchInfo(kc);
0653     QCOMPARE(info.row, 5);
0654     QCOMPARE(info.column, 10);
0655     QCOMPARE(info.swatch.color().toQColor(), red().toQColor());
0656 }
0657 
0658 void TestKoColorSet::testGetGroup()
0659 {
0660     KoColorSetSP cs = createColorSet();
0661     cs->getGlobalGroup()->setRowCount(7);
0662     cs->addGroup("group1", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 6);
0663     cs->addGroup("group2", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 5);
0664 
0665     QCOMPARE(cs->rowCount(), 18);
0666     QCOMPARE(cs->rowCountWithTitles(), 20);
0667     QVERIFY(cs->getGroup("group1"));
0668     QVERIFY(cs->getGroup("group2"));
0669 
0670     KisSwatchGroupSP grp = cs->getGroup(0);
0671     QVERIFY(grp);
0672     QVERIFY(grp->name().isEmpty());
0673 
0674     grp = cs->getGroup(7); // titlerow
0675     QVERIFY(grp);
0676     QCOMPARE(grp->name(), "group1");
0677 
0678     grp = cs->getGroup(8);
0679     QVERIFY(grp);
0680     QCOMPARE(grp->name(), "group1");
0681 
0682     grp = cs->getGroup(13); // last row
0683     QVERIFY(grp);
0684     QCOMPARE(grp->name(), "group1");
0685 
0686     grp = cs->getGroup(14); // titlerow
0687     QVERIFY(grp);
0688     QCOMPARE(grp->name(), "group2");
0689 
0690     grp = cs->getGroup(17);
0691     QVERIFY(grp);
0692     QCOMPARE(grp->name(), "group2");
0693 
0694     grp = cs->getGroup(19);
0695     QVERIFY(grp);
0696     QCOMPARE(grp->name(), "group2");
0697 
0698     grp = cs->getGroup(40);
0699     QVERIFY(grp.isNull());
0700 
0701 }
0702 
0703 void TestKoColorSet::testAllRows()
0704 {
0705     KoColorSetSP cs = createColorSet();
0706     cs->getGlobalGroup()->setRowCount(7);
0707     cs->addGroup("group1", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 6);
0708     cs->addGroup("group2", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 5);
0709 
0710     QCOMPARE(cs->rowCountWithTitles(), 20);
0711     QVERIFY(cs->isGroupTitleRow(7));
0712     QVERIFY(cs->isGroupTitleRow(14));
0713 
0714     for (int i = 0; i < 21; ++i) {
0715         KisSwatchGroupSP grp = cs->getGroup(i);
0716 
0717         if (i < 7) {
0718             QVERIFY(grp->name().isEmpty());
0719         }
0720         else if (i > 6 && i < 14) {
0721             QCOMPARE(grp->name(), "group1");
0722         }
0723         else if (i > 13 && i < 20) {
0724             QCOMPARE(grp->name(), "group2");
0725         }
0726         else if (i > 19) {
0727             QVERIFY(grp.isNull());
0728         }
0729     }
0730 
0731 }
0732 
0733 void TestKoColorSet::testRowNumberInGroup()
0734 {
0735     KoColorSetSP cs = createColorSet();
0736     cs->getGlobalGroup()->setRowCount(7);
0737     cs->addGroup("group1", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 6);
0738     cs->addGroup("group2", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 5);
0739     cs->addGroup("group3", KisSwatchGroup::DEFAULT_COLUMN_COUNT, 4);
0740 
0741     QCOMPARE(cs->rowCountWithTitles(), 25);
0742 
0743     QVector<int> rowCountsInGroup {    0, 1, 2, 3, 4, 5, 6,
0744                                    -1, 0, 1, 2, 3, 4, 5,
0745                                    -1, 0, 1, 2, 3, 4,
0746                                    -1, 0, 1, 2, 3};
0747 
0748 
0749     QCOMPARE(cs->rowCountWithTitles(), rowCountsInGroup.size());
0750 
0751     for (int i = 0; i < cs->rowCountWithTitles(); ++i) {
0752         QCOMPARE(cs->rowNumberInGroup(i), rowCountsInGroup[i]);
0753     }
0754 }
0755 
0756 void TestKoColorSet::testGetColorGlobal()
0757 {
0758     KoColorSetSP cs = createColorSet();
0759     cs->getGlobalGroup()->setRowCount(7);
0760     cs->setColumnCount(3);
0761     cs->addGroup("group1", 3, 6);
0762     cs->addGroup("group2", 3, 5);
0763     cs->addGroup("group3", 3, 4);
0764 
0765     KisSwatch sw(red(), "red");
0766 
0767     Q_FOREACH(const QString &groupName, cs->swatchGroupNames()) {
0768         KisSwatchGroupSP group = cs->getGroup(groupName);
0769         //qDebug() << group->name();
0770         for (int row = 0; row < group->rowCount(); row++) {
0771             for (int col = 0; col < group->columnCount(); col++) {
0772                 QColor c(row, col, 0);
0773                 sw.setColor(KoColor(c, KoColorSpaceRegistry::instance()->rgb8()));
0774                 //qDebug() << "rgb" << c.red() << c.green() << c.blue() << "row/col" << row << "," << col;
0775                 cs->addSwatch(sw, groupName, col, row);
0776             }
0777         }
0778     }
0779 
0780 
0781     //qDebug() << "==================";
0782 
0783     for (int row = 0; row < cs->rowCountWithTitles(); row++) {
0784         if (row == 7 || row == 14 || row == 20) {
0785             QVERIFY(cs->isGroupTitleRow(row));
0786             //qDebug() << cs->getGroup(row)->name();
0787         }
0788 
0789         for (int col = 0; col < cs->columnCount(); col++) {
0790             if (row != 7 && row != 14 && row != 20) {
0791                 QVERIFY(!cs->isGroupTitleRow(row));
0792                 KisSwatch sw2 = cs->getColorGlobal(col, row);
0793                 QColor c = sw2.color().toQColor();
0794                 //qDebug() << "rgb" << c.red() << c.green() << c.blue() << "row/col" << cs->rowNumberInGroup(row) << "," << col;
0795                 QCOMPARE(c.red(), cs->rowNumberInGroup(row));
0796                 QCOMPARE(c.green(), col);
0797             }
0798         }
0799     }
0800 
0801 }
0802 
0803 KoColorSetSP TestKoColorSet::createColorSet()
0804 {
0805     KoColorSetSP colorSet(new KoColorSet());
0806     colorSet->setPaletteType(KoColorSet::KPL);
0807     colorSet->setName("Dummy");
0808     colorSet->setFilename("dummy.kpl");
0809     colorSet->setModified(false);
0810     colorSet->undoStack()->clear();
0811     return colorSet;
0812 }
0813 
0814 KoColor TestKoColorSet::blue()
0815 {
0816     QColor c(Qt::blue);
0817     KoColor  kc(c, KoColorSpaceRegistry::instance()->rgb8());
0818     return kc;
0819 }
0820 
0821 KoColor TestKoColorSet::red()
0822 {
0823     QColor c(Qt::red);
0824     KoColor  kc(c, KoColorSpaceRegistry::instance()->rgb8());
0825     return kc;
0826 }
0827 
0828 
0829 SIMPLE_TEST_MAIN(TestKoColorSet)
0830