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