Skip to content

Commit b71019d

Browse files
committed
Add some unit tests for QgsProcessingRegistry
1 parent dca697b commit b71019d

2 files changed

Lines changed: 150 additions & 0 deletions

File tree

‎tests/src/core/CMakeLists.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
1313
${CMAKE_SOURCE_DIR}/src/core/geometry
1414
${CMAKE_SOURCE_DIR}/src/core/effects
1515
${CMAKE_SOURCE_DIR}/src/core/layertree
16+
${CMAKE_SOURCE_DIR}/src/core/processing
1617
${CMAKE_SOURCE_DIR}/src/core/raster
1718
${CMAKE_SOURCE_DIR}/src/core/symbology-ng
1819
${CMAKE_SOURCE_DIR}/src/test
@@ -167,6 +168,7 @@ ADD_QGIS_TEST(pallabelingtest testqgspallabeling.cpp)
167168
ADD_QGIS_TEST(pointlocatortest testqgspointlocator.cpp )
168169
ADD_QGIS_TEST(pointpatternfillsymboltest testqgspointpatternfillsymbol.cpp )
169170
ADD_QGIS_TEST(pointtest testqgspoint.cpp)
171+
ADD_QGIS_TEST(processingtest testqgsprocessing.cpp)
170172
ADD_QGIS_TEST(projecttest testqgsproject.cpp)
171173
ADD_QGIS_TEST(qgistest testqgis.cpp)
172174
ADD_QGIS_TEST(rasterfilewritertest testqgsrasterfilewriter.cpp)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
/***************************************************************************
2+
testqgsprocessing.cpp
3+
---------------------
4+
begin : January 2017
5+
copyright : (C) 2017 by Nyall Dawson
6+
email : nyall dot dawson at gmail dot com
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#include "qgsprocessingregistry.h"
19+
#include "qgsprocessingprovider.h"
20+
#include <QObject>
21+
#include <QSharedPointer>
22+
#include "qgstest.h"
23+
24+
//dummy provider for testing
25+
class DummyProvider : public QgsProcessingProvider
26+
{
27+
public:
28+
29+
DummyProvider( const QString& id ) : mId( id ) {}
30+
31+
virtual QString id() const override { return mId; }
32+
33+
virtual QString name() const override { return "dummy"; }
34+
35+
QString mId;
36+
37+
};
38+
39+
class TestQgsProcessing: public QObject
40+
{
41+
Q_OBJECT
42+
43+
private slots:
44+
void initTestCase() {}// will be called before the first testfunction is executed.
45+
void cleanupTestCase() {}// will be called after the last testfunction was executed.
46+
void init() {} // will be called before each testfunction is executed.
47+
void cleanup() {} // will be called after every testfunction.
48+
void instance();
49+
void addProvider();
50+
void providerById();
51+
void removeProvider();
52+
53+
private:
54+
55+
};
56+
57+
void TestQgsProcessing::instance()
58+
{
59+
// test that application has a registry instance
60+
QVERIFY( QgsApplication::processingRegistry() );
61+
}
62+
63+
void TestQgsProcessing::addProvider()
64+
{
65+
QgsProcessingRegistry r;
66+
QSignalSpy spyProviderAdded( &r, &QgsProcessingRegistry::providerAdded );
67+
68+
QVERIFY( r.providers().isEmpty() );
69+
70+
QVERIFY( !r.addProvider( nullptr ) );
71+
72+
// add a provider
73+
DummyProvider* p = new DummyProvider( "p1" );
74+
QVERIFY( r.addProvider( p ) );
75+
QCOMPARE( r.providers(), QList< QgsProcessingProvider* >() << p );
76+
QCOMPARE( spyProviderAdded.count(), 1 );
77+
QCOMPARE( spyProviderAdded.last().at( 0 ).toString(), QString( "p1" ) );
78+
79+
//try adding another provider
80+
DummyProvider* p2 = new DummyProvider( "p2" );
81+
QVERIFY( r.addProvider( p2 ) );
82+
QCOMPARE( r.providers().toSet(), QSet< QgsProcessingProvider* >() << p << p2 );
83+
QCOMPARE( spyProviderAdded.count(), 2 );
84+
QCOMPARE( spyProviderAdded.last().at( 0 ).toString(), QString( "p2" ) );
85+
86+
//try adding a provider with duplicate id
87+
DummyProvider* p3 = new DummyProvider( "p2" );
88+
QVERIFY( !r.addProvider( p3 ) );
89+
QCOMPARE( r.providers().toSet(), QSet< QgsProcessingProvider* >() << p << p2 );
90+
QCOMPARE( spyProviderAdded.count(), 2 );
91+
}
92+
93+
void TestQgsProcessing::providerById()
94+
{
95+
QgsProcessingRegistry r;
96+
97+
// no providers
98+
QVERIFY( !r.providerById( "p1" ) );
99+
100+
// add a provider
101+
DummyProvider* p = new DummyProvider( "p1" );
102+
QVERIFY( r.addProvider( p ) );
103+
QCOMPARE( r.providerById( "p1" ), p );
104+
QVERIFY( !r.providerById( "p2" ) );
105+
106+
//try adding another provider
107+
DummyProvider* p2 = new DummyProvider( "p2" );
108+
QVERIFY( r.addProvider( p2 ) );
109+
QCOMPARE( r.providerById( "p1" ), p );
110+
QCOMPARE( r.providerById( "p2" ), p2 );
111+
QVERIFY( !r.providerById( "p3" ) );
112+
}
113+
114+
void TestQgsProcessing::removeProvider()
115+
{
116+
QgsProcessingRegistry r;
117+
QSignalSpy spyProviderRemoved( &r, &QgsProcessingRegistry::providerRemoved );
118+
119+
QVERIFY( !r.removeProvider( nullptr ) );
120+
QVERIFY( !r.removeProvider( "p1" ) );
121+
// provider not in registry
122+
DummyProvider* p = new DummyProvider( "p1" );
123+
QVERIFY( !r.removeProvider( p ) );
124+
QCOMPARE( spyProviderRemoved.count(), 0 );
125+
126+
// add some providers
127+
QVERIFY( r.addProvider( p ) );
128+
DummyProvider* p2 = new DummyProvider( "p2" );
129+
QVERIFY( r.addProvider( p2 ) );
130+
131+
// remove one by pointer
132+
QVERIFY( r.removeProvider( p ) );
133+
QCOMPARE( spyProviderRemoved.count(), 1 );
134+
QCOMPARE( spyProviderRemoved.last().at( 0 ).toString(), QString( "p1" ) );
135+
QCOMPARE( r.providers(), QList< QgsProcessingProvider* >() << p2 );
136+
137+
// should fail, already removed
138+
QVERIFY( !r.removeProvider( "p1" ) );
139+
140+
// remove one by id
141+
QVERIFY( r.removeProvider( "p2" ) );
142+
QCOMPARE( spyProviderRemoved.count(), 2 );
143+
QCOMPARE( spyProviderRemoved.last().at( 0 ).toString(), QString( "p2" ) );
144+
QVERIFY( r.providers().isEmpty() );
145+
}
146+
147+
QGSTEST_MAIN( TestQgsProcessing )
148+
#include "testqgsprocessing.moc"

0 commit comments

Comments
 (0)