Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Feb 20, 2023
1 parent ab97a3a commit 211edac
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
58 changes: 58 additions & 0 deletions tests/src/core/testqgsrulebasedrenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,64 @@ class TestQgsRuleBasedRenderer: public QgsTest
QVERIFY( res );
}

void testNoMatchingZoomRanges()
{
const QString shpFile = TEST_DATA_DIR + QStringLiteral( "/rectangles.shp" );
std::unique_ptr< QgsVectorLayer > layer = std::make_unique< QgsVectorLayer >( shpFile, QStringLiteral( "rectangles" ), QStringLiteral( "ogr" ) );
QVERIFY( layer->isValid() );
QgsField vfield = QgsField( QStringLiteral( "fa_cy-fie+ld" ), QVariant::Int );
layer->addExpressionField( QStringLiteral( "\"id\"" ), vfield );

// Create rulebased style
QgsSymbol *sym1 = QgsFillSymbol::createSimple( QVariantMap( {{"color", "#fdbf6f"}, {"outline_color", "black"}} ) );
QgsSymbol *sym2 = QgsFillSymbol::createSimple( QVariantMap( {{"color", "#71bd6c"}, {"outline_color", "black"}} ) );

QgsRuleBasedRenderer::Rule *r1 = new QgsRuleBasedRenderer::Rule( sym1, 0, 0, "\"id\" = 1" );
r1->setMaximumScale( 1000 );
r1->setMinimumScale( 10000 );
QgsRuleBasedRenderer::Rule *r2 = new QgsRuleBasedRenderer::Rule( sym2, 0, 0, "\"id\" = 2" );
r2->setMaximumScale( 10000 );
r2->setMinimumScale( 100000 );

QgsRuleBasedRenderer::Rule *rootrule = new QgsRuleBasedRenderer::Rule( nullptr );
rootrule->appendChild( r1 );
rootrule->appendChild( r2 );

QgsRuleBasedRenderer *renderer = new QgsRuleBasedRenderer( rootrule );
layer->setRenderer( renderer );

QgsMapSettings mapsettings;
mapsettings.setOutputSize( QSize( 400, 400 ) );
mapsettings.setOutputDpi( 96 );
mapsettings.setExtent( QgsRectangle( -163, 22, -162.9, 22.1 ) );
mapsettings.setLayers( {layer.get()} );

QgsRenderContext rc = QgsRenderContext::fromMapSettings( mapsettings );
QGSCOMPARENEAR( rc.rendererScale(), 78999, 1000 );
// r2 rule should be visible at this scale
renderer->startRender( rc, layer->fields() );
QVERIFY( !renderer->canSkipRender() );
QVERIFY( renderer->rootRule()->hasActiveChildren() );
renderer->stopRender( rc );

mapsettings.setExtent( QgsRectangle( -163, 22, -70, 52 ) );
rc = QgsRenderContext::fromMapSettings( mapsettings );
QGSCOMPARENEAR( rc.rendererScale(), 57430698, 1000 );
// no rules should be visible at this scale!
renderer->startRender( rc, layer->fields() );
QVERIFY( !renderer->rootRule()->hasActiveChildren() );
QVERIFY( renderer->canSkipRender() );
renderer->stopRender( rc );

QgsMultiRenderChecker renderchecker;
renderchecker.setMapSettings( mapsettings );
renderchecker.setControlName( QStringLiteral( "expected_rulebased_no_visible" ) );
const bool res = renderchecker.runTest( QStringLiteral( "rulebased_no_visible" ) );
if ( !res )
mReport += renderchecker.report();
QVERIFY( res );
}

void testWillRenderFeature()
{
const QString shpFile = TEST_DATA_DIR + QStringLiteral( "/rectangles.shp" );
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 211edac

Please sign in to comment.