@@ -46,6 +46,7 @@ class TestQgsRubberband : public QObject
4646
4747 void testAddSingleMultiGeometries (); // test for #7728
4848 void testBoundingRect (); // test for #12392
49+ void testVisibility (); // test for #12486
4950
5051 private:
5152 QgsMapCanvas* mCanvas ;
@@ -153,6 +154,46 @@ void TestQgsRubberband::testBoundingRect()
153154
154155}
155156
157+ void TestQgsRubberband::testVisibility ()
158+ {
159+ mRubberband = new QgsRubberBand ( mCanvas , mPolygonLayer ->geometryType () );
160+
161+ // Visibility is set to false by default
162+ QCOMPARE ( mRubberband ->isVisible (), false );
163+
164+ // Check visibility after setting to empty geometry
165+ QSharedPointer<QgsGeometry> emptyGeom ( new QgsGeometry );
166+ mRubberband ->setToGeometry ( emptyGeom.data (), mPolygonLayer );
167+ QCOMPARE ( mRubberband ->isVisible (), false );
168+
169+ // Check that visibility changes
170+ mRubberband ->setVisible ( true );
171+ mRubberband ->setToGeometry ( emptyGeom.data (), mPolygonLayer );
172+ QCOMPARE ( mRubberband ->isVisible (), false );
173+
174+ // Check visibility after setting to valid geometry
175+ QSharedPointer<QgsGeometry> geom ( QgsGeometry::fromWkt (
176+ " POLYGON((10 10,10 30,30 30,30 10,10 10))"
177+ ) );
178+ mRubberband ->setToGeometry ( geom.data (), mPolygonLayer );
179+ QCOMPARE ( mRubberband ->isVisible (), true );
180+
181+ // Add point without update
182+ mRubberband ->reset ( true );
183+ mRubberband ->addPoint ( QgsPoint ( 10 , 10 ), false );
184+ QCOMPARE ( mRubberband ->isVisible (), false );
185+
186+ // Add point with update
187+ mRubberband ->addPoint ( QgsPoint ( 20 , 20 ), true );
188+ QCOMPARE ( mRubberband ->isVisible (), true );
189+
190+ // Check visibility after zoom (should not be changed)
191+ mRubberband ->setVisible ( false );
192+ mCanvas ->zoomIn ();
193+ QCOMPARE ( mRubberband ->isVisible (), false );
194+
195+ }
196+
156197
157198QTEST_MAIN ( TestQgsRubberband )
158199#include " testqgsrubberband.moc"
0 commit comments