File indexing completed on 2024-05-12 05:40:52
0001 /*************************************************************************** 0002 * Copyright (C) 2011 by Renaud Guezennec * 0003 * http://renaudguezennec.homelinux.org/accueil,3.html * 0004 * * 0005 * Rolisteam is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "controller/view_controller/imageselectorcontroller.h" 0021 #include "test_root_path.h" 0022 #include "utils/iohelper.h" 0023 #include "worker/iohelper.h" 0024 #include <QClipboard>> 0025 #include <QGuiApplication> 0026 #include <QtTest/QtTest> 0027 #include <helper.h> 0028 #include <memory> 0029 0030 class PictureTest : public QObject 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 PictureTest(); 0036 0037 private slots: 0038 void init(); 0039 void create(); 0040 void finalImage(); 0041 void readImageFromFile(); 0042 void readImageFromUrl(); 0043 void respectShape(); 0044 void respectShape_data(); 0045 void setImageFromClipboard(); 0046 0047 void readAllImageSize(); 0048 void readAllImageSize_data(); 0049 0050 private: 0051 std::unique_ptr<ImageSelectorController> m_ctrl; 0052 }; 0053 0054 PictureTest::PictureTest() {} 0055 0056 void PictureTest::init() 0057 { 0058 m_ctrl.reset(new ImageSelectorController()); 0059 } 0060 void PictureTest::create() 0061 { 0062 QVERIFY(m_ctrl->address().isEmpty()); 0063 QVERIFY(m_ctrl->title().isEmpty()); 0064 QCOMPARE(m_ctrl->currentDir(), QDir::homePath()); 0065 QVERIFY(!m_ctrl->dataInShape()); 0066 0067 QCOMPARE(m_ctrl->shape(), ImageSelectorController::AnyShape); 0068 QCOMPARE(m_ctrl->sources(), ImageSelectorController::All); 0069 QVERIFY(!m_ctrl->askPath()); 0070 QVERIFY(m_ctrl->canDrop()); 0071 QVERIFY(m_ctrl->canDownload()); 0072 QVERIFY(m_ctrl->canPaste()); 0073 auto movie= m_ctrl->movie(); 0074 QVERIFY(!movie->isValid()); 0075 0076 QCOMPARE(m_ctrl->validData(), false); 0077 0078 auto clip= qGuiApp->clipboard(); 0079 clip->clear(); 0080 QVERIFY(!m_ctrl->hasContentToPaste()); 0081 clip->setPixmap(IOHelper::dataToPixmap(utils::IOHelper::loadFile(":/img/girafe3.jpg"))); 0082 QVERIFY(m_ctrl->hasContentToPaste()); 0083 0084 QSignalSpy spy(m_ctrl.get(), &ImageSelectorController::addressChanged); 0085 m_ctrl->setAddress(tests::root_path); 0086 0087 spy.wait(10); 0088 QCOMPARE(spy.count(), 1); 0089 m_ctrl->setAddress(tests::root_path); 0090 spy.wait(10); 0091 QCOMPARE(spy.count(), 1); 0092 0093 QSignalSpy spyRect(m_ctrl.get(), &ImageSelectorController::rectChanged); 0094 QRect r{0, 0, 200, 300}; 0095 m_ctrl->setRect(r); 0096 spyRect.wait(10); 0097 QCOMPARE(spyRect.count(), 1); 0098 QCOMPARE(m_ctrl->rect(), r); 0099 m_ctrl->setRect(r); 0100 spyRect.wait(10); 0101 QCOMPARE(spyRect.count(), 1); 0102 0103 QSignalSpy spytitle(m_ctrl.get(), &ImageSelectorController::titleChanged); 0104 QString title{"foobar"}; 0105 m_ctrl->setTitle(title); 0106 spytitle.wait(10); 0107 QCOMPARE(spytitle.count(), 1); 0108 QCOMPARE(m_ctrl->title(), title); 0109 m_ctrl->setTitle(title); 0110 spytitle.wait(10); 0111 QCOMPARE(spytitle.count(), 1); 0112 0113 m_ctrl.reset(new ImageSelectorController(true, ImageSelectorController::Clipboard, ImageSelectorController::Square, 0114 QString())); 0115 QCOMPARE(m_ctrl->shape(), ImageSelectorController::Square); 0116 QCOMPARE(m_ctrl->sources(), ImageSelectorController::Clipboard); 0117 QVERIFY(m_ctrl->askPath()); 0118 QVERIFY(!m_ctrl->canDrop()); 0119 QVERIFY(!m_ctrl->canDownload()); 0120 QVERIFY(m_ctrl->canPaste()); 0121 QSignalSpy waitPixmapChanged(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0122 0123 m_ctrl->setImageData(utils::IOHelper::loadFile(":/img/girafe3.jpg")); 0124 QVERIFY(!m_ctrl->dataInShape()); 0125 0126 waitPixmapChanged.wait(); 0127 QCOMPARE(waitPixmapChanged.count(), 1); 0128 0129 m_ctrl->setVisualSize({300, 300}); 0130 0131 waitPixmapChanged.wait(); 0132 QCOMPARE(waitPixmapChanged.count(), 2); 0133 m_ctrl->setRect(r); 0134 auto final= IOHelper::dataToPixmap(m_ctrl->finalImageData()); 0135 QVERIFY(!final.isNull()); 0136 0137 m_ctrl.reset(new ImageSelectorController(true, ImageSelectorController::DragAndDrop, 0138 ImageSelectorController::Square, QString())); 0139 QCOMPARE(m_ctrl->shape(), ImageSelectorController::Square); 0140 QCOMPARE(m_ctrl->sources(), ImageSelectorController::DragAndDrop); 0141 QVERIFY(m_ctrl->askPath()); 0142 QVERIFY(m_ctrl->canDrop()); 0143 QVERIFY(!m_ctrl->canDownload()); 0144 QVERIFY(!m_ctrl->canPaste()); 0145 0146 m_ctrl.reset( 0147 new ImageSelectorController(true, ImageSelectorController::Web, ImageSelectorController::Square, QString())); 0148 QCOMPARE(m_ctrl->shape(), ImageSelectorController::Square); 0149 QCOMPARE(m_ctrl->sources(), ImageSelectorController::Web); 0150 QVERIFY(m_ctrl->askPath()); 0151 QVERIFY(!m_ctrl->canDrop()); 0152 QVERIFY(m_ctrl->canDownload()); 0153 QVERIFY(!m_ctrl->canPaste()); 0154 0155 m_ctrl.reset(new ImageSelectorController(true, ImageSelectorController::DiskFile, ImageSelectorController::Square, 0156 QString())); 0157 QCOMPARE(m_ctrl->shape(), ImageSelectorController::Square); 0158 QCOMPARE(m_ctrl->sources(), ImageSelectorController::DiskFile); 0159 QVERIFY(m_ctrl->askPath()); 0160 QVERIFY(!m_ctrl->canDrop()); 0161 QVERIFY(!m_ctrl->canDownload()); 0162 QVERIFY(!m_ctrl->canPaste()); 0163 } 0164 0165 void PictureTest::respectShape() 0166 { 0167 QFETCH(int, shape); 0168 QFETCH(QRect, geometry); 0169 QFETCH(QString, path); 0170 QFETCH(bool, expected); 0171 QFETCH(int, count); 0172 0173 QString dir("path/to/root"); 0174 m_ctrl.reset(new ImageSelectorController(true, ImageSelectorController::All, 0175 static_cast<ImageSelectorController::Shape>(shape), dir)); 0176 m_ctrl->setVisualSize(QSize{547,333}); 0177 m_ctrl->setRect(geometry); 0178 m_ctrl->setImageData(utils::IOHelper::loadFile(path)); 0179 0180 QSignalSpy waitPixmapChanged(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0181 0182 waitPixmapChanged.wait(); 0183 QCOMPARE(waitPixmapChanged.count(), count); 0184 QCOMPARE(m_ctrl->rectInShape(), expected); 0185 } 0186 0187 void PictureTest::respectShape_data() 0188 { 0189 QTest::addColumn<int>("shape"); 0190 QTest::addColumn<QRect>("geometry"); 0191 QTest::addColumn<QString>("path"); 0192 QTest::addColumn<bool>("expected"); 0193 QTest::addColumn<int>("count"); 0194 0195 QTest::addRow("any with any with img") 0196 << static_cast<int>(ImageSelectorController::AnyShape) << QRect(20, 20, 300, 23) << ":/img/girafe3.jpg" << true << 1; 0197 QTest::addRow("any with any with no img") 0198 << static_cast<int>(ImageSelectorController::AnyShape) << QRect(20, 20, 300, 23) << QString{} << false << 0; 0199 0200 QTest::addRow("any with square with img") << static_cast<int>(ImageSelectorController::AnyShape) 0201 << QRect(20, 20, 300, 300) << ":/img/girafe3.jpg" << true << 1; 0202 QTest::addRow("any with square with no img") 0203 << static_cast<int>(ImageSelectorController::AnyShape) << QRect(20, 20, 300, 300) << QString{} << false << 0; 0204 0205 QTest::addRow("square with square with img") 0206 << static_cast<int>(ImageSelectorController::Square) << QRect(20, 20, 300, 300) << ":/img/girafe3.jpg" << true << 1; 0207 QTest::addRow("square with square with no img") 0208 << static_cast<int>(ImageSelectorController::Square) << QRect(20, 20, 300, 300) << QString{} << false << 0; 0209 0210 QTest::addRow("square with any with img") 0211 << static_cast<int>(ImageSelectorController::Square) << QRect(20, 20, 200, 300) << ":/img/girafe3.jpg" << false << 1; 0212 QTest::addRow("square with any with no img") 0213 << static_cast<int>(ImageSelectorController::Square) << QRect(20, 20, 200, 300) << QString{} << false << 0; 0214 } 0215 0216 void PictureTest::finalImage() {} 0217 0218 void PictureTest::setImageFromClipboard() 0219 { 0220 auto server= Helper::initWebServer(); 0221 QSignalSpy spy(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0222 0223 auto clip= qGuiApp->clipboard(); 0224 clip->clear(); 0225 QVERIFY(m_ctrl->imageData().isEmpty()); 0226 m_ctrl->imageFromClipboard(); 0227 spy.wait(); 0228 QCOMPARE(spy.count(), 0); 0229 QVERIFY(m_ctrl->imageData().isEmpty()); 0230 0231 clip->setPixmap(IOHelper::dataToPixmap(utils::IOHelper::loadFile(":/img/girafe3.jpg"))); 0232 0233 m_ctrl->imageFromClipboard(); 0234 spy.wait(); 0235 QCOMPARE(spy.count(), 1); 0236 QVERIFY(!m_ctrl->imageData().isEmpty()); 0237 0238 m_ctrl.reset(new ImageSelectorController()); 0239 QSignalSpy spy2(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0240 clip->clear(); 0241 0242 QVERIFY(m_ctrl->imageData().isEmpty()); 0243 m_ctrl->imageFromClipboard(); 0244 spy2.wait(); 0245 QCOMPARE(spy2.count(), 0); 0246 QVERIFY(m_ctrl->imageData().isEmpty()); 0247 0248 clip->setImage(utils::IOHelper::dataToImage(utils::IOHelper::loadFile(":/img/girafe3.jpg"))); 0249 0250 m_ctrl->imageFromClipboard(); 0251 spy2.wait(); 0252 QCOMPARE(spy2.count(), 1); 0253 QVERIFY(!m_ctrl->imageData().isEmpty()); 0254 0255 clip->clear(); 0256 m_ctrl.reset(new ImageSelectorController()); 0257 QVERIFY(m_ctrl->imageData().isEmpty()); 0258 0259 QMimeData* mimedata= new QMimeData(); 0260 mimedata->setUrls({QUrl::fromUserInput("http://127.0.0.1:9090/image/Seppun_tashime.jpg")}); 0261 0262 clip->setMimeData(mimedata); 0263 m_ctrl->imageFromClipboard(); 0264 0265 spy2.wait(); 0266 QCOMPARE(spy2.count(), 1); 0267 QVERIFY(!m_ctrl->imageData().isEmpty()); 0268 // clip->clear(); 0269 // clip->setMimeData(nullptr); 0270 0271 delete server; 0272 } 0273 0274 void PictureTest::readImageFromFile() 0275 { 0276 QFile file(":/img/girafe3.jpg"); 0277 QByteArray dataArray; 0278 if(file.open(QIODevice::ReadOnly)) 0279 { 0280 dataArray= file.readAll(); 0281 } 0282 QTemporaryFile tfile; 0283 QString path; 0284 if(tfile.open()) 0285 { 0286 tfile.write(dataArray); 0287 path= tfile.fileName(); 0288 } 0289 0290 QSignalSpy spy(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0291 0292 m_ctrl->downloadImageFrom(QUrl::fromUserInput(path)); 0293 0294 spy.wait(); 0295 0296 QCOMPARE(spy.count(), 1); 0297 auto data= m_ctrl->finalImageData(); 0298 0299 auto pix= IOHelper::dataToPixmap(data); 0300 0301 QVERIFY(!pix.isNull()); 0302 } 0303 0304 void PictureTest::readImageFromUrl() 0305 { 0306 auto server= Helper::initWebServer(); 0307 QSignalSpy spy(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0308 0309 m_ctrl->downloadImageFrom(QUrl::fromUserInput("http://127.0.0.1:9090/image/Seppun_tashime.jpg")); 0310 0311 spy.wait(); 0312 0313 QCOMPARE(spy.count(), 1); 0314 auto data= m_ctrl->finalImageData(); 0315 0316 auto pix= IOHelper::dataToPixmap(data); 0317 0318 QVERIFY(!pix.isNull()); 0319 0320 delete server; 0321 } 0322 0323 void PictureTest::readAllImageSize() 0324 { 0325 QFETCH(QSize, imageSize); 0326 QFETCH(QSize, visualsize); 0327 QFETCH(QRect, selectedRect); 0328 QFETCH(bool, expected); 0329 0330 QSignalSpy spy(m_ctrl.get(), &ImageSelectorController::pixmapChanged); 0331 0332 auto img = utils::IOHelper::dataToImage(utils::IOHelper::loadFile(":/img/girafe3.jpg")); 0333 0334 auto imgW = img.copy(0,0, imageSize.width(), imageSize.height()); 0335 0336 0337 m_ctrl->setVisualSize(visualsize); 0338 m_ctrl->setRect(selectedRect); 0339 0340 m_ctrl->setImageData(IOHelper::imageToData(imgW)); 0341 0342 spy.wait(); 0343 0344 QCOMPARE(spy.count(), 1); 0345 0346 QCOMPARE(m_ctrl->rectInShape(), expected); 0347 } 0348 0349 void PictureTest::readAllImageSize_data() 0350 { 0351 QTest::addColumn<QSize>("imageSize"); 0352 QTest::addColumn<QSize>("visualsize"); 0353 QTest::addColumn<QRect>("selectedRect"); 0354 QTest::addColumn<bool>("expected"); 0355 0356 QTest::addRow("ImageBigSelectionIn") << QSize(3264,2448) << QSize(547,333) << QRect{100,100,50,50} << true; 0357 QTest::addRow("ImageBigSelectionOut") << QSize(3264,2448) << QSize(547,333) << QRect{-100,-100,50,50} << false; 0358 0359 //QTest::addRow("ImageLargeSelectionDefault") << QSize(600,333) << QSize(547,333) << QRect{} << true; 0360 QTest::addRow("ImageLargeSelectionIn") << QSize(600,333) << QSize(547,333) << QRect{100,100,50,50} << true; 0361 QTest::addRow("ImageLargeSelectionOut") << QSize(600,333) << QSize(547,333) << QRect{-100,-100,50,50} << false; 0362 0363 //QTest::addRow("ImageHighSelectionDefault") << QSize(547,400) << QSize(547,333) << QRect{} << true; 0364 QTest::addRow("ImageHighSelectionIn") << QSize(547,400) << QSize(547,333) << QRect{100,100,50,50} << true; 0365 QTest::addRow("ImageHighSelectionOut") << QSize(547,400) << QSize(547,333) << QRect{-100,-100,50,50} << false; 0366 0367 0368 //QTest::addRow("ImageSmallSelectionDefault") << QSize(123,111) << QSize(547,333) << QRect{} << true; 0369 QTest::addRow("ImageSmallSelectionIn") << QSize(123,111) << QSize(547,333) << QRect{100,100,50,50} << true; 0370 QTest::addRow("ImageSmallSelectionOut") << QSize(123,111) << QSize(547,333) << QRect{-100,-100,50,50} << false; 0371 0372 } 0373 QTEST_MAIN(PictureTest); 0374 0375 #include "tst_picturetest.moc"