📄 testqgsquickprint.cpp
字号:
/*************************************************************************** testqgsquickprint.cpp -------------------------------------- Date : 20 Jan 2008 Copyright : (C) 2008 by Tim Sutton Email : tim @ linfiniti.com *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#include <QtTest>#include <QObject>#include <QStringList>#include <QObject>#include <QApplication>#include <QFileInfo>#include <QDir>#include <QDesktopServices>#include <iostream>//qgis includes...#include <qgsmaprender.h> #include <qgsmaplayer.h> #include <qgsvectorlayer.h> #include <qgsapplication.h>#include <qgsproviderregistry.h>#include <qgsmaplayerregistry.h>#include <qgsquickprint.h>//qgis test includes#include <qgsrenderchecker.h>/** \ingroup UnitTests * This is a unit test for the different renderers for vector layers. */class TestQgsQuickPrint: public QObject{ Q_OBJECT; private slots: void initTestCase();// will be called before the first testfunction is executed. void cleanupTestCase();// will be called after the last testfunction was executed. void init(){};// will be called before each testfunction is executed. void cleanup(){};// will be called after every testfunction. void basicMapTest(); QString getQgisPath(); // Gets the path to QGIS installation private: bool imageCheck(QString theType); //as above QgsMapRender * mpMapRenderer; QgsMapLayer * mpPointsLayer; QgsMapLayer * mpLinesLayer; QgsMapLayer * mpPolysLayer; QString mTestDataDir; QString mReport;};QString TestQgsQuickPrint::getQgisPath(){#ifdef Q_OS_LINUX QString qgisPath = QCoreApplication::applicationDirPath () + "/../";#else //mac and win QString qgisPath = QCoreApplication::applicationDirPath () ;#endif return qgisPath;}void TestQgsQuickPrint::initTestCase(){ // init QGIS's paths - true means that all path will be inited from prefix //QString qgisPath = QCoreApplication::applicationDirPath (); QgsApplication::setPrefixPath(getQgisPath(), TRUE);#ifdef Q_OS_LINUX// QgsApplication::setPkgDataPath(qgisPath + "/../share/qgis");// QgsApplication::setPluginPath(qgisPath + "/../lib/qgis");#endif // Instantiate the plugin directory so that providers are loaded QgsProviderRegistry::instance(QgsApplication::pluginPath()); //create some objects that will be used in all tests... std::cout << "Prefix PATH: " << QgsApplication::prefixPath().toLocal8Bit().data() << std::endl; std::cout << "Plugin PATH: " << QgsApplication::pluginPath().toLocal8Bit().data() << std::endl; std::cout << "PkgData PATH: " << QgsApplication::pkgDataPath().toLocal8Bit().data() << std::endl; std::cout << "User DB PATH: " << QgsApplication::qgisUserDbFilePath().toLocal8Bit().data() << std::endl; // //create a point layer that will be used in all tests... // QString myDataDir (TEST_DATA_DIR); //defined in CmakeLists.txt mTestDataDir = myDataDir + QDir::separator(); QString myPointsFileName = mTestDataDir + "points.shp"; QFileInfo myPointFileInfo ( myPointsFileName ); mpPointsLayer = new QgsVectorLayer ( myPointFileInfo.filePath(), myPointFileInfo.completeBaseName(), "ogr" ); // Register the layer with the registry QgsMapLayerRegistry::instance()->addMapLayer(mpPointsLayer); // //create a poly layer that will be used in all tests... // QString myPolysFileName = mTestDataDir + "polys.shp"; QFileInfo myPolyFileInfo ( myPolysFileName ); mpPolysLayer = new QgsVectorLayer ( myPolyFileInfo.filePath(), myPolyFileInfo.completeBaseName(), "ogr" ); // Register the layer with the registry QgsMapLayerRegistry::instance()->addMapLayer(mpPolysLayer); // // Create a line layer that will be used in all tests... // QString myLinesFileName = mTestDataDir + "lines.shp"; QFileInfo myLineFileInfo ( myLinesFileName ); mpLinesLayer = new QgsVectorLayer ( myLineFileInfo.filePath(), myLineFileInfo.completeBaseName(), "ogr" ); // Register the layer with the registry QgsMapLayerRegistry::instance()->addMapLayer(mpLinesLayer); // // We only need maprender instead of mapcanvas // since maprender does not require a qui // and is more light weight // mpMapRenderer = new QgsMapRender(); QStringList myLayers; myLayers << mpPointsLayer->getLayerID(); myLayers << mpPolysLayer->getLayerID(); myLayers << mpLinesLayer->getLayerID(); mpMapRenderer->setLayerSet(myLayers); mpMapRenderer->setExtent(mpPointsLayer->extent()); mReport+= "<h1>QuickPrint Tests</h1>\n";}void TestQgsQuickPrint::cleanupTestCase(){ /* QString myReportFile = QDir::tempPath() + QDir::separator() + "quickprinttest.html"; QFile myFile ( myReportFile); if ( myFile.open ( QIODevice::WriteOnly ) ) { QTextStream myQTextStream ( &myFile ); myQTextStream << mReport; myFile.close(); QDesktopServices::openUrl("file://"+myReportFile); } */ }void TestQgsQuickPrint::basicMapTest(){ //make the legends really long so we can test //word wrapping mpPointsLayer->setLayerName("This is a very very very long name it should word wrap"); mpPolysLayer->setLayerName("This is a very very very long name it should also word wrap"); mpLinesLayer->setLayerName("This is a very very very very long name it should word wrap"); //now print the map QgsQuickPrint myQuickPrint; myQuickPrint.setMapBackgroundColor ( Qt::cyan ); myQuickPrint.setOutputPdf (QDir::tempPath() + QDir::separator() + "quickprinttest.pdf"); myQuickPrint.setMapRender (mpMapRenderer); myQuickPrint.setTitle ("Map Title"); myQuickPrint.setName ("Map Name"); myQuickPrint.setCopyright ("Copyright Text"); //void setNorthArrow(QString theFileName); //void setLogo1(QString theFileName); //void setLogo2(QString theFileName); myQuickPrint.printMap();}//// Helper functions below//bool TestQgsQuickPrint::imageCheck(QString theTestType){ //use the QgsRenderChecker test utility class to //ensure the rendered output matches our control image mpMapRenderer->setExtent(mpPointsLayer->extent()); QString myExpectedImage = mTestDataDir + "expected_" + theTestType + ".png"; QgsRenderChecker myChecker; myChecker.setExpectedImage ( myExpectedImage ); myChecker.setMapRenderer ( mpMapRenderer ); bool myResultFlag = myChecker.runTest( theTestType ); mReport += myChecker.report(); return myResultFlag;}QTEST_MAIN(TestQgsQuickPrint)#include "moc_testqgsquickprint.cxx"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -