Update labeling unit tests control image and PAL_SUITE test suite generation

This commit is contained in:
Larry Shaffer 2014-02-21 22:54:18 -07:00
parent 0a9b857177
commit 295854ad48
5 changed files with 62 additions and 46 deletions

View File

@ -210,7 +210,10 @@ class TestQgsPalLabeling(TestCase):
return res return res
def saveContolImage(self, tmpimg=''): def saveContolImage(self, tmpimg=''):
if 'PAL_CONTROL_IMAGE' not in os.environ: # don't save control images for RenderVsOtherOutput (Vs) tests, since
# those control images belong to a different test result
if ('PAL_CONTROL_IMAGE' not in os.environ
or 'Vs' in self._TestGroup):
return return
testgrpdir = 'expected_' + self._TestGroupPrefix testgrpdir = 'expected_' + self._TestGroupPrefix
testdir = os.path.join(self._TestDataDir, 'control_images', testdir = os.path.join(self._TestDataDir, 'control_images',
@ -228,6 +231,10 @@ class TestQgsPalLabeling(TestCase):
else: else:
self._Map.render() self._Map.render()
self._Canvas.saveAsImage(imgpath) self._Canvas.saveAsImage(imgpath)
# delete extraneous world file (always generated)
wrld_file = imgbasepath + '.PNGw'
if os.path.exists(wrld_file):
os.remove(wrld_file)
def renderCheck(self, mismatch=0, imgpath='', grpprefix=''): def renderCheck(self, mismatch=0, imgpath='', grpprefix=''):
"""Check rendered map canvas or existing image against control image """Check rendered map canvas or existing image against control image
@ -331,8 +338,12 @@ def runSuite(module, tests):
"""This allows for a list of test names to be selectively run. """This allows for a list of test names to be selectively run.
Also, ensures unittest verbose output comes at end, after debug output""" Also, ensures unittest verbose output comes at end, after debug output"""
loader = unittest.defaultTestLoader loader = unittest.defaultTestLoader
if 'PAL_SUITE' in os.environ and tests: if 'PAL_SUITE' in os.environ:
suite = loader.loadTestsFromNames(tests, module) if tests:
suite = loader.loadTestsFromNames(tests, module)
else:
raise Exception(
"\n\n####__ 'PAL_SUITE' set, but no tests specified __####\n")
else: else:
suite = loader.loadTestsFromModule(module) suite = loader.loadTestsFromModule(module)
verb = 2 if 'PAL_VERBOSE' in os.environ else 0 verb = 2 if 'PAL_VERBOSE' in os.environ else 0

View File

@ -33,7 +33,10 @@ from utilities import (
) )
from test_qgspallabeling_base import TestQgsPalLabeling, runSuite from test_qgspallabeling_base import TestQgsPalLabeling, runSuite
from test_qgspallabeling_tests import TestPointBase from test_qgspallabeling_tests import (
TestPointBase,
suiteTests
)
class TestCanvasPoint(TestQgsPalLabeling, TestPointBase): class TestCanvasPoint(TestQgsPalLabeling, TestPointBase):
@ -61,13 +64,9 @@ class TestCanvasPoint(TestQgsPalLabeling, TestPointBase):
if __name__ == '__main__': if __name__ == '__main__':
# NOTE: unless PAL_SUITE env var is set all test class methods will be run # NOTE: unless PAL_SUITE env var is set all test class methods will be run
# ex: 'TestGroup(Point|Line|Curved|Polygon|Feature).test_method' # SEE: test_qgspallabeling_tests.suiteTests() to define suite
suite = [ suite = (
'TestCanvasPoint.test_default_label', ['TestCanvasPoint.' + t for t in suiteTests()['sp_suite']]
'TestCanvasPoint.test_text_size_map_unit', )
'TestCanvasPoint.test_text_color',
'TestCanvasPoint.test_partials_labels_enabled',
'TestCanvasPoint.test_partials_labels_disabled',
]
res = runSuite(sys.modules[__name__], suite) res = runSuite(sys.modules[__name__], suite)
sys.exit(not res.wasSuccessful()) sys.exit(not res.wasSuccessful())

View File

@ -34,7 +34,10 @@ from utilities import (
) )
from test_qgspallabeling_base import TestQgsPalLabeling, runSuite from test_qgspallabeling_base import TestQgsPalLabeling, runSuite
from test_qgspallabeling_tests import TestPointBase from test_qgspallabeling_tests import (
TestPointBase,
suiteTests
)
# noinspection PyShadowingNames # noinspection PyShadowingNames
@ -152,19 +155,10 @@ class TestComposerVsCanvasPoint(TestComposerPoint):
if __name__ == '__main__': if __name__ == '__main__':
# NOTE: unless PAL_SUITE env var is set all test class methods will be run # NOTE: unless PAL_SUITE env var is set all test class methods will be run
# ex: 'TestGroup(Point|Line|Curved|Polygon|Feature).test_method' # SEE: test_qgspallabeling_tests.suiteTests() to define suite
suite = [ suite = (
'TestComposerPoint.test_default_label', ['TestComposerPoint.' + t for t in suiteTests()['sp_suite']] +
'TestComposerPoint.test_text_size_map_unit', ['TestComposerVsCanvasPoint.' + t for t in suiteTests()['sp_vs_suite']]
'TestComposerPoint.test_text_color', )
'TestComposerPoint.test_partials_labels_enabled',
'TestComposerPoint.test_partials_labels_disabled',
'TestComposerVsCanvasPoint.test_default_label',
'TestComposerVsCanvasPoint.test_text_size_map_unit',
'TestComposerVsCanvasPoint.test_text_color',
'TestComposerVsCanvasPoint.test_partials_labels_enabled',
'TestComposerVsCanvasPoint.test_partials_labels_disabled',
]
res = runSuite(sys.modules[__name__], suite) res = runSuite(sys.modules[__name__], suite)
sys.exit(not res.wasSuccessful()) sys.exit(not res.wasSuccessful())

View File

@ -8,6 +8,8 @@ Set the following env variables when manually running tests:
PAL_CONTROL_IMAGE to trigger building of new control images PAL_CONTROL_IMAGE to trigger building of new control images
PAL_REPORT to open any failed image check reports in web browser PAL_REPORT to open any failed image check reports in web browser
PAL_SERVER_TEMP to open the web server temp directory, instead of deleting
.. note:: This program is free software; you can redistribute it and/or modify .. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
@ -44,7 +46,10 @@ from qgis_local_server import (
) )
from test_qgspallabeling_base import TestQgsPalLabeling, runSuite from test_qgspallabeling_base import TestQgsPalLabeling, runSuite
from test_qgspallabeling_tests import TestPointBase from test_qgspallabeling_tests import (
TestPointBase,
suiteTests
)
MAPSERV = getLocalServer() MAPSERV = getLocalServer()
@ -83,9 +88,8 @@ class TestServerBase(TestQgsPalLabeling):
TestQgsPalLabeling.tearDownClass() TestQgsPalLabeling.tearDownClass()
# layers removed, save empty project file # layers removed, save empty project file
cls._TestProj.write() cls._TestProj.write()
if "PAL_REPORT" in os.environ: if "PAL_SERVER_TEMP" in os.environ:
MAPSERV.stop_processes() MAPSERV.stop_processes()
# MAPSERV.fcgi_server_process().stop()
MAPSERV.open_temp_dir() MAPSERV.open_temp_dir()
else: else:
MAPSERV.shutdown() MAPSERV.shutdown()
@ -173,21 +177,10 @@ class TestServerVsCanvasPoint(TestServerPoint):
if __name__ == '__main__': if __name__ == '__main__':
# NOTE: unless PAL_SUITE env var is set all test class methods will be run # NOTE: unless PAL_SUITE env var is set all test class methods will be run
# ex: 'TestGroup(Point|Line|Curved|Polygon|Feature).test_method' # SEE: test_qgspallabeling_tests.suiteTests() to define suite
suite = [ suite = (
'TestServerPoint.test_default_label', ['TestServerPoint.' + t for t in suiteTests()['sp_suite']] +
'TestServerPoint.test_text_size_map_unit', ['TestServerVsCanvasPoint.' + t for t in suiteTests()['sp_vs_suite']]
'TestServerPoint.test_text_color', )
'TestServerPoint.test_partials_labels_enabled',
'TestServerPoint.test_partials_labels_disabled',
'TestServerVsCanvasPoint.test_default_label',
'TestServerVsCanvasPoint.test_text_size_map_unit',
'TestServerVsCanvasPoint.test_text_color',
'TestServerVsCanvasPoint.test_partials_labels_enabled',
'TestServerVsCanvasPoint.test_partials_labels_disabled',
]
res = runSuite(sys.modules[__name__], suite) res = runSuite(sys.modules[__name__], suite)
# if SPAWN:
# os.remove(TESTPROJDIR) # remove temp directory (why does this error?)
sys.exit(not res.wasSuccessful()) sys.exit(not res.wasSuccessful())

View File

@ -142,5 +142,24 @@ class TestPointBase(object):
self.checkTest() self.checkTest()
# noinspection PyPep8Naming
def suiteTests():
"""
Use to define which tests are run when PAL_SUITE is set.
Use sp_vs_suite comparison of server and composer outputs to canvas
"""
return {
'sp_suite': [
# 'test_background_svg',
'test_background_svg_w_offset',
],
'sp_vs_suite': [
# 'test_background_svg',
'test_background_svg_w_offset',
# 'test_background_rect_w_offset',
]
}
if __name__ == '__main__': if __name__ == '__main__':
pass pass