def checkTest(self, **kwargs): self.lyr.writeToLayer(self.layer) ms = self._MapSettings # class settings settings_type = "Class" if self._TestMapSettings is not None: ms = self._TestMapSettings # per test settings settings_type = "Test" if "PAL_VERBOSE" in os.environ: qDebug("MapSettings type: {0}".format(settings_type)) qDebug(mapSettingsString(ms)) img = renderMapToImage(ms, parallel=False) self._TestImage = getTempfilePath("png") if not img.save(self._TestImage, "png"): os.unlink(self._TestImage) raise OSError("Failed to save output from map render job") self.saveControlImage(self._TestImage) mismatch = 0 if "PAL_NO_MISMATCH" not in os.environ: # some mismatch expected mismatch = self._Mismatch if self._Mismatch else 0 if self._TestGroup in self._Mismatches: mismatch = self._Mismatches[self._TestGroup] colortol = 0 if "PAL_NO_COLORTOL" not in os.environ: colortol = self._ColorTol if self._ColorTol else 0 if self._TestGroup in self._ColorTols: colortol = self._ColorTols[self._TestGroup] self.assertTrue(*self.renderCheck(mismatch=mismatch, colortol=colortol, imgpath=self._TestImage))
def checkTest(self, **kwargs): self.layer.setLabeling(QgsVectorLayerSimpleLabeling(self.lyr)) ms = self._MapSettings # class settings settings_type = 'Class' if self._TestMapSettings is not None: ms = self._TestMapSettings # per test settings settings_type = 'Test' if 'PAL_VERBOSE' in os.environ: qDebug('MapSettings type: {0}'.format(settings_type)) qDebug(mapSettingsString(ms)) img = renderMapToImage(ms, parallel=False) self._TestImage = getTempfilePath('png') if not img.save(self._TestImage, 'png'): os.unlink(self._TestImage) raise OSError('Failed to save output from map render job') self.saveControlImage(self._TestImage) mismatch = 0 if 'PAL_NO_MISMATCH' not in os.environ: # some mismatch expected mismatch = self._Mismatch if self._Mismatch else 0 if self._TestGroup in self._Mismatches: mismatch = self._Mismatches[self._TestGroup] colortol = 0 if 'PAL_NO_COLORTOL' not in os.environ: colortol = self._ColorTol if self._ColorTol else 0 if self._TestGroup in self._ColorTols: colortol = self._ColorTols[self._TestGroup] self.assertTrue(*self.renderCheck(mismatch=mismatch, colortol=colortol, imgpath=self._TestImage))
def checkTest(self, **kwargs): self.layer.setLabeling(QgsVectorLayerSimpleLabeling(self.lyr)) ms = self._MapSettings # class settings settings_type = 'Class' if self._TestMapSettings is not None: ms = self._TestMapSettings # per test settings settings_type = 'Test' if 'PAL_VERBOSE' in os.environ: qDebug('MapSettings type: {0}'.format(settings_type)) qDebug(mapSettingsString(ms)) img = renderMapToImage(ms, parallel=False) self._TestImage = getTempfilePath('png') if not img.save(self._TestImage, 'png'): os.unlink(self._TestImage) raise OSError('Failed to save output from map render job') self.saveControlImage(self._TestImage) mismatch = 0 if 'PAL_NO_MISMATCH' not in os.environ: # some mismatch expected mismatch = self._Mismatch if self._Mismatch else 0 if self._TestGroup in self._Mismatches: mismatch = self._Mismatches[self._TestGroup] colortol = 0 if 'PAL_NO_COLORTOL' not in os.environ: colortol = self._ColorTol if self._ColorTol else 0 if self._TestGroup in self._ColorTols: colortol = self._ColorTols[self._TestGroup] self.assertTrue(*self.renderCheck( mismatch=mismatch, colortol=colortol, imgpath=self._TestImage))
def saveControlImage(self, tmpimg=''): # 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 imgpath = self.controlImagePath() testdir = os.path.dirname(imgpath) if not os.path.exists(testdir): os.makedirs(testdir) imgbasepath = \ os.path.join(testdir, os.path.splitext(os.path.basename(imgpath))[0]) # remove any existing control images for f in glob.glob(imgbasepath + '.*'): if os.path.exists(f): os.remove(f) qDebug('Control image for {0}.{1}'.format(self._TestGroup, self._TestFunction)) if not tmpimg: # TODO: this can be deprecated, when per-base-test-class rendering # in checkTest() is verified OK for all classes qDebug('Rendering control to: {0}'.format(imgpath)) ms = self._MapSettings # class settings """:type: QgsMapSettings""" settings_type = 'Class' if self._TestMapSettings is not None: ms = self._TestMapSettings # per test settings settings_type = 'Test' qDebug('MapSettings type: {0}'.format(settings_type)) img = renderMapToImage(ms, parallel=False) """:type: QImage""" tmpimg = getTempfilePath('png') if not img.save(tmpimg, 'png'): os.unlink(tmpimg) raise OSError('Control not created for: {0}'.format(imgpath)) if tmpimg and os.path.exists(tmpimg): qDebug('Copying control to: {0}'.format(imgpath)) shutil.copyfile(tmpimg, imgpath) else: raise OSError('Control not copied to: {0}'.format(imgpath))
def testStyles(self): """Test that styles for rasters and vectors are kept when setDataSource is called""" options = QgsDataProvider.ProviderOptions() temp_dir = QTemporaryDir() p = QgsProject.instance() for f in ( 'bad_layer_raster_test.tfw', 'bad_layer_raster_test.tiff', 'bad_layer_raster_test.tiff.aux.xml', 'bad_layers_test.gpkg', 'good_layers_test.qgs'): copyfile(os.path.join(TEST_DATA_DIR, 'projects', f), os.path.join(temp_dir.path(), f)) project_path = os.path.join(temp_dir.path(), 'good_layers_test.qgs') p = QgsProject().instance() self.assertTrue(p.read(project_path)) self.assertEqual(p.count(), 3) ms = self.getBaseMapSettings() point_a = list(p.mapLayersByName('point_a'))[0] point_b = list(p.mapLayersByName('point_b'))[0] raster = list(p.mapLayersByName('bad_layer_raster_test'))[0] self.assertTrue(point_a.isValid()) self.assertTrue(point_b.isValid()) self.assertTrue(raster.isValid()) ms.setExtent(QgsRectangle(2.81861, 41.98138, 2.81952, 41.9816)) ms.setLayers([point_a, point_b, raster]) image = renderMapToImage(ms) print(os.path.join(temp_dir.path(), 'expected.png')) self.assertTrue(image.save(os.path.join(temp_dir.path(), 'expected.png'), 'PNG')) point_a_source = point_a.publicSource() point_b_source = point_b.publicSource() raster_source = raster.publicSource() point_a.setDataSource(point_a_source, point_a.name(), 'ogr', options) point_b.setDataSource(point_b_source, point_b.name(), 'ogr', options) raster.setDataSource(raster_source, raster.name(), 'gdal', options) self.assertTrue(image.save(os.path.join(temp_dir.path(), 'actual.png'), 'PNG')) self.assertTrue(filecmp.cmp(os.path.join(temp_dir.path(), 'actual.png'), os.path.join(temp_dir.path(), 'expected.png')), False) # Now build a bad project bad_project_path = os.path.join(temp_dir.path(), 'bad_layers_test.qgs') with open(project_path, 'r') as infile: with open(bad_project_path, 'w+') as outfile: outfile.write(infile.read().replace('./bad_layers_test.', './bad_layers_test-BAD_SOURCE.').replace('bad_layer_raster_test.tiff', 'bad_layer_raster_test-BAD_SOURCE.tiff')) self.assertTrue(p.read(bad_project_path)) self.assertEqual(p.count(), 3) point_a = list(p.mapLayersByName('point_a'))[0] point_b = list(p.mapLayersByName('point_b'))[0] raster = list(p.mapLayersByName('bad_layer_raster_test'))[0] self.assertFalse(point_a.isValid()) self.assertFalse(point_b.isValid()) self.assertFalse(raster.isValid()) point_a.setDataSource(point_a_source, point_a.name(), 'ogr', options) point_b.setDataSource(point_b_source, point_b.name(), 'ogr', options) raster.setDataSource(raster_source, raster.name(), 'gdal', options) self.assertTrue(image.save(os.path.join(temp_dir.path(), 'actual_fixed.png'), 'PNG')) self.assertTrue(filecmp.cmp(os.path.join(temp_dir.path(), 'actual_fixed.png'), os.path.join(temp_dir.path(), 'expected.png')), False)
def testStyles(self): """Test that styles for rasters and vectors are kept when setDataSource is called""" temp_dir = QTemporaryDir() p = QgsProject.instance() for f in ('bad_layer_raster_test.tfw', 'bad_layer_raster_test.tiff', 'bad_layer_raster_test.tiff.aux.xml', 'bad_layers_test.gpkg', 'good_layers_test.qgs'): copyfile(os.path.join(TEST_DATA_DIR, 'projects', f), os.path.join(temp_dir.path(), f)) project_path = os.path.join(temp_dir.path(), 'good_layers_test.qgs') p = QgsProject().instance() p.removeAllMapLayers() self.assertTrue(p.read(project_path)) self.assertEqual(p.count(), 4) ms = self.getBaseMapSettings() point_a_copy = list(p.mapLayersByName('point_a copy'))[0] point_a = list(p.mapLayersByName('point_a'))[0] point_b = list(p.mapLayersByName('point_b'))[0] raster = list(p.mapLayersByName('bad_layer_raster_test'))[0] self.assertTrue(point_a_copy.isValid()) self.assertTrue(point_a.isValid()) self.assertTrue(point_b.isValid()) self.assertTrue(raster.isValid()) ms.setExtent(QgsRectangle(2.81861, 41.98138, 2.81952, 41.9816)) ms.setLayers([point_a_copy, point_a, point_b, raster]) image = renderMapToImage(ms) self.assertTrue( image.save(os.path.join(temp_dir.path(), 'expected.png'), 'PNG')) point_a_source = point_a.publicSource() point_b_source = point_b.publicSource() raster_source = raster.publicSource() self._change_data_source(point_a, point_a_source, 'ogr') # Attention: we are not passing the subset string here: self._change_data_source(point_a_copy, point_a_source, 'ogr') self._change_data_source(point_b, point_b_source, 'ogr') self._change_data_source(raster, raster_source, 'gdal') self.assertTrue( image.save(os.path.join(temp_dir.path(), 'actual.png'), 'PNG')) self.assertTrue( filecmp.cmp(os.path.join(temp_dir.path(), 'actual.png'), os.path.join(temp_dir.path(), 'expected.png')), False) # Now build a bad project p.removeAllMapLayers() bad_project_path = os.path.join(temp_dir.path(), 'bad_layers_test.qgs') with open(project_path, 'r') as infile: with open(bad_project_path, 'w+') as outfile: outfile.write(infile.read().replace( './bad_layers_test.', './bad_layers_test-BAD_SOURCE.').replace( 'bad_layer_raster_test.tiff', 'bad_layer_raster_test-BAD_SOURCE.tiff')) p.removeAllMapLayers() self.assertTrue(p.read(bad_project_path)) self.assertEqual(p.count(), 4) point_a_copy = list(p.mapLayersByName('point_a copy'))[0] point_a = list(p.mapLayersByName('point_a'))[0] point_b = list(p.mapLayersByName('point_b'))[0] raster = list(p.mapLayersByName('bad_layer_raster_test'))[0] self.assertFalse(point_a.isValid()) self.assertFalse(point_a_copy.isValid()) self.assertFalse(point_b.isValid()) self.assertFalse(raster.isValid()) ms.setLayers([point_a_copy, point_a, point_b, raster]) image = renderMapToImage(ms) self.assertTrue( image.save(os.path.join(temp_dir.path(), 'bad.png'), 'PNG')) self.assertFalse( filecmp.cmp(os.path.join(temp_dir.path(), 'bad.png'), os.path.join(temp_dir.path(), 'expected.png')), False) self._change_data_source(point_a, point_a_source, 'ogr') # We are not passing the subset string!! self._change_data_source(point_a_copy, point_a_source, 'ogr') self._change_data_source(point_b, point_b_source, 'ogr') self._change_data_source(raster, raster_source, 'gdal') self.assertTrue(point_a.isValid()) self.assertTrue(point_a_copy.isValid()) self.assertTrue(point_b.isValid()) self.assertTrue(raster.isValid()) ms.setLayers([point_a_copy, point_a, point_b, raster]) image = renderMapToImage(ms) self.assertTrue( image.save(os.path.join(temp_dir.path(), 'actual_fixed.png'), 'PNG')) self.assertTrue( filecmp.cmp(os.path.join(temp_dir.path(), 'actual_fixed.png'), os.path.join(temp_dir.path(), 'expected.png')), False)