void ut_load::testTransparency() { QTemporaryFile testFile; testFile.open(); QImage image = Unittests::generatePaletteImage(); image = image.convertToFormat(QImage::Format_ARGB32); image.setPixel(QPoint(0, 0), qRgba(255, 0, 0, 0)); image.setPixel(QPoint(0, 1), qRgba(255, 0, 0, 127)); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); filter->setOption(QuillImageFilter::FileName, testFile.fileName()); filter->setOption(QuillImageFilter::FileFormat, QString("png")); filter->setOption(QuillImageFilter::BackgroundColor, QColor(qRgb(0, 0, 255))); QuillImage imageAfter = filter->apply(image); QCOMPARE(imageAfter.pixel(QPoint(0, 0)), qRgb(0, 0, 255)); QCOMPARE(imageAfter.pixel(QPoint(0, 1)), qRgb(127, 0, 128)); delete filter; }
void ut_load::testQImage() { QFile file("/usr/share/quillimagefilter-tests/images/16_color_palette.png"); QuillImageFilter *filter = new QuillImageFilter("com.meego.load"); QVERIFY(filter); QCOMPARE(filter->name(), QString("com.meego.load")); QVERIFY(filter->supportsOption(QuillImageFilter::FileName)); QVERIFY(filter->supportsOption(QuillImageFilter::FileFormat)); QVERIFY(filter->supportsOption(QuillImageFilter::DisableUndo)); QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter)); filter->setOption(QuillImageFilter::FileName, QVariant(file.fileName())); filter->setOption(QuillImageFilter::MimeType, QVariant("image/png")); QCOMPARE(filter->option(QuillImageFilter::FileName).toString(), file.fileName()); QCOMPARE(filter->option(QuillImageFilter::MimeType).toString(), QString("image/png")); QCOMPARE(filter->option(QuillImageFilter::FileFormat).toString(), QString("png")); QImage image(file.fileName()); QImage loadedImage = filter->apply(image); QVERIFY(Unittests::compareImage(loadedImage, QuillImage(image))); delete filter; }
void ut_load::testFileNotFound() { QFile fooFile("/usr/share/quillimagefilter-tests/images/fooxxx.png"); QVERIFY(!fooFile.exists()); QImage fooImage(fooFile.fileName()); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QVERIFY(filter); QCOMPARE(filter->name(), QString("com.meego.load")); QVERIFY(filter->supportsOption(QuillImageFilter::FileName)); QVERIFY(filter->supportsOption(QuillImageFilter::FileFormat)); QVERIFY(filter->supportsOption(QuillImageFilter::DisableUndo)); QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter)); filter->setOption(QuillImageFilter::FileName, QVariant(fooFile.fileName())); filter->setOption(QuillImageFilter::MimeType, QVariant("image/png")); filter->apply(fooImage); QCOMPARE(filter->error(),QuillImageFilter::FileNotFoundError); fooFile.close(); delete filter; }
void ut_scale::testScaleFilter() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.scale"); QVERIFY(filter); QVERIFY(filter->supportsOption(QuillImageFilter::SizeAfter)); // Assuming full image, rescaling to half size QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(4, 1))); QCOMPARE(filter->option(QuillImageFilter::SizeAfter), QVariant(QSize(4, 1))); QImage image = Unittests::generatePaletteImage(); QCOMPARE(image.size(), QSize(8, 2)); QImage filteredImage = filter->apply(image); QCOMPARE(filteredImage, image.scaled(QSize(4, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); // full image, rescaling to different aspect ratio QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(2, 8))); filteredImage = filter->apply(image); QCOMPARE(filteredImage, image.scaled(QSize(2, 8), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); delete filter; }
void ut_rotate::testQuillImage() { QuillImage image(Unittests::generatePaletteImage()); image.setFullImageSize(QSize(16, 4)); image.setArea(QRect(0, 0, 8, 2)); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.rotate"); QVERIFY(filter); // Rotate 90 degrees cw QuillImage image2 = filter->apply(image); QCOMPARE((QImage)image2, image.transformed(QTransform().rotate(90))); QCOMPARE(image2.fullImageSize(), QSize(4, 16)); QCOMPARE(image2.area(), QRect(2, 0, 2, 8)); // Rotate 180 degrees cw filter->setOption(QuillImageFilter::Angle, 180); QuillImage image3 = filter->apply(image2); QCOMPARE((QImage)image3, image.transformed(QTransform().rotate(-90))); QCOMPARE(image3.fullImageSize(), QSize(4, 16)); QCOMPARE(image3.area(), QRect(0, 8, 2, 8)); // Rotate 90 degrees ccw filter->setOption(QuillImageFilter::Angle, -90); QuillImage image4 = filter->apply(image3); QCOMPARE((QImage)image4, image.transformed(QTransform().rotate(180))); QCOMPARE(image4.fullImageSize(), QSize(16, 4)); QCOMPARE(image4.area(), QRect(8, 2, 8, 2)); delete filter; }
void ut_redeyereduction::testReductTwoAreas() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.red-eye-reduction"); QVERIFY(filter); QCOMPARE(filter->name(), QString("com.meego.red-eye-reduction")); QVariantList centerPoints; for (int i = 100; i <= 160; i+=60) centerPoints << QPoint(i, i); QVERIFY(filter->setOption(QuillImageFilter::Center, QVariant(centerPoints))); QVariantList radii; for (int r = 10; r <= 40; r+=30) radii << QVariant(r); QVERIFY(filter->setOption(QuillImageFilter::Radius, QVariant(radii))); QImage image("/usr/share/quillimagefilter-tests/images/redeye.jpg"); QVERIFY(!image.isNull()); QImage image1 = filter->apply(image); bool bIsReduced = false; for(int h=95; h<105; h++) { for(int v =95; v<105; v++) { QRgb color = image.pixel(QPoint(h, v)); int limit = (qGreen(color) + qBlue(color)) * 2 / 3; if (qRed(color) > limit) { QVERIFY(qRed(image.pixel(QPoint(h,v))) > (qRed(image1.pixel(QPoint(h,v))))); bIsReduced = true; } } } QVERIFY(bIsReduced); bIsReduced = false; for(int h=145; h<175; h++) { for(int v =145; v<175; v++) { QRgb color = image.pixel(QPoint(h, v)); int limit = (qGreen(color) + qBlue(color)) * 2 / 3; if (qRed(color) > limit) { QVERIFY(qRed(image.pixel(QPoint(h,v))) > (qRed(image1.pixel(QPoint(h,v))))); bIsReduced = true; } } } QVERIFY(bIsReduced); delete filter; }
void ut_load:: testInvalidData() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QFile invalidFile("/usr/share/quillimagefilter-tests/images/16_color_palette.xcf"); QImage invalidImage(invalidFile.fileName()); filter->setOption(QuillImageFilter::FileName, QVariant( invalidFile.fileName())); filter->setOption(QuillImageFilter::MimeType, QVariant("image/png")); filter->apply(invalidImage); QCOMPARE(filter->error(),QuillImageFilter::InvalidDataError); invalidFile.close(); delete filter; }
void ut_load::testUnsupportedFormat() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QFile unsupportedFile("/usr/share/quillimagefilter-tests/images/16_color_palette.xcf"); QImage unsupportedImage(unsupportedFile.fileName()); filter->setOption(QuillImageFilter::FileName, QVariant( unsupportedFile.fileName())); filter->setOption(QuillImageFilter::FileFormat, QVariant("xcf")); filter->apply(unsupportedImage); QCOMPARE(filter->error(),QuillImageFilter::UnsupportedFormatError); unsupportedFile.close(); delete filter; }
void ut_croppedthumbnail::testCroppedThumbnailAfterEdit() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); Quill::setPreviewLevelCount(1); Quill::setPreviewSize(0, QSize(2, 2)); Quill::setMinimumPreviewSize(0, QSize(2, 2)); QuillFile *file = new QuillFile(testFile.fileName()); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_Crop); filter->setOption(QuillImageFilter::CropRectangle, QRect(0, 0, 4, 2)); file->runFilter(filter); file->setDisplayLevel(1); Quill::releaseAndWait(); // load 0 Quill::releaseAndWait(); // crop 0 - bad version Quill::releaseAndWait(); // load 1 Quill::releaseAndWait(); // crop 1 Quill::releaseAndWait(); // reform 0 file->setDisplayLevel(0); QCOMPARE(file->allImageLevels().count(), 1); QCOMPARE(file->allImageLevels().first().size(), QSize(2, 2)); QVERIFY(Unittests::compareImage(file->allImageLevels().first(), image.copy(1, 0, 2, 2))); delete file; }
void ut_crop::testFullImage() { QuillImageFilter *filter = //new QuillImageFilter("org.maemo.crop"); QuillImageFilterFactory::createImageFilter("org.maemo.crop"); QVERIFY(filter); QCOMPARE(filter->name(), QString("com.meego.crop")); QVERIFY(filter->supportsOption(QuillImageFilter::CropRectangle)); // Full image cropped from right into 6x2 QVERIFY(filter->setOption(QuillImageFilter::CropRectangle, QRect(QPoint(2, 0), QPoint(7, 1)))); QCOMPARE(filter->option(QuillImageFilter::CropRectangle), QVariant(QRect(QPoint(2, 0), QPoint(7, 1)))); QImage image = Unittests::generatePaletteImage(); QCOMPARE(image.size(), QSize(8, 2)); QImage filteredImage = filter->apply(image); QCOMPARE(filteredImage, image.copy(2, 0, 6, 2)); delete filter; }
void ut_file::testEdittingHistory() { QTemporaryFile testFile1; testFile1.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile1.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillFile *file = new QuillFile(testFile1.fileName(), Strings::png); File *fileObject = file->internalFile(); QVERIFY(file->setDisplayLevel(0)); QVERIFY(!fileObject->hasOriginal()); QFile editHistory(fileObject->editHistoryFileName(fileObject->fileName(), Core::instance()->editHistoryPath())); QVERIFY(!editHistory.exists()); file->runFilter(filter); file->undo(); QVERIFY(editHistory.exists()); QVERIFY(!fileObject->hasOriginal()); }
void ut_file::testDoubleRevertRestore() { // Tests that revert and restore still work after a previous revert. QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImageFilter *filter2 = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter2); filter2->setOption(QuillImageFilter::Brightness, QVariant(-20)); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); file->runFilter(filter); QVERIFY(file->canRevert()); file->revert(); QVERIFY(file->canRestore()); file->runFilter(filter2); QVERIFY(file->canRevert()); file->revert(); QVERIFY(file->canRestore()); delete file; }
void ut_file::testDifferentPreviewLevels() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImage imageAfter = filter->apply(image); Quill::setPreviewSize(0, QSize(4, 1)); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); QuillFile *file2 = new QuillFile(testFile.fileName(), Strings::png); QSignalSpy spy(file, SIGNAL(imageAvailable(const QuillImageList))); QSignalSpy spy2(file2, SIGNAL(imageAvailable(const QuillImageList))); QVERIFY(file != file2); QVERIFY(file2->setDisplayLevel(1)); QVERIFY(file->setDisplayLevel(0)); file->runFilter(filter); Quill::releaseAndWait(); // load level 0 Quill::releaseAndWait(); // brightness level 0 QCOMPARE(spy.count(), 1); QCOMPARE(spy2.count(), 1); QCOMPARE(file->image().size(), QSize(4, 1)); QCOMPARE(file->image().z(), 0); QCOMPARE(file2->image().size(), QSize(4, 1)); QCOMPARE(file2->image().z(), 0); Quill::releaseAndWait(); // load level 1 Quill::releaseAndWait(); // brightness level 1 QCOMPARE(spy.count(), 1); QCOMPARE(spy2.count(), 2); QCOMPARE(file->image().size(), QSize(4, 1)); QCOMPARE(file->image().z(), 0); QVERIFY(Unittests::compareImage(file2->image(), imageAfter)); QCOMPARE(file2->image().z(), 1); delete file2; // Ensure that the display level is kept even if the other image reference // is removed. QCOMPARE(file->image().size(), QSize(4, 1)); QCOMPARE(file->image().z(), 0); delete file; }
void ut_file::testOriginalAfterSave() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); QuillFile *original = file->original(); // This makes us to setup the original's undo stack QCOMPARE(original->fullImageSize(), image.size()); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImage processedImage = filter->apply(image); file->runFilter(filter); file->save(); Quill::releaseAndWait(); Quill::releaseAndWait(); Quill::releaseAndWait(); original->setDisplayLevel(0); Quill::releaseAndWait(); QVERIFY(Unittests::compareImage(original->image(), image)); delete file; delete original; }
void ut_rotate::testRotateFilter() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.rotate"); QVERIFY(filter); QVERIFY(filter->supportsOption(QuillImageFilter::Angle)); QVERIFY(filter->setOption(QuillImageFilter::Angle, QVariant(90))); bool bOK = true; QCOMPARE(filter->option(QuillImageFilter::Angle).toDouble(&bOK), 90.0); QVERIFY(bOK); QuillImage image = Unittests::generatePaletteImage(); QCOMPARE(image.size(), QSize(8, 2)); QuillImage filteredImage = filter->apply(image); QCOMPARE(filteredImage.size(), QSize(2, 8)); // Get reference image with QImage::transformed() QuillImage compareToQImage = image.transformed(QTransform().rotate(90)); QCOMPARE(filteredImage, compareToQImage); // Four rotates should produce the original image QCOMPARE(filter->apply(filter->apply(filter->apply(filteredImage))), image); delete filter; }
void ut_scale::testScalePreview() { // No changes must be made to a preview image QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.scale"); QVERIFY(filter); QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(4, 1))); QuillImage image = Unittests::generatePaletteImage(); QCOMPARE(image.size(), QSize(8, 2)); image.setFullImageSize(QSize(16, 4)); image.setArea(QRect(0, 0, 16, 4)); QuillImage image2 = filter->apply(image); QCOMPARE(image2.size(), QSize(8, 2)); QCOMPARE(image2.fullImageSize(), QSize(4, 1)); QCOMPARE(image2.area(), QRect(0, 0, 4, 1)); QVERIFY(Unittests::compareImage(image, image2)); delete filter; }
void ut_flip::testQuillImage() { QuillImage image(Unittests::generatePaletteImage()); image.setFullImageSize(QSize(16, 4)); image.setArea(QRect(0, 0, 8, 2)); QuillImageFilter *filter = new QuillImageFilter("org.maemo.flip"); QVERIFY(filter->isValid()); // Flip vertical QuillImage image2 = filter->apply(image); QCOMPARE((QImage)image2, image.mirrored(false, true)); QCOMPARE(image2.fullImageSize(), QSize(16, 4)); QCOMPARE(image2.area(), QRect(0, 2, 8,2)); // Flip horizontal filter->setOption(QuillImageFilter::Horizontal, true); QuillImage image3 = filter->apply(image2); QCOMPARE((QImage)image3, image.mirrored(true, true)); QCOMPARE(image3.fullImageSize(), QSize(16, 4)); QCOMPARE(image3.area(), QRect(8, 2, 8, 2)); delete filter; }
void ut_stack::testDropRedoHistory() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImage resultImage = filter->apply(image); QuillImageFilter *filter2 = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter2->setOption(QuillImageFilter::Contrast, QVariant(20)); QuillImage resultImage2 = filter2->apply(resultImage); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); file->runFilter(filter); file->runFilter(filter2); file->undo(); QVERIFY(file->canRedo()); file->dropRedoHistory(); QVERIFY(!file->canRedo()); delete file; }
void ut_load::testLoadSameFilterTwice() { QTemporaryFile testFile; testFile.open(); QImage greenTestImage("/usr/share/quillimagefilter-tests/images/854x480_blue.png"); // Verify whether image exists QVERIFY(!greenTestImage.isNull()); greenTestImage.save(testFile.fileName(), "jpg"); QuillImage target = QuillImage(); target.setFullImageSize(QSize(854, 480)); target.setArea(QRect(0, 0, 854, 480)); QuillImage target2 = QuillImage(); target2.setFullImageSize(QSize(854, 480)); target2.setArea(QRect(0, 0, 854, 480)); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); filter->setOption(QuillImageFilter::FileName, testFile.fileName()); // Passing JPEG through the filter QuillImage imageAfter = filter->apply(target); // Passing JPEG through the filter QuillImage imageAfter2 = filter->apply(target2); // Checking the red channel value which should be always bigger than that of greeen channel QVERIFY( qBlue(imageAfter.pixel(QPoint(0, 0))) > qGreen(imageAfter.pixel(QPoint(0, 0))) ); // Checking the red channel value which should be always bigger than that of greeen channel QVERIFY( qBlue(imageAfter2.pixel(QPoint(0, 0))) > qGreen(imageAfter2.pixel(QPoint(0, 0))) ); delete filter; }
void ut_stack::testSessionSetup() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImageFilter *filter2 = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Contrast, QVariant(20)); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); file->runFilter(filter); file->runFilter(filter2); file->undo(); QVERIFY(!file->isSession()); QVERIFY(file->canUndo()); QVERIFY(file->canRedo()); file->startSession(); // We are in a session now, cannot undo or redo QVERIFY(file->isSession()); QVERIFY(!file->canUndo()); QVERIFY(!file->canRedo()); // If we end the session now, we should still be able to undo and redo file->endSession(); QVERIFY(!file->isSession()); QVERIFY(file->canUndo()); QVERIFY(file->canRedo()); delete file; }
void ut_load::testLoadError() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QTemporaryFile testFile; testFile.open(); filter->setOption(QuillImageFilter::FileName, testFile.fileName()); filter->setOption(QuillImageFilter::FileFormat, QString("png")); QCOMPARE(filter->option(QuillImageFilter::FileFormat).toString(), QString("png")); QSize size = filter->newFullImageSize(QSize()); QVERIFY(!size.isValid()); QCOMPARE((int)filter->error(), (int)QuillImageFilter::InvalidDataError); delete filter; }
void ut_load::testFormatDetectionFromSuffix() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QFile file("/usr/share/quillimagefilter-tests/images/16_color_palette.png"); filter->setOption(QuillImageFilter::FileName, QString(file.fileName())); QCOMPARE(filter->option(QuillImageFilter::FileFormat).toString(), QString("png")); QCOMPARE(filter->option(QuillImageFilter::MimeType).toString(), QString("image/png")); delete filter; }
void ut_crop::testQuillImageFragment() { QuillImage image(Unittests::generatePaletteImage()); image.setFullImageSize(QSize(16, 4)); image.setArea(QRect(4, 1, 8, 2)); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.crop"); QVERIFY(filter); // crop 6 px from the left filter->setOption(QuillImageFilter::CropRectangle, QRect(6, 0, 10, 4)); QuillImage image2 = filter->apply(image); QCOMPARE((QImage)image2, image.copy(QRect(2, 0, 6, 2))); QCOMPARE(image2.fullImageSize(), QSize(10, 4)); QCOMPARE(image2.area(), QRect(0, 1, 6, 2)); // crop 6 px from the right filter->setOption(QuillImageFilter::CropRectangle, QRect(0, 0, 4, 4)); QuillImage image3 = filter->apply(image2); QCOMPARE((QImage)image3, image.copy(QRect(2, 0, 4, 2))); QCOMPARE(image3.fullImageSize(), QSize(4, 4)); QCOMPARE(image3.area(), QRect(0, 1, 4, 2)); // crop to bottom half filter->setOption(QuillImageFilter::CropRectangle, QRect(0, 2, 4, 2)); QuillImage image4 = filter->apply(image3); QCOMPARE((QImage)image4, image.copy(QRect(2, 1, 4, 1))); QCOMPARE(image4.fullImageSize(), QSize(4, 2)); QCOMPARE(image4.area(), QRect(0, 0, 4, 1)); delete filter; }
void ut_scale::testScaleTiled() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.scale"); QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(4, 1))); QCOMPARE(filter->newFullImageSize(QSize(8, 2)), QSize(4, 1)); QCOMPARE(filter->newFullImageSize(QSize(4, 4)), QSize(4, 1)); // Rounded down QCOMPARE(filter->newArea(QSize(8, 2), QRect(2, 0, 3, 2)), QRect(1, 0, 1, 1)); QImage image = Unittests::generatePaletteImage(); QuillImage image1 = image.copy(0, 0, 3, 2); image1.setFullImageSize(QSize(8, 2)); image1.setArea(QRect(0, 0, 3, 2)); QuillImage resultImage1 = filter->apply(image1); QCOMPARE(resultImage1.area(), QRect(0, 0, 1, 1)); QCOMPARE(resultImage1.fullImageSize(), QSize(4, 1)); QCOMPARE((QImage)resultImage1, image1.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); QuillImage image2 = image.copy(3, 0, 3, 2); image2.setFullImageSize(QSize(8, 2)); image2.setArea(QRect(3, 0, 3, 2)); QuillImage resultImage2 = filter->apply(image2); QCOMPARE(resultImage2.area(), QRect(1, 0, 2, 1)); QCOMPARE(resultImage2.fullImageSize(), QSize(4, 1)); QCOMPARE((QImage)resultImage2, image2.scaled(QSize(2, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); QuillImage image3 = image.copy(6, 0, 2, 2); image3.setFullImageSize(QSize(8, 2)); image3.setArea(QRect(6, 0, 2, 2)); QuillImage resultImage3 = filter->apply(image3); QCOMPARE(resultImage3.area(), QRect(3, 0, 1, 1)); QCOMPARE(resultImage3.fullImageSize(), QSize(4, 1)); QCOMPARE((QImage)resultImage3, image3.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); delete filter; }
void ut_flip::testFlip() { QuillImageFilter *filter = new QuillImageFilter("org.maemo.flip"); QVERIFY(filter->isValid()); QCOMPARE(filter->name(), QString("com.meego.flip")); QVERIFY(filter->supportsOption(QuillImageFilter::Horizontal)); QVERIFY(filter->setOption(QuillImageFilter::Horizontal, QVariant(true))); QCOMPARE(filter->option(QuillImageFilter::Horizontal).toBool(), true); QImage image = Unittests::generatePaletteImage(); QCOMPARE(image.size(), QSize(8, 2)); QImage filteredImage = filter->apply(image); QCOMPARE(filteredImage.size(), QSize(8, 2)); // Verify against Qt's own flip QCOMPARE(filteredImage, image.transformed(QTransform().scale(-1, 1))); QVERIFY(filter->setOption(QuillImageFilter::Horizontal, QVariant(false))); filteredImage = filter->apply(image); QCOMPARE(filteredImage.size(), QSize(8, 2)); // Verify against Qt's own flip QCOMPARE(filteredImage, image.transformed(QTransform().scale(1, -1))); delete filter; }
// Such a strong downscaling that some tiles get resized into 0x0 void ut_scale::testScaleToMinimal() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.scale"); QVERIFY(filter->setOption(QuillImageFilter::SizeAfter, QSize(2, 1))); QImage image = Unittests::generatePaletteImage(); QuillImage tile1 = image.copy(0, 0, 2, 2); tile1.setFullImageSize(QSize(8, 2)); tile1.setArea(QRect(0, 0, 2, 2)); QuillImage tile2 = image.copy(2, 0, 2, 2); tile2.setFullImageSize(QSize(8, 2)); tile2.setArea(QRect(2, 0, 2, 2)); QuillImage tile3 = image.copy(4, 0, 2, 2); tile3.setFullImageSize(QSize(8, 2)); tile3.setArea(QRect(4, 0, 2, 2)); QuillImage tile4 = image.copy(6, 0, 2, 2); tile4.setFullImageSize(QSize(8, 2)); tile4.setArea(QRect(6, 0, 2, 2)); QuillImage resultTile1 = filter->apply(tile1); QCOMPARE(resultTile1.area(), QRect()); QCOMPARE(resultTile1.fullImageSize(), QSize(2, 1)); QCOMPARE(resultTile1, QuillImage()); QuillImage resultTile2 = filter->apply(tile2); QCOMPARE(resultTile2.area(), QRect(0, 0, 1, 1)); QCOMPARE(resultTile2.fullImageSize(), QSize(2, 1)); QCOMPARE((QImage)resultTile2, tile2.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); QuillImage resultTile3 = filter->apply(tile3); QCOMPARE(resultTile3.area(), QRect()); QCOMPARE(resultTile3.fullImageSize(), QSize(2, 1)); QCOMPARE(resultTile3, QuillImage()); QuillImage resultTile4 = filter->apply(tile4); QCOMPARE(resultTile4.area(), QRect(1, 0, 1, 1)); QCOMPARE(resultTile4.fullImageSize(), QSize(2, 1)); QCOMPARE((QImage)resultTile4, tile4.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); delete filter; }
void ut_stack::testEditAfterSetImage() { QString fileName = "/tmp/quill/pctest.png"; QFile::remove(fileName); QVERIFY(!QFile::exists(fileName)); QTemporaryFile testFile; testFile.open(); QImage image = Unittests::generatePaletteImage(); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImage resultImage = filter->apply(image); Quill::setEditHistoryPath("/tmp/quill/history"); Quill::setEditHistoryCacheSize(0, 2); QuillFile *file = new QuillFile(fileName, Strings::pngMimeType); file->setDisplayLevel(0); QuillImage quillImage(image); quillImage.setFullImageSize(QSize(8, 2)); file->setImage(0, quillImage); QVERIFY(Unittests::compareImage(file->image(), image)); QCOMPARE(file->fullImageSize(), QSize(8, 2)); file->runFilter(filter); Quill::releaseAndWait(); QVERIFY(Unittests::compareImage(file->image(), resultImage)); image.save(fileName, "png"); file->refresh(); Quill::releaseAndWait(); // edit (recreate) QVERIFY(Unittests::compareImage(file->image(), resultImage)); file->save(); Quill::releaseAndWait(); // load Quill::releaseAndWait(); // edit Quill::releaseAndWait(); // save QVERIFY(Unittests::compareImage(QImage(fileName), resultImage)); delete file; }
void ut_stack::testUndoRedoDuringSessionRecording() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImageFilter *filter2 = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Contrast, QVariant(20)); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); file->startSession(); file->runFilter(filter); file->runFilter(filter2); file->undo(); // Between commands, we should still be able to undo QVERIFY(file->canUndo()); file->undo(); QVERIFY(file->canRedo()); // Between commands, we should still be able to redo file->redo(); QVERIFY(file->canRedo()); delete file; }
void ut_load::testFormatDetectionFromContents() { QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter("org.maemo.load"); QTemporaryFile testFile; testFile.open(); Unittests::generatePaletteImage().save(testFile.fileName(), "jpg"); filter->setOption(QuillImageFilter::FileName, QString(testFile.fileName())); QCOMPARE(filter->option(QuillImageFilter::FileFormat).toString(), QString("jpeg")); QCOMPARE(filter->option(QuillImageFilter::MimeType).toString(), QString("image/jpeg")); delete filter; }
void ut_file::testMultipleAccess() { QTemporaryFile testFile; testFile.open(); QuillImage image = Unittests::generatePaletteImage(); image.save(testFile.fileName(), "png"); QuillImageFilter *filter = QuillImageFilterFactory::createImageFilter(QuillImageFilter::Name_BrightnessContrast); QVERIFY(filter); filter->setOption(QuillImageFilter::Brightness, QVariant(20)); QuillImage imageAfter = filter->apply(image); QuillFile *file = new QuillFile(testFile.fileName(), Strings::png); QuillFile *file2 = new QuillFile(testFile.fileName(), Strings::png); QVERIFY(file != file2); QVERIFY(file->setDisplayLevel(0)); QVERIFY(file2->setDisplayLevel(0)); file->runFilter(filter); Quill::releaseAndWait(); Quill::releaseAndWait(); QVERIFY(Unittests::compareImage(file->image(), imageAfter)); QVERIFY(Unittests::compareImage(file2->image(), imageAfter)); file2->undo(); Quill::releaseAndWait(); QVERIFY(Unittests::compareImage(file->image(), image)); QVERIFY(Unittests::compareImage(file2->image(), image)); delete file2; file->redo(); Quill::releaseAndWait(); QVERIFY(Unittests::compareImage(file->image(), imageAfter)); delete file; }