Skip to content

Commit

Permalink
Harden rule based renderer test
Browse files Browse the repository at this point in the history
or shall I say desperately hack around issues in the hope it helps?
  • Loading branch information
m-kuhn committed Nov 11, 2019
1 parent 5eeba90 commit 0b9f04d
Showing 1 changed file with 25 additions and 22 deletions.
47 changes: 25 additions & 22 deletions tests/src/python/test_qgsrulebasedrenderer.py
Expand Up @@ -59,6 +59,12 @@

class TestQgsRulebasedRenderer(unittest.TestCase):

@classmethod
def setUpClass(cls):
# Super ugly hack to make sure python does not clean up our mapsetting objects
# this might lead to occasional crashes on travis
cls.mapsettings_archive = list()

def setUp(self):
myShpFile = os.path.join(TEST_DATA_DIR, 'rectangles.shp')
layer = QgsVectorLayer(myShpFile, 'Rectangles', 'ogr')
Expand Down Expand Up @@ -86,15 +92,14 @@ def setUp(self):

rendered_layers = [layer]
self.mapsettings.setLayers(rendered_layers)
self.mapsettings_archive.append(self.mapsettings)

def testElse(self):
# Setup rendering check
renderchecker = QgsMultiRenderChecker()
renderchecker.setMapSettings(self.mapsettings)
renderchecker.setControlName('expected_rulebased_else')
result = renderchecker.runTest('rulebased_else')

assert result
self.assertTrue(renderchecker.runTest('rulebased_else'))

def testDisabledElse(self):
# Disable a rule and assert that it's hidden not rendered with else
Expand All @@ -103,9 +108,7 @@ def testDisabledElse(self):
renderchecker = QgsMultiRenderChecker()
renderchecker.setMapSettings(self.mapsettings)
renderchecker.setControlName('expected_rulebased_disabled_else')
result = renderchecker.runTest('rulebased_disabled_else')

assert result
self.assertTrue(renderchecker.runTest('rulebased_disabled_else'))

def testWillRenderFeature(self):
vl = self.mapsettings.layers()[0]
Expand All @@ -123,12 +126,12 @@ def testWillRenderFeature(self):
rendered = renderer.willRenderFeature(ft, ctx)
renderer.stopRender(ctx)
renderer.rootRule().children()[0].setActive(True)
assert rendered == False
self.assertFalse(rendered)

renderer.startRender(ctx, vl.fields()) # build mActiveChlidren
rendered = renderer.willRenderFeature(ft, ctx)
renderer.stopRender(ctx)
assert rendered == True
self.assertTrue(rendered)

def testWillRenderFeatureNestedElse(self):
vl = self.mapsettings.layers()[0]
Expand Down Expand Up @@ -184,10 +187,10 @@ def testFeatureCount(self):
if rule.filterExpression() == 'ELSE':
elseRule = rule

assert elseRule != None
self.assertIsNotNone(elseRule)

cnt = counter.featureCount(elseRule.ruleKey())
assert cnt == 1
self.assertEqual(cnt, 1)

def testRefineWithCategories(self):
# Test refining rule with categories (refs #10815)
Expand All @@ -199,8 +202,8 @@ def testRefineWithCategories(self):
c = QgsCategorizedSymbolRenderer("id", cats)

QgsRuleBasedRenderer.refineRuleCategories(self.r2, c)
assert self.r2.children()[0].filterExpression() == '"id" = 1'
assert self.r2.children()[1].filterExpression() == '"id" = 2'
self.assertEqual(self.r2.children()[0].filterExpression(), '"id" = 1')
self.assertEqual(self.r2.children()[1].filterExpression(), '"id" = 2')

# Next try with an expression based category
cats = []
Expand All @@ -209,8 +212,8 @@ def testRefineWithCategories(self):
c = QgsCategorizedSymbolRenderer("id + 1", cats)

QgsRuleBasedRenderer.refineRuleCategories(self.r1, c)
assert self.r1.children()[0].filterExpression() == 'id + 1 = 1'
assert self.r1.children()[1].filterExpression() == 'id + 1 = 2'
self.assertEqual(self.r1.children()[0].filterExpression(), 'id + 1 = 1')
self.assertEqual(self.r1.children()[1].filterExpression(), 'id + 1 = 2')

# Last try with an expression which is just a quoted field name
cats = []
Expand All @@ -219,8 +222,8 @@ def testRefineWithCategories(self):
c = QgsCategorizedSymbolRenderer('"id"', cats)

QgsRuleBasedRenderer.refineRuleCategories(self.r3, c)
assert self.r3.children()[0].filterExpression() == '"id" = 1'
assert self.r3.children()[1].filterExpression() == '"id" = 2'
self.assertEqual(self.r3.children()[0].filterExpression(), '"id" = 1')
self.assertEqual(self.r3.children()[1].filterExpression(), '"id" = 2')

def testRefineWithRanges(self):
# Test refining rule with ranges (refs #10815)
Expand All @@ -232,8 +235,8 @@ def testRefineWithRanges(self):
g = QgsGraduatedSymbolRenderer("id", ranges)

QgsRuleBasedRenderer.refineRuleRanges(self.r2, g)
assert self.r2.children()[0].filterExpression() == '"id" >= 0.0000 AND "id" <= 1.0000'
assert self.r2.children()[1].filterExpression() == '"id" > 1.0000 AND "id" <= 2.0000'
self.assertEqual(self.r2.children()[0].filterExpression(), '"id" >= 0.0000 AND "id" <= 1.0000')
self.assertEqual(self.r2.children()[1].filterExpression(), '"id" > 1.0000 AND "id" <= 2.0000')

# Next try with an expression based range
ranges = []
Expand All @@ -242,8 +245,8 @@ def testRefineWithRanges(self):
g = QgsGraduatedSymbolRenderer("id / 2", ranges)

QgsRuleBasedRenderer.refineRuleRanges(self.r1, g)
assert self.r1.children()[0].filterExpression() == '(id / 2) >= 0.0000 AND (id / 2) <= 1.0000'
assert self.r1.children()[1].filterExpression() == '(id / 2) > 1.0000 AND (id / 2) <= 2.0000'
self.assertEqual(self.r1.children()[0].filterExpression(), '(id / 2) >= 0.0000 AND (id / 2) <= 1.0000')
self.assertEqual(self.r1.children()[1].filterExpression(), '(id / 2) > 1.0000 AND (id / 2) <= 2.0000')

# Last try with an expression which is just a quoted field name
ranges = []
Expand All @@ -252,8 +255,8 @@ def testRefineWithRanges(self):
g = QgsGraduatedSymbolRenderer('"id"', ranges)

QgsRuleBasedRenderer.refineRuleRanges(self.r3, g)
assert self.r3.children()[0].filterExpression() == '"id" >= 0.0000 AND "id" <= 1.0000'
assert self.r3.children()[1].filterExpression() == '"id" > 1.0000 AND "id" <= 2.0000'
self.assertEqual(self.r3.children()[0].filterExpression(), '"id" >= 0.0000 AND "id" <= 1.0000')
self.assertEqual(self.r3.children()[1].filterExpression(), '"id" > 1.0000 AND "id" <= 2.0000')

def testConvertFromCategorisedRenderer(self):
# Test converting categorised renderer to rule based
Expand Down

0 comments on commit 0b9f04d

Please sign in to comment.