Skip to content

Commit 7a34152

Browse files
committed
Add unit tests for ArcGIS rest style parsing
1 parent 6002cc4 commit 7a34152

File tree

6 files changed

+459
-58
lines changed

6 files changed

+459
-58
lines changed

src/providers/arcgisrest/CMakeLists.txt

100644100755
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,24 @@ ENDIF ()
5353

5454
QT5_WRAP_CPP (AFS_MOC_SRCS ${AFS_MOC_HDRS})
5555

56+
ADD_LIBRARY (arcgisfeatureserverprovider_a STATIC ${AFS_SRCS} ${AFS_MOC_SRCS})
5657
ADD_LIBRARY(arcgisfeatureserverprovider MODULE ${AFS_SRCS} ${AFS_MOC_SRCS})
5758

5859
TARGET_LINK_LIBRARIES(arcgisfeatureserverprovider
5960
qgis_core
6061
)
6162

63+
TARGET_LINK_LIBRARIES (arcgisfeatureserverprovider_a
64+
qgis_core
65+
)
66+
6267
IF (WITH_GUI)
6368
TARGET_LINK_LIBRARIES(arcgisfeatureserverprovider
6469
qgis_gui
6570
)
71+
TARGET_LINK_LIBRARIES(arcgisfeatureserverprovider_a
72+
qgis_gui
73+
)
6674
ENDIF ()
6775

6876
INSTALL (TARGETS arcgisfeatureserverprovider

src/providers/arcgisrest/qgsafsprovider.cpp

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828
#include "qgssourceselectprovider.h"
2929
#endif
3030

31-
#include "qgssinglesymbolrenderer.h"
32-
#include "qgscategorizedsymbolrenderer.h"
33-
3431
#include <QEventLoop>
3532
#include <QMessageBox>
3633
#include <QNetworkRequest>
@@ -295,61 +292,7 @@ void QgsAfsProvider::reloadData()
295292

296293
QgsFeatureRenderer *QgsAfsProvider::createRenderer( const QVariantMap & ) const
297294
{
298-
const QString type = mRendererDataMap.value( QStringLiteral( "type" ) ).toString();
299-
if ( type == QLatin1String( "simple" ) )
300-
{
301-
const QVariantMap symbolProps = mRendererDataMap.value( QStringLiteral( "symbol" ) ).toMap();
302-
std::unique_ptr< QgsSymbol > symbol = QgsArcGisRestUtils::parseEsriSymbolJson( symbolProps );
303-
if ( symbol )
304-
return new QgsSingleSymbolRenderer( symbol.release() );
305-
else
306-
return nullptr;
307-
}
308-
else if ( type == QLatin1String( "uniqueValue" ) )
309-
{
310-
const QString attribute = mRendererDataMap.value( QStringLiteral( "field1" ) ).toString();
311-
// TODO - handle field2, field3
312-
const QVariantList categories = mRendererDataMap.value( QStringLiteral( "uniqueValueInfos" ) ).toList();
313-
QgsCategoryList categoryList;
314-
for ( const QVariant &category : categories )
315-
{
316-
const QVariantMap categoryData = category.toMap();
317-
const QString value = categoryData.value( QStringLiteral( "value" ) ).toString();
318-
const QString label = categoryData.value( QStringLiteral( "label" ) ).toString();
319-
std::unique_ptr< QgsSymbol > symbol = QgsArcGisRestUtils::parseEsriSymbolJson( categoryData.value( QStringLiteral( "symbol" ) ).toMap() );
320-
if ( symbol )
321-
{
322-
categoryList.append( QgsRendererCategory( value, symbol.release(), label ) );
323-
}
324-
}
325-
326-
std::unique_ptr< QgsSymbol > defaultSymbol = QgsArcGisRestUtils::parseEsriSymbolJson( mRendererDataMap.value( QStringLiteral( "defaultSymbol" ) ).toMap() );
327-
if ( defaultSymbol )
328-
{
329-
categoryList.append( QgsRendererCategory( QVariant(), defaultSymbol.release(), mRendererDataMap.value( QStringLiteral( "defaultLabel" ) ).toString() ) );
330-
}
331-
332-
if ( categoryList.empty() )
333-
return nullptr;
334-
335-
return new QgsCategorizedSymbolRenderer( attribute, categoryList );
336-
}
337-
else if ( type == QLatin1String( "classBreaks" ) )
338-
{
339-
// currently unsupported
340-
return nullptr;
341-
}
342-
else if ( type == QLatin1String( "heatmap" ) )
343-
{
344-
// currently unsupported
345-
return nullptr;
346-
}
347-
else if ( type == QLatin1String( "vectorField" ) )
348-
{
349-
// currently unsupported
350-
return nullptr;
351-
}
352-
return nullptr;
295+
return QgsArcGisRestUtils::parseEsriRenderer( mRendererDataMap );
353296
}
354297

355298

src/providers/arcgisrest/qgsarcgisrestutils.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
#include "qgslinesymbollayer.h"
3434
#include "qgsfillsymbollayer.h"
3535
#include "qgsmarkersymbollayer.h"
36+
#include "qgsrenderer.h"
37+
#include "qgssinglesymbolrenderer.h"
38+
#include "qgscategorizedsymbolrenderer.h"
3639
#include <QEventLoop>
3740
#include <QNetworkRequest>
3841
#include <QNetworkReply>
@@ -641,6 +644,65 @@ std::unique_ptr<QgsMarkerSymbol> QgsArcGisRestUtils::parseEsriMarkerSymbolJson(
641644
return symbol;
642645
}
643646

647+
QgsFeatureRenderer *QgsArcGisRestUtils::parseEsriRenderer( const QVariantMap &rendererData )
648+
{
649+
const QString type = rendererData.value( QStringLiteral( "type" ) ).toString();
650+
if ( type == QLatin1String( "simple" ) )
651+
{
652+
const QVariantMap symbolProps = rendererData.value( QStringLiteral( "symbol" ) ).toMap();
653+
std::unique_ptr< QgsSymbol > symbol = parseEsriSymbolJson( symbolProps );
654+
if ( symbol )
655+
return new QgsSingleSymbolRenderer( symbol.release() );
656+
else
657+
return nullptr;
658+
}
659+
else if ( type == QLatin1String( "uniqueValue" ) )
660+
{
661+
const QString attribute = rendererData.value( QStringLiteral( "field1" ) ).toString();
662+
// TODO - handle field2, field3
663+
const QVariantList categories = rendererData.value( QStringLiteral( "uniqueValueInfos" ) ).toList();
664+
QgsCategoryList categoryList;
665+
for ( const QVariant &category : categories )
666+
{
667+
const QVariantMap categoryData = category.toMap();
668+
const QString value = categoryData.value( QStringLiteral( "value" ) ).toString();
669+
const QString label = categoryData.value( QStringLiteral( "label" ) ).toString();
670+
std::unique_ptr< QgsSymbol > symbol = QgsArcGisRestUtils::parseEsriSymbolJson( categoryData.value( QStringLiteral( "symbol" ) ).toMap() );
671+
if ( symbol )
672+
{
673+
categoryList.append( QgsRendererCategory( value, symbol.release(), label ) );
674+
}
675+
}
676+
677+
std::unique_ptr< QgsSymbol > defaultSymbol = parseEsriSymbolJson( rendererData.value( QStringLiteral( "defaultSymbol" ) ).toMap() );
678+
if ( defaultSymbol )
679+
{
680+
categoryList.append( QgsRendererCategory( QVariant(), defaultSymbol.release(), rendererData.value( QStringLiteral( "defaultLabel" ) ).toString() ) );
681+
}
682+
683+
if ( categoryList.empty() )
684+
return nullptr;
685+
686+
return new QgsCategorizedSymbolRenderer( attribute, categoryList );
687+
}
688+
else if ( type == QLatin1String( "classBreaks" ) )
689+
{
690+
// currently unsupported
691+
return nullptr;
692+
}
693+
else if ( type == QLatin1String( "heatmap" ) )
694+
{
695+
// currently unsupported
696+
return nullptr;
697+
}
698+
else if ( type == QLatin1String( "vectorField" ) )
699+
{
700+
// currently unsupported
701+
return nullptr;
702+
}
703+
return nullptr;
704+
}
705+
644706
QColor QgsArcGisRestUtils::parseEsriColorJson( const QVariant &colorData )
645707
{
646708
const QVariantList colorParts = colorData.toList();

src/providers/arcgisrest/qgsarcgisrestutils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class QgsSymbol;
3131
class QgsLineSymbol;
3232
class QgsFillSymbol;
3333
class QgsMarkerSymbol;
34+
class QgsFeatureRenderer;
3435

3536
class QgsArcGisRestUtils
3637
{
@@ -54,6 +55,7 @@ class QgsArcGisRestUtils
5455
static std::unique_ptr< QgsLineSymbol > parseEsriLineSymbolJson( const QVariantMap &symbolData );
5556
static std::unique_ptr< QgsFillSymbol > parseEsriFillSymbolJson( const QVariantMap &symbolData );
5657
static std::unique_ptr< QgsMarkerSymbol > parseEsriMarkerSymbolJson( const QVariantMap &symbolData );
58+
static QgsFeatureRenderer *parseEsriRenderer( const QVariantMap &rendererData );
5759

5860
static QColor parseEsriColorJson( const QVariant &colorData );
5961
static Qt::PenStyle parseEsriLineStyle( const QString &style );

tests/src/providers/CMakeLists.txt

100644100755
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
1111
${CMAKE_SOURCE_DIR}/src/core/geometry
1212
${CMAKE_SOURCE_DIR}/src/core/metadata
1313
${CMAKE_SOURCE_DIR}/src/core/raster
14+
${CMAKE_SOURCE_DIR}/src/core/symbology
1415
${CMAKE_SOURCE_DIR}/src/providers/wms
1516
${CMAKE_SOURCE_DIR}/src/providers/postgres
17+
${CMAKE_SOURCE_DIR}/src/providers/arcgisrest
1618
${CMAKE_SOURCE_DIR}/src/test
1719
${CMAKE_BINARY_DIR}/src/core
1820
)
@@ -64,6 +66,9 @@ SET_TARGET_PROPERTIES(qgis_wcsprovidertest PROPERTIES
6466
COMPILE_FLAGS "-DTEST_SERVER_URL=\\\"${TEST_SERVER_URL}\\\""
6567
)
6668

69+
ADD_QGIS_TEST(arcgisrestutilstest testqgsarcgisrestutils.cpp)
70+
TARGET_LINK_LIBRARIES(qgis_arcgisrestutilstest arcgisfeatureserverprovider_a)
71+
6772
ADD_QGIS_TEST(gdalprovidertest testqgsgdalprovider.cpp)
6873

6974
ADD_QGIS_TEST(ogrprovidertest testqgsogrprovider.cpp)

0 commit comments

Comments
 (0)