Skip to content

Commit

Permalink
Add some tests for circle map tools
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Feb 16, 2018
1 parent 916e4ba commit 58610b4
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/app/qgsmaptooladdcircle.h
Expand Up @@ -18,6 +18,7 @@

#include "qgsmaptoolcapture.h"
#include "qgscircle.h"
#include "qgis_app.h"

class QgsGeometryRubberBand;

Expand All @@ -26,7 +27,7 @@ struct EdgesOnlyFilter : public QgsPointLocator::MatchFilter
bool acceptMatch( const QgsPointLocator::Match &m ) override { return m.hasEdge(); }
};

class QgsMapToolAddCircle: public QgsMapToolCapture
class APP_EXPORT QgsMapToolAddCircle: public QgsMapToolCapture
{
Q_OBJECT

Expand Down
3 changes: 2 additions & 1 deletion src/app/qgsmaptoolcircle2points.h
Expand Up @@ -18,8 +18,9 @@
#define QGSMAPTOOLCIRCLE2POINTS_H

#include "qgsmaptooladdcircle.h"
#include "qgis_app.h"

class QgsMapToolCircle2Points: public QgsMapToolAddCircle
class APP_EXPORT QgsMapToolCircle2Points: public QgsMapToolAddCircle
{
Q_OBJECT

Expand Down
3 changes: 2 additions & 1 deletion src/app/qgsmaptoolcircle3points.h
Expand Up @@ -18,8 +18,9 @@
#define QGSMAPTOOLCIRCLE3POINTS_H

#include "qgsmaptooladdcircle.h"
#include "qgis_app.h"

class QgsMapToolCircle3Points: public QgsMapToolAddCircle
class APP_EXPORT QgsMapToolCircle3Points: public QgsMapToolAddCircle
{
Q_OBJECT

Expand Down
3 changes: 2 additions & 1 deletion src/app/qgsmaptoolcirclecenterpoint.h
Expand Up @@ -18,8 +18,9 @@
#define QGSMAPTOOLCIRCLECENTERPOINT_H

#include "qgsmaptooladdcircle.h"
#include "qgis_app.h"

class QgsMapToolCircleCenterPoint: public QgsMapToolAddCircle
class APP_EXPORT QgsMapToolCircleCenterPoint: public QgsMapToolAddCircle
{
Q_OBJECT

Expand Down
1 change: 1 addition & 0 deletions tests/src/app/CMakeLists.txt
Expand Up @@ -100,6 +100,7 @@ ADD_QGIS_TEST(maptoolidentifyaction testqgsmaptoolidentifyaction.cpp)
ADD_QGIS_TEST(maptoolselect testqgsmaptoolselect.cpp)
ADD_QGIS_TEST(maptoolreshape testqgsmaptoolreshape.cpp)
ADD_QGIS_TEST(maptoolcircularstringtest testqgsmaptoolcircularstring.cpp)
ADD_QGIS_TEST(maptoolcircletest testqgsmaptoolcircle.cpp)
ADD_QGIS_TEST(measuretool testqgsmeasuretool.cpp)
ADD_QGIS_TEST(vertextool testqgsvertextool.cpp)
ADD_QGIS_TEST(vectorlayersaveasdialogtest testqgsvectorlayersaveasdialog.cpp)
158 changes: 158 additions & 0 deletions tests/src/app/testqgsmaptoolcircle.cpp
@@ -0,0 +1,158 @@
/***************************************************************************
testqgsmaptoolcircle.cpp
------------------------
Date : January 2018
Copyright : (C) 2018 by Paul Blottiere
Email : paul.blottiere@oslandia.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 "qgstest.h"

#include "qgisapp.h"
#include "qgsgeometry.h"
#include "qgsmapcanvas.h"
#include "qgssettings.h"
#include "qgsvectorlayer.h"
#include "qgsmaptooladdfeature.h"

#include "testqgsmaptoolutils.h"
#include "qgsmaptoolcircle2points.h"
#include "qgsmaptoolcircle3points.h"
#include "qgsmaptoolcirclecenterpoint.h"


class TestQgsMapToolCircle : public QObject
{
Q_OBJECT

public:
TestQgsMapToolCircle();

private slots:
void initTestCase();
void cleanupTestCase();

void testCircleFrom2Points();
void testCircleFrom3Points();
void testCircleFromCenterPoint();

private:
QgisApp *mQgisApp = nullptr;
QgsMapToolCapture *mParentTool = nullptr;
QgsMapCanvas *mCanvas = nullptr;
QgsVectorLayer *mLayer = nullptr;
};

TestQgsMapToolCircle::TestQgsMapToolCircle() = default;


//runs before all tests
void TestQgsMapToolCircle::initTestCase()
{
QgsApplication::init();
QgsApplication::initQgis();

mQgisApp = new QgisApp();

mCanvas = new QgsMapCanvas();
mCanvas->setDestinationCrs( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:27700" ) ) );

// make testing layers
mLayer = new QgsVectorLayer( QStringLiteral( "LineStringZ?crs=EPSG:27700" ), QStringLiteral( "layer line Z" ), QStringLiteral( "memory" ) );
QVERIFY( mLayer->isValid() );
QgsProject::instance()->addMapLayers( QList<QgsMapLayer *>() << mLayer );

// set layers in canvas
mCanvas->setLayers( QList<QgsMapLayer *>() << mLayer );
mCanvas->setCurrentLayer( mLayer );

mParentTool = new QgsMapToolAddFeature( mCanvas, QgsMapToolCapture::CaptureLine );
}

void TestQgsMapToolCircle::cleanupTestCase()
{
QgsApplication::exitQgis();
}

void TestQgsMapToolCircle::testCircleFrom2Points()
{
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 333 );
mLayer->startEditing();

QgsMapToolCircle2Points mapTool( mParentTool, mCanvas );
mCanvas->setMapTool( &mapTool );

TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool );
utils.mouseClick( 0, 0, Qt::LeftButton );
utils.mouseMove( 0, 2 );
utils.mouseClick( 0, 2, Qt::RightButton );
QgsFeatureId newFid = utils.newFeatureId();

QCOMPARE( mLayer->featureCount(), ( long )1 );
QgsFeature f = mLayer->getFeature( newFid );

QString wkt = "CompoundCurveZ (CircularStringZ (0 2 333, 1 1 333, 0 0 333, -1 1 333, 0 2 333))";
QCOMPARE( f.geometry().asWkt(), wkt );

mLayer->rollBack();
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 );
}

void TestQgsMapToolCircle::testCircleFrom3Points()
{
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 );
mLayer->startEditing();

QgsMapToolCircle3Points mapTool( mParentTool, mCanvas );
mCanvas->setMapTool( &mapTool );

TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool );
utils.mouseClick( 0, 0, Qt::LeftButton );
utils.mouseClick( 0, 2, Qt::LeftButton );
utils.mouseMove( 1, 1 );
utils.mouseClick( 1, 1, Qt::RightButton );
QgsFeatureId newFid = utils.newFeatureId();

QCOMPARE( mLayer->featureCount(), ( long )1 );
QgsFeature f = mLayer->getFeature( newFid );

QString wkt = "CompoundCurveZ (CircularStringZ (0 2 111, 1 1 111, 0 0 111, -1 1 111, 0 2 111))";
QCOMPARE( f.geometry().asWkt(), wkt );

mLayer->rollBack();
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 );
}

void TestQgsMapToolCircle::testCircleFromCenterPoint()
{
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 );
mLayer->startEditing();

QgsMapToolCircleCenterPoint mapTool( mParentTool, mCanvas );
mCanvas->setMapTool( &mapTool );

TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool );
utils.mouseClick( 0, 0, Qt::LeftButton );
utils.mouseMove( 0, 2 );
utils.mouseClick( 0, 2, Qt::RightButton );
QgsFeatureId newFid = utils.newFeatureId();

QCOMPARE( mLayer->featureCount(), ( long )1 );
QgsFeature f = mLayer->getFeature( newFid );

QString wkt = "CompoundCurveZ (CircularStringZ (0 2 222, 2 0 222, 0 -2 222, -2 0 222, 0 2 222))";
QCOMPARE( f.geometry().asWkt(), wkt );

mLayer->rollBack();
QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 );
}

QGSTEST_MAIN( TestQgsMapToolCircle )
#include "testqgsmaptoolcircle.moc"

0 comments on commit 58610b4

Please sign in to comment.