def XtestTableMultiFrame(self): """Test we can render to multiframes.""" composerHtml = QgsComposerHtml(self.mComposition, False) htmlFrame = QgsComposerFrame(self.mComposition, composerHtml, 10, 10, 100, 50) composerHtml.addFrame(htmlFrame) composerHtml.setResizeMode(QgsComposerMultiFrame.RepeatUntilFinished) composerHtml.setUrl(self.htmlUrl()) composerHtml.frame(0).setFrameEnabled(True) myPage = 0 checker1 = QgsCompositionChecker() myControlImage = self.controlImagePath("composerhtml_table_multiframe1.png") print "Checking page 1" myResult, myMessage = checker1.testComposition("Composer html table", self.mComposition, myControlImage, myPage) assert myResult, myMessage myPage = 1 checker2 = QgsCompositionChecker() myControlImage = self.controlImagePath("composerhtml_table_multiframe2.png") print "Checking page 2" myResult, myMessage = checker2.testComposition("Composer html table", self.mComposition, myControlImage, myPage) assert myResult, myMessage myPage = 2 checker3 = QgsCompositionChecker() myControlImage = self.controlImagePath("composerhtml_table_multiframe3.png") myResult, myMessage = checker3.testComposition("Composer html table", self.mComposition, myControlImage, myPage) print "Checking page 3" assert myResult, myMessage
def testTableMultiFrame(self): """Test we can render to multiframes.""" composerHtml = QgsComposerHtml(self.mComposition, False) htmlFrame = QgsComposerFrame(self.mComposition, composerHtml, 10, 10, 100, 50) composerHtml.addFrame(htmlFrame) composerHtml.setResizeMode( QgsComposerMultiFrame.RepeatUntilFinished) composerHtml.setUseSmartBreaks(False) composerHtml.setUrl(self.htmlUrl()) composerHtml.frame(0).setFrameEnabled(True) print("Checking page 1") myPage = 0 checker1 = QgsCompositionChecker('composerhtml_multiframe1', self.mComposition) checker1.setControlPathPrefix("composer_html") myTestResult, myMessage = checker1.testComposition(myPage) assert myTestResult, myMessage print("Checking page 2") myPage = 1 checker2 = QgsCompositionChecker('composerhtml_multiframe2', self.mComposition) checker2.setControlPathPrefix("composer_html") myTestResult, myMessage = checker2.testComposition(myPage) assert myTestResult, myMessage self.mComposition.removeMultiFrame(composerHtml) composerHtml = None assert myTestResult, myMessage
def tableMultiFrame(self): TEST_DATA_DIR = unitTestDataPath() htmlItem = QgsComposerHtml( self.mComposition, False ) htmlFrame = QgsComposerFrame( self.mComposition, htmlItem, 10, 10, 100, 50 ) htmlItem.addFrame( htmlFrame ) htmlItem.setResizeMode( QgsComposerMultiFrame.RepeatUntilFinished ) htmlItem.setUrl( QUrl( QString( "file:///%1" ).arg( QString( TEST_DATA_DIR ) + QDir.separator() + "html_table.html" ) ) ) htmlItem.frame( 0 ).setFrameEnabled( True ) result = True #page 1 checker1 = QgsCompositionChecker( ) if not checker1.testComposition( "Composer html table", self.mComposition, QString( QString( TEST_DATA_DIR ) + QDir.separator() + "control_images" + QDir.separator() + "expected_composerhtml" + QDir.separator() + "composerhtml_table_multiframe1.png" ), 0 ): result = False checker2 = QgsCompositionChecker( ) if not checker2.testComposition( "Composer html table", self.mComposition, QString( QString( TEST_DATA_DIR ) + QDir.separator() + "control_images" + QDir.separator() + "expected_composerhtml" + QDir.separator() + "composerhtml_table_multiframe2.png" ) , 1 ): result = False checker3 = QgsCompositionChecker( ) if not checker3.testComposition( "Composer html table", self.mComposition, QString( QString( TEST_DATA_DIR ) + QDir.separator() + "control_images" + QDir.separator() + "expected_composerhtml" + QDir.separator() + "composerhtml_table_multiframe3.png" ), 2 ): result = False self.mComposition.removeMultiFrame( htmlItem ) del htmlItem assert result == True
def testHtmlSmartBreaks(self): """Test rendering to multiframes with smart breaks.""" composerHtml = QgsComposerHtml(self.mComposition, False) htmlFrame = QgsComposerFrame(self.mComposition, composerHtml, 10, 10, 100, 52) composerHtml.addFrame(htmlFrame) composerHtml.setResizeMode( QgsComposerMultiFrame.RepeatUntilFinished) composerHtml.setUseSmartBreaks( True ) composerHtml.setUrl(self.htmlUrl()) composerHtml.frame(0).setFrameEnabled(True) print "Checking page 1" myPage = 0 checker1 = QgsCompositionChecker('composerhtml_smartbreaks1', self.mComposition) myTestResult, myMessage = checker1.testComposition( myPage, 200 ) assert myTestResult, myMessage print "Checking page 2" myPage = 1 checker2 = QgsCompositionChecker('composerhtml_smartbreaks2', self.mComposition) myTestResult, myMessage = checker2.testComposition( myPage, 200 ) assert myTestResult, myMessage self.mComposition.removeMultiFrame( composerHtml ) composerHtml = None assert myTestResult, myMessage
def testDisplayNodes(self): """Test displayNodes method""" self.mComposerPolygon.setDisplayNodes(True) checker = QgsCompositionChecker("composerpolygon_displaynodes", self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage self.mComposerPolygon.setDisplayNodes(False) checker = QgsCompositionChecker("composerpolygon_defaultstyle", self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testGrid(self): """Test that we can create a grid for a map.""" myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationEnabled(True) self.mComposerMap.grid().setGridLineColor(QColor(0, 255, 0)) self.mComposerMap.grid().setGridLineWidth(0.5) self.mComposerMap.grid().setAnnotationFont(QgsFontUtils.getStandardTestFont()) self.mComposerMap.grid().setAnnotationPrecision(0) self.mComposerMap.grid().setAnnotationDisplay(QgsComposerMapGrid.HideAll, QgsComposerMapGrid.Left) self.mComposerMap.grid().setAnnotationPosition(QgsComposerMapGrid.OutsideMapFrame, QgsComposerMapGrid.Right) self.mComposerMap.grid().setAnnotationDisplay(QgsComposerMapGrid.HideAll, QgsComposerMapGrid.Top) self.mComposerMap.grid().setAnnotationPosition(QgsComposerMapGrid.OutsideMapFrame, QgsComposerMapGrid.Bottom) self.mComposerMap.grid().setAnnotationDirection(QgsComposerMapGrid.Horizontal, QgsComposerMapGrid.Right) self.mComposerMap.grid().setAnnotationDirection(QgsComposerMapGrid.Horizontal, QgsComposerMapGrid.Bottom) self.mComposerMap.grid().setAnnotationFontColor(QColor(255, 0, 0, 150)) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_Overlay) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_grid', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition() self.mComposerMap.grid().setEnabled(False) self.mComposerMap.grid().setAnnotationEnabled(False) assert myTestResult, myMessage
def testOverviewMapCenter(self): overviewMap = QgsComposerMap(self.mComposition, 20, 130, 70, 70) overviewMap.setFrameEnabled(True) self.mComposition.addComposerMap(overviewMap) # zoom in myRectangle = QgsRectangle(785462.375+5000, 3341423.125, 789262.375+5000, 3343323.125) self.mComposerMap.setNewExtent(myRectangle) myRectangle2 = QgsRectangle(781662.375, 3339523.125, 793062.375, 3350923.125) overviewMap.setNewExtent(myRectangle2) overviewMap.setOverviewFrameMap(self.mComposerMap.id()) overviewMap.setOverviewInverted(False) overviewMap.setOverviewCentered(True) checker = QgsCompositionChecker() myPngPath = os.path.join(TEST_DATA_DIR, 'control_images', 'expected_composermap', 'composermap_landsat_overview_center.png') myTestResult, myMessage = checker.testComposition( 'Composer map overview centered', self.mComposition, myPngPath) self.mComposition.removeComposerItem(overviewMap) assert myTestResult == True, myMessage
def testGrid(self): """Test that we can create a grid for a map.""" myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.setGridEnabled(True) self.mComposerMap.setGridIntervalX(2000) self.mComposerMap.setGridIntervalY(2000) self.mComposerMap.setShowGridAnnotation(True) self.mComposerMap.setGridPenWidth(0.5) self.mComposerMap.setGridPenColor(QColor(0,255,0)) self.mComposerMap.setGridAnnotationPrecision(0) self.mComposerMap.setGridAnnotationPosition(QgsComposerMap.Disabled, QgsComposerMap.Left) self.mComposerMap.setGridAnnotationPosition( QgsComposerMap.OutsideMapFrame, QgsComposerMap.Right) self.mComposerMap.setGridAnnotationPosition(QgsComposerMap.Disabled, QgsComposerMap.Top) self.mComposerMap.setGridAnnotationPosition( QgsComposerMap.OutsideMapFrame, QgsComposerMap.Bottom) self.mComposerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, QgsComposerMap.Right) self.mComposerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, QgsComposerMap.Bottom) self.mComposerMap.setAnnotationFontColor(QColor(255,0,0,150)) self.mComposerMap.setGridBlendMode(QPainter.CompositionMode_Overlay) checker = QgsCompositionChecker('composermap_grid', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerMap.setGridEnabled(False) self.mComposerMap.setShowGridAnnotation(False) assert myTestResult == True, myMessage
def testDefaultStyle(self): """Test polygon rendering with default style.""" self.mComposerPolygon.setDisplayNodes(False) checker = QgsCompositionChecker("composerpolygon_defaultstyle", self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testSelectedNode(self): """Test selectedNode and unselectNode methods""" self.mComposerPolygon.setDisplayNodes(True) self.mComposerPolygon.setSelectedNode(3) checker = QgsCompositionChecker("composerpolygon_selectednode", self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage self.mComposerPolygon.unselectNode() self.mComposerPolygon.setDisplayNodes(False) checker = QgsCompositionChecker("composerpolygon_defaultstyle", self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testResizeZoom(self): """Test picture resize zoom mode.""" self.composerPicture.setResizeMode(QgsComposerPicture.Zoom) checker = QgsCompositionChecker('composerpicture_resize_zoom', self.composition) testResult, message = checker.testComposition() assert testResult, message
def testZebraStyleSides(self): self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.Zebra) myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setGridLineColor(QColor(0, 0, 0)) self.mComposerMap.grid().setAnnotationFontColor(QColor(0, 0, 0)) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_SourceOver) self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.Zebra) self.mComposerMap.grid().setFrameWidth(10) self.mComposerMap.grid().setFramePenSize(1) self.mComposerMap.grid().setGridLineWidth(0.5) self.mComposerMap.grid().setFramePenColor(QColor(0, 0, 0)) self.mComposerMap.grid().setFrameFillColor1(QColor(0, 0, 0)) self.mComposerMap.grid().setFrameFillColor2(QColor(255, 255, 255)) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameLeft, True) self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameRight, False) self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameTop, False) self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameBottom, False) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_zebrastyle_left', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition(0, 100) assert myTestResult, myMessage self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameTop, True) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_zebrastyle_lefttop', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition(0, 100) assert myTestResult, myMessage self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameRight, True) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_zebrastyle_lefttopright', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition(0, 100) assert myTestResult, myMessage self.mComposerMap.grid().setFrameSideFlag(QgsComposerMapGrid.FrameBottom, True) self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.NoFrame)
def testTriangle(self): """Test triangle composer shape""" self.mComposerShape.setShapeType(QgsComposerShape.Triangle) checker = QgsCompositionChecker('composershapes_triangle', self.mComposition) myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testEllipse(self): """Test ellipse composer shape""" self.mComposerShape.setShapeType(QgsComposerShape.Ellipse) checker = QgsCompositionChecker('composershapes_ellipse', self.mComposition) myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testResizeZoom(self): """Test picture resize zoom mode.""" self.composerPicture.setResizeMode(QgsComposerPicture.Zoom) checker = QgsCompositionChecker("composerpicture_resize_zoom", self.composition) checker.setControlPathPrefix("composer_picture") testResult, message = checker.testComposition() assert testResult, message
def legend_test(self): self.mAtlasMap.setAtlasDriven(True) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Auto) self.mAtlasMap.setAtlasMargin(0.10) # add a point layer ptLayer = QgsVectorLayer("Point?crs=epsg:4326&field=attr:int(1)&field=label:string(20)", "points", "memory") pr = ptLayer.dataProvider() f1 = QgsFeature(1) f1.initAttributes(2) f1.setAttribute(0, 1) f1.setAttribute(1, "Test label 1") f1.setGeometry(QgsGeometry.fromPoint(QgsPointXY(-0.638, 48.954))) f2 = QgsFeature(2) f2.initAttributes(2) f2.setAttribute(0, 2) f2.setAttribute(1, "Test label 2") f2.setGeometry(QgsGeometry.fromPoint(QgsPointXY(-1.682, 48.550))) pr.addFeatures([f1, f2]) # categorized symbology r = QgsCategorizedSymbolRenderer("attr", [QgsRendererCategory(1, QgsMarkerSymbol.createSimple({"color": "255,0,0"}), "red"), QgsRendererCategory(2, QgsMarkerSymbol.createSimple({"color": "0,0,255"}), "blue")]) ptLayer.setRenderer(r) QgsProject.instance().addMapLayer(ptLayer) # add the point layer to the map settings layers = self.layers layers = [ptLayer] + layers self.mAtlasMap.setLayers(layers) self.mOverview.setLayers(layers) # add a legend legend = QgsComposerLegend(self.mComposition) legend.moveBy(200, 100) # sets the legend filter parameter legend.setComposerMap(self.mAtlasMap) legend.setLegendFilterOutAtlas(True) self.mComposition.addComposerLegend(legend) self.mAtlas.beginRender() self.mAtlas.prepareForFeature(0) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_legend', self.mComposition) myTestResult, myMessage = checker.testComposition() assert myTestResult self.mAtlas.endRender() # restore state self.mAtlasMap.setLayers([layers[1]]) self.mComposition.removeComposerItem(legend) QgsProject.instance().removeMapLayer(ptLayer.id())
def testRemoteImage(self): """Test fetching remote picture.""" self.composerPicture.setPicturePath('http://localhost:' + str(TestQgsComposerPicture.port) + '/qgis_local_server/logo.png') checker = QgsCompositionChecker('composerpicture_remote', self.composition) testResult, message = checker.testComposition() self.composerPicture.setPicturePath(self.pngImage) assert testResult, message
def testRectangle(self): """Test rectangle composer shape""" self.mComposerShape.setShapeType(QgsComposerShape.Rectangle) checker = QgsCompositionChecker('composershapes_rectangle', self.mComposition) checker.setControlPathPrefix("composer_shapes") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testMapCrs(self): # create composition with composer map map_settings = QgsMapSettings() map_settings.setLayers([self.vector_layer]) composition = QgsComposition(QgsProject.instance()) composition.setPaperSize(297, 210) # check that new maps inherit project CRS QgsProject.instance().setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) map = QgsComposerMap(composition, 20, 20, 200, 100) map.setFrameEnabled(True) rectangle = QgsRectangle(-13838977, 2369660, -8672298, 6250909) map.setNewExtent(rectangle) map.setLayers([self.vector_layer]) composition.addComposerMap(map) self.assertEqual(map.crs().authid(), 'EPSG:4326') self.assertFalse(map.presetCrs().isValid()) # overwrite CRS map.setCrs(QgsCoordinateReferenceSystem('EPSG:3857')) self.assertEqual(map.crs().authid(), 'EPSG:3857') self.assertEqual(map.presetCrs().authid(), 'EPSG:3857') checker = QgsCompositionChecker('composermap_crs3857', composition) checker.setControlPathPrefix("composer_map") result, message = checker.testComposition() self.assertTrue(result, message) # overwrite CRS map.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) self.assertEqual(map.presetCrs().authid(), 'EPSG:4326') self.assertEqual(map.crs().authid(), 'EPSG:4326') rectangle = QgsRectangle(-124, 17, -78, 52) map.zoomToExtent(rectangle) checker = QgsCompositionChecker('composermap_crs4326', composition) checker.setControlPathPrefix("composer_map") result, message = checker.testComposition() self.assertTrue(result, message) # change back to project CRS map.setCrs(QgsCoordinateReferenceSystem()) self.assertEqual(map.crs().authid(), 'EPSG:4326') self.assertFalse(map.presetCrs().isValid())
def testRemoveNode(self): """Test removeNode method""" rc = self.mComposerPolyline.removeNode(100) self.assertEqual(rc, False) checker = QgsCompositionChecker("composerpolyline_defaultstyle", self.mComposition) checker.setControlPathPrefix("composer_polyline") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage self.assertEqual(self.mComposerPolyline.nodesSize(), 4) rc = self.mComposerPolyline.removeNode(3) self.assertEqual(rc, True) self.assertEqual(self.mComposerPolyline.nodesSize(), 3) checker = QgsCompositionChecker("composerpolyline_removednode", self.mComposition) checker.setControlPathPrefix("composer_polyline") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage
def testBlendModes(self): """Test that blend modes work for composer items.""" self.mComposerRect2.setBlendMode(QPainter.CompositionMode_Multiply) checker = QgsCompositionChecker() myPath = os.path.join(TEST_DATA_DIR, "control_images", "expected_composereffects", "composereffect_blend.png") myTestResult, myMessage = checker.testComposition("Composer effects blending", self.mComposition, myPath) self.mComposerRect2.setBlendMode(QPainter.CompositionMode_SourceOver) assert myTestResult == True, myMessage
def testBlendModes(self): """Test that blend modes work for composer items.""" self.mComposerRect2.setBlendMode(QPainter.CompositionMode_Multiply) checker = QgsCompositionChecker('composereffects_blend', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerRect2.setBlendMode(QPainter.CompositionMode_SourceOver) assert myTestResult == True, myMessage
def testTransparency(self): """Test that transparency works for composer items.""" self.mComposerRect2.setTransparency( 50 ) checker = QgsCompositionChecker('composereffects_transparency', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerRect2.setTransparency( 100 ) assert myTestResult == True, myMessage
def testRoundedRectangle(self): """Test rounded rectangle composer shape""" self.mComposerShape.setShapeType(QgsComposerShape.Rectangle) self.mComposerShape.setCornerRadius(30) checker = QgsCompositionChecker('composershapes_roundedrect', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerShape.setCornerRadius(0) assert myTestResult, myMessage
def table(self): TEST_DATA_DIR = unitTestDataPath() htmlItem = QgsComposerHtml( self.mComposition, False ) htmlFrame = QgsComposerFrame( self.mComposition, htmlItem, 0, 0, 100, 200 ) htmlFrame.setFrameEnabled( True ) htmlItem.addFrame( htmlFrame ) htmlItem.setUrl( QUrl( QString( "file:///%1" ).arg( QString( TEST_DATA_DIR ) + QDir.separator() + "html_table.html" ) ) ); checker = QgsCompositionChecker( ) result = checker.testComposition( "Composer html table", self.mComposition, QString( TEST_DATA_DIR + QDir.separator().toAscii() + "control_images" + QDir.separator().toAscii() + "expected_composerhtml" + QDir.separator().toAscii() + "composerhtml_table.png" ) ) self.mComposition.removeMultiFrame( htmlItem ) del htmlItem assert result == True
def testTransparency(self): """Test that transparency works for composer items.""" self.mComposerRect2.setOpacity(0.5) checker = QgsCompositionChecker('composereffects_transparency', self.mComposition) checker.setControlPathPrefix("composer_effects") myTestResult, myMessage = checker.testComposition() self.mComposerRect2.setOpacity(0) assert myTestResult, myMessage
def testRemoteImage(self): """Test fetching remote picture.""" self.composerPicture.setPicturePath( "http://localhost:" + str(TestQgsComposerPicture.port) + "/qgis_local_server/logo.png" ) checker = QgsCompositionChecker("composerpicture_remote", self.composition) checker.setControlPathPrefix("composer_picture") testResult, message = checker.testComposition() self.composerPicture.setPicturePath(self.pngImage) assert testResult, message
def overviewMap(self, mComposerMap, mComposition, TEST_DATA_DIR): overviewMap = QgsComposerMap( mComposition, 20, 130, 70, 70 ) overviewMap.setFrameEnabled( True ) mComposition.addComposerMap( overviewMap ) # zoom in mComposerMap.setNewExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ) overviewMap.setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3350923.125 ) ) overviewMap.setOverviewFrameMap( mComposerMap.id() ) checker = QgsCompositionChecker() testResult = checker.testComposition( "Composer map overview", mComposition, TEST_DATA_DIR + QDir().separator().toAscii() +"control_images" + QDir().separator().toAscii() + "expected_composermap" + QDir().separator().toAscii() + "composermap_landsat_overview.png" ) mComposition.removeComposerItem( overviewMap ) assert testResult == True
def testZebraStyle(self): self.mComposerMap.setGridFrameStyle(QgsComposerMap.Zebra) self.mComposerMap.setGridEnabled(True) checker = QgsCompositionChecker() myPngPath = os.path.join(TEST_DATA_DIR, 'control_images', 'expected_composermap', 'composermap_zebra_style.png') testResult, myMessage = checker.testComposition('Composer map zebra', self.mComposition, myPngPath) assert testResult == True, myMessage
def testRemoveNode(self): """Test removeNode method""" rc = self.mComposerPolygon.removeNode(100) self.assertEqual(rc, False) checker = QgsCompositionChecker( 'composerpolygon_defaultstyle', self.mComposition) checker.setControlPathPrefix("composer_polygon") myTestResult, myMessage = checker.testComposition() assert myTestResult, myMessage self.assertEqual(self.mComposerPolygon.nodesSize(), 4)
def testOverviewMapInvert(self): overviewMap = QgsComposerMap(self.mComposition, 20, 130, 70, 70) overviewMap.setFrameEnabled(True) self.mComposition.addComposerMap(overviewMap) # zoom in myRectangle = QgsRectangle(785462.375, 3341423.125, 789262.375, 3343323.125) self.mComposerMap.setNewExtent(myRectangle) myRectangle2 = QgsRectangle(781662.375, 3339523.125, 793062.375, 3350923.125) overviewMap.setNewExtent(myRectangle2) overviewMap.setOverviewFrameMap(self.mComposerMap.id()) overviewMap.setOverviewInverted(True) checker = QgsCompositionChecker() myPngPath = os.path.join(TEST_DATA_DIR, 'control_images', 'expected_composermap', 'composermap_landsat_overview_invert.png') myTestResult, myMessage = checker.testComposition( 'Composer map overview inverted', self.mComposition, myPngPath) self.mComposition.removeComposerItem(overviewMap) assert myTestResult == True, myMessage
def testMarkerGrid(self): myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setStyle(QgsComposerMapGrid.Markers) self.mComposerMap.grid().setCrossLength(2.0) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationEnabled(False) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_SourceOver) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_markergrid', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition() self.mComposerMap.grid().setStyle(QgsComposerMapGrid.Solid) self.mComposerMap.grid().setEnabled(False) self.mComposerMap.grid().setAnnotationEnabled(False) assert myTestResult, myMessage
def autoscale_render_test(self): self.mAtlasMap.setAtlasDriven(True) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Auto) self.mAtlasMap.setAtlasMargin(0.10) self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature(i) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_autoscale%d' % (i + 1), self.mComposition) checker.setControlPathPrefix("atlas") myTestResult, myMessage = checker.testComposition(0, 200) assert myTestResult self.mAtlas.endRender() self.mAtlasMap.setAtlasDriven(False) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Fixed) self.mAtlasMap.setAtlasMargin(0)
def autoscale_render_test_old_api(self): self.mAtlas.setComposerMap(self.mAtlasMap) self.mAtlas.setFixedScale(False) self.mAtlas.setMargin(0.10) self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature(i) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker( 'atlas_autoscale_old_api%d' % (i + 1), self.mComposition) myTestResult, myMessage = checker.testComposition(0, 200) assert myTestResult == True self.mAtlas.endRender() self.mAtlas.setFixedScale(True) self.mAtlas.setMargin(0) self.mAtlas.setComposerMap(None)
def filtering_render_test( self ): self.mAtlasMap.setNewExtent( QgsRectangle( 209838.166, 6528781.020, 610491.166, 6920530.620 ) ); self.mAtlas.setFixedScale( True ) self.mAtlas.setHideCoverage( False ) self.mAtlas.setSortFeatures( False ) self.mAtlas.setFilterFeatures( True ) self.mAtlas.setFeatureFilter( "substr(NAME_1,1,1)='P'" ) # select only 'Pays de la loire' self.mAtlas.beginRender() for i in range(0, 1): self.mAtlas.prepareForFeature( i ) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_filtering%d' % (i + 1), self.mComposition) myTestResult, myMessage = checker.testComposition() assert myTestResult == True self.mAtlas.endRender()
def hidden_render_test(self): self.mAtlasMap.setNewExtent( QgsRectangle(209838.166, 6528781.020, 610491.166, 6920530.620)) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Fixed) self.mAtlas.setHideCoverage(True) self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature(i) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_hiding%d' % (i + 1), self.mComposition) checker.setControlPathPrefix("atlas") myTestResult, myMessage = checker.testComposition(0, 200) assert myTestResult self.mAtlas.endRender() self.mAtlas.setHideCoverage(False)
def testGrid(self): """Test that we can create a grid for a map.""" myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.setGridEnabled(True) self.mComposerMap.setGridIntervalX(2000) self.mComposerMap.setGridIntervalY(2000) self.mComposerMap.setShowGridAnnotation(True) self.mComposerMap.setGridPenWidth(0.5) self.mComposerMap.setGridPenColor(QColor(0,255,0)) self.mComposerMap.setGridAnnotationPrecision(0) self.mComposerMap.setGridAnnotationPosition(QgsComposerMap.Disabled, QgsComposerMap.Left) self.mComposerMap.setGridAnnotationPosition( QgsComposerMap.OutsideMapFrame, QgsComposerMap.Right) self.mComposerMap.setGridAnnotationPosition(QgsComposerMap.Disabled, QgsComposerMap.Top) self.mComposerMap.setGridAnnotationPosition( QgsComposerMap.OutsideMapFrame, QgsComposerMap.Bottom) self.mComposerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, QgsComposerMap.Right) self.mComposerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, QgsComposerMap.Bottom) self.mComposerMap.setAnnotationFontColor(QColor(255,0,0,150)) self.mComposerMap.setGridBlendMode(QPainter.CompositionMode_Overlay) checker = QgsCompositionChecker() myPath = os.path.join(TEST_DATA_DIR, 'control_images', 'expected_composermap', 'composermap_landsat_grid.png') myTestResult, myMessage = checker.testComposition('Composer map grid', self.mComposition, myPath) self.mComposerMap.setGridEnabled(False) self.mComposerMap.setShowGridAnnotation(False) assert myTestResult == True, myMessage
def testInitialSizeSymbolMapUnits(self): """Test initial size of legend with a symbol size in map units""" point_path = os.path.join(TEST_DATA_DIR, 'points.shp') point_layer = QgsVectorLayer(point_path, 'points', 'ogr') QgsProject.instance().addMapLayers([point_layer]) marker_symbol = QgsMarkerSymbol.createSimple({'color': '#ff0000', 'outline_style': 'no', 'size': '5', 'size_unit': 'MapUnit'}) point_layer.setRenderer(QgsSingleSymbolRenderer(marker_symbol)) s = QgsMapSettings() s.setLayers([point_layer]) s.setCrsTransformEnabled(False) composition = QgsComposition(QgsProject.instance()) composition.setPaperSize(297, 210) composer_map = QgsComposerMap(composition, 20, 20, 80, 80) composer_map.setFrameEnabled(True) composer_map.setLayers([point_layer]) composition.addComposerMap(composer_map) composer_map.setNewExtent(point_layer.extent()) legend = QgsComposerLegend(composition) legend.setSceneRect(QRectF(120, 20, 80, 80)) legend.setFrameEnabled(True) legend.setFrameOutlineWidth(2) legend.setBackgroundColor(QColor(200, 200, 200)) legend.setTitle('') composition.addComposerLegend(legend) legend.setComposerMap(composer_map) checker = QgsCompositionChecker( 'composer_legend_mapunits', composition) checker.setControlPathPrefix("composer_legend") result, message = checker.testComposition() self.assertTrue(result, message) QgsProject.instance().removeMapLayers([point_layer.id()])
def sorting_render_test(self): self.mAtlasMap.setNewExtent( QgsRectangle(209838.166, 6528781.020, 610491.166, 6920530.620)) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Fixed) self.mAtlas.setHideCoverage(False) self.mAtlas.setSortFeatures(True) self.mAtlas.setSortKeyAttributeIndex(4) # departement name self.mAtlas.setSortAscending(False) self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature(i) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_sorting%d' % (i + 1), self.mComposition) myTestResult, myMessage = checker.testComposition(0, 200) assert myTestResult self.mAtlas.endRender()
def testFrameOnly(self): myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setStyle(QgsComposerMapGrid.FrameAnnotationsOnly) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationEnabled(False) self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.Zebra) self.mComposerMap.grid().setFramePenSize(0.5) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_SourceOver) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_gridframeonly', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerMap.grid().setStyle(QgsComposerMapGrid.Solid) self.mComposerMap.grid().setEnabled(False) self.mComposerMap.grid().setAnnotationEnabled(False) self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.NoFrame) assert myTestResult, myMessage
def predefinedscales_render_test(self): self.mAtlasMap.setNewExtent(QgsRectangle(209838.166, 6528781.020, 610491.166, 6920530.620)) self.mAtlasMap.setAtlasDriven(True) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Predefined) scales = [1800000, 5000000] self.mAtlas.setPredefinedScales(scales) for i, s in enumerate(self.mAtlas.predefinedScales()): assert s == scales[i] self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature(i) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_predefinedscales%d' % (i + 1), self.mComposition) checker.setControlPathPrefix("atlas") myTestResult, myMessage = checker.testComposition(0, 200) assert myTestResult self.mAtlas.endRender()
def testCrossGrid(self): myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setStyle(QgsComposerMapGrid.Cross) self.mComposerMap.grid().setCrossLength(2.0) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationEnabled(False) self.mComposerMap.grid().setGridLineColor(QColor(0, 255, 0)) self.mComposerMap.grid().setGridLineWidth(0.5) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_SourceOver) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_crossgrid', self.mComposition) myTestResult, myMessage = checker.testComposition() self.mComposerMap.grid().setStyle(QgsComposerMapGrid.Solid) self.mComposerMap.grid().setEnabled(False) self.mComposerMap.grid().setAnnotationEnabled(False) assert myTestResult, myMessage
def testResizeWithMapContent(self): """Test test legend resizes to match map content""" point_path = os.path.join(TEST_DATA_DIR, 'points.shp') point_layer = QgsVectorLayer(point_path, 'points', 'ogr') QgsProject.instance().addMapLayers([point_layer]) s = QgsMapSettings() s.setLayers([point_layer]) s.setCrsTransformEnabled(False) composition = QgsComposition(QgsProject.instance()) composition.setPaperSize(297, 210) composer_map = QgsComposerMap(composition, 20, 20, 80, 80) composer_map.setFrameEnabled(True) composer_map.setLayers([point_layer]) composition.addComposerMap(composer_map) composer_map.setNewExtent(point_layer.extent()) legend = QgsComposerLegend(composition) legend.setSceneRect(QRectF(120, 20, 80, 80)) legend.setFrameEnabled(True) legend.setFrameOutlineWidth(2) legend.setBackgroundColor(QColor(200, 200, 200)) legend.setTitle('') legend.setLegendFilterByMapEnabled(True) composition.addComposerLegend(legend) legend.setComposerMap(composer_map) composer_map.setNewExtent(QgsRectangle(-102.51, 41.16, -102.36, 41.30)) checker = QgsCompositionChecker('composer_legend_size_content', composition) checker.setControlPathPrefix("composer_legend") result, message = checker.testComposition() self.assertTrue(result, message) QgsProject.instance().removeMapLayers([point_layer.id()])
def testZebraStyle(self): self.mComposerMap.setGridFrameStyle(QgsComposerMap.Zebra) myRectangle = QgsRectangle(785462.375, 3341423.125, 789262.375, 3343323.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setGridLineColor(QColor(0, 0, 0)) self.mComposerMap.grid().setAnnotationFontColor(QColor(0, 0, 0)) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_SourceOver) self.mComposerMap.grid().setFrameStyle(QgsComposerMapGrid.Zebra) self.mComposerMap.grid().setFrameWidth(10) self.mComposerMap.grid().setFramePenSize(1) self.mComposerMap.grid().setGridLineWidth(0.5) self.mComposerMap.grid().setFramePenColor(QColor(255, 100, 0, 200)) self.mComposerMap.grid().setFrameFillColor1(QColor(50, 90, 50, 100)) self.mComposerMap.grid().setFrameFillColor2(QColor(200, 220, 100, 60)) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_zebrastyle', self.mComposition) myTestResult, myMessage = checker.testComposition(0, 100) assert myTestResult, myMessage
def testInteriorTicks(self): self.mComposerMap.setGridFrameStyle(QgsComposerMap.Zebra) myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationFontColor(QColor(0, 0, 0)) self.mComposerMap.grid().setBlendMode( QPainter.CompositionMode_SourceOver) self.mComposerMap.grid().setFrameStyle( QgsComposerMapGrid.InteriorTicks) self.mComposerMap.grid().setFrameWidth(10) self.mComposerMap.grid().setFramePenSize(1) self.mComposerMap.grid().setFramePenColor(QColor(0, 0, 0)) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setStyle( QgsComposerMapGrid.FrameAnnotationsOnly) checker = QgsCompositionChecker('composermap_interiorticks', self.mComposition) myTestResult, myMessage = checker.testComposition(0, 100) assert myTestResult == True, myMessage
def sorting_render_test( self ): self.mAtlasMap.setNewExtent( QgsRectangle( 209838.166, 6528781.020, 610491.166, 6920530.620 ) ); self.mAtlas.setFixedScale( True ) self.mAtlas.setHideCoverage( False ) self.mAtlas.setSortFeatures( True ) self.mAtlas.setSortKeyAttributeIndex( 4 ) # departement name self.mAtlas.setSortAscending( False ) self.mAtlas.beginRender() for i in range(0, 2): self.mAtlas.prepareForFeature( i ) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker() res = checker.testComposition( "Atlas sorting test", self.mComposition, \ QString( self.TEST_DATA_DIR ) + QDir.separator() + \ "control_images" + QDir.separator() + \ "expected_composermapatlas" + QDir.separator() + \ QString( "sorting_%1.png" ).arg( i ) ) assert res[0] == True self.mAtlas.endRender()
def testGrid(self): """Test that we can create a grid for a map.""" myRectangle = QgsRectangle(781662.375, 3339523.125, 793062.375, 3345223.125) self.mComposerMap.setNewExtent(myRectangle) self.mComposerMap.grid().setEnabled(True) self.mComposerMap.grid().setIntervalX(2000) self.mComposerMap.grid().setIntervalY(2000) self.mComposerMap.grid().setAnnotationEnabled(True) self.mComposerMap.grid().setGridLineColor(QColor(0, 255, 0)) self.mComposerMap.grid().setGridLineWidth(0.5) self.mComposerMap.grid().setAnnotationFont( QgsFontUtils.getStandardTestFont()) self.mComposerMap.grid().setAnnotationPrecision(0) self.mComposerMap.grid().setAnnotationDisplay( QgsComposerMapGrid.HideAll, QgsComposerMapGrid.Left) self.mComposerMap.grid().setAnnotationPosition( QgsComposerMapGrid.OutsideMapFrame, QgsComposerMapGrid.Right) self.mComposerMap.grid().setAnnotationDisplay( QgsComposerMapGrid.HideAll, QgsComposerMapGrid.Top) self.mComposerMap.grid().setAnnotationPosition( QgsComposerMapGrid.OutsideMapFrame, QgsComposerMapGrid.Bottom) self.mComposerMap.grid().setAnnotationDirection( QgsComposerMapGrid.Horizontal, QgsComposerMapGrid.Right) self.mComposerMap.grid().setAnnotationDirection( QgsComposerMapGrid.Horizontal, QgsComposerMapGrid.Bottom) self.mComposerMap.grid().setAnnotationFontColor(QColor(255, 0, 0, 150)) self.mComposerMap.grid().setBlendMode(QPainter.CompositionMode_Overlay) self.mComposerMap.updateBoundingRect() checker = QgsCompositionChecker('composermap_grid', self.mComposition) checker.setControlPathPrefix("composer_mapgrid") myTestResult, myMessage = checker.testComposition() self.mComposerMap.grid().setEnabled(False) self.mComposerMap.grid().setAnnotationEnabled(False) assert myTestResult, myMessage
def filtering_render_test( self ): self.mAtlasMap.setNewExtent( QgsRectangle( 209838.166, 6528781.020, 610491.166, 6920530.620 ) ); self.mAtlas.setFixedScale( True ) self.mAtlas.setHideCoverage( False ) self.mAtlas.setSortFeatures( False ) self.mAtlas.setFilterFeatures( True ) self.mAtlas.setFeatureFilter( "substr(NAME_1,1,1)='P'" ) # select only 'Pays de la loire' self.mAtlas.beginRender() for i in range(0, 1): self.mAtlas.prepareForFeature( i ) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker() res = checker.testComposition( "Atlas filtering test", self.mComposition, \ QString( self.TEST_DATA_DIR ) + QDir.separator() + \ "control_images" + QDir.separator() + \ "expected_composermapatlas" + QDir.separator() + \ QString( "filtering_%1.png" ).arg( i ) ) assert res[0] == True self.mAtlas.endRender()
def legend_test(self): self.mAtlasMap.setAtlasDriven(True) self.mAtlasMap.setAtlasScalingMode(QgsComposerMap.Auto) self.mAtlasMap.setAtlasMargin(0.10) # add a point layer ptLayer = QgsVectorLayer( "Point?crs=epsg:4326&field=attr:int(1)&field=label:string(20)", "points", "memory") pr = ptLayer.dataProvider() f1 = QgsFeature(1) f1.initAttributes(2) f1.setAttribute(0, 1) f1.setAttribute(1, "Test label 1") f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(-0.638, 48.954))) f2 = QgsFeature(2) f2.initAttributes(2) f2.setAttribute(0, 2) f2.setAttribute(1, "Test label 2") f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(-1.682, 48.550))) pr.addFeatures([f1, f2]) # categorized symbology r = QgsCategorizedSymbolRendererV2("attr", [ QgsRendererCategoryV2( 1, QgsMarkerSymbolV2.createSimple({"color": "255,0,0"}), "red"), QgsRendererCategoryV2( 2, QgsMarkerSymbolV2.createSimple({"color": "0,0,255"}), "blue") ]) ptLayer.setRendererV2(r) QgsMapLayerRegistry.instance().addMapLayer(ptLayer) # add the point layer to the map settings layers = self.mapSettings.layers() layers = [ptLayer.id()] + layers self.mapSettings.setLayers(layers) # add a legend legend = QgsComposerLegend(self.mComposition) legend.moveBy(200, 100) # sets the legend filter parameter legend.setComposerMap(self.mAtlasMap) legend.setLegendFilterOutAtlas(True) self.mComposition.addComposerLegend(legend) self.mAtlas.beginRender() self.mAtlas.prepareForFeature(0) self.mLabel1.adjustSizeToText() checker = QgsCompositionChecker('atlas_legend', self.mComposition) myTestResult, myMessage = checker.testComposition() assert myTestResult self.mAtlas.endRender() # restore state self.mapSettings.setLayers([layers[1]]) self.mComposition.removeComposerItem(legend) QgsMapLayerRegistry.instance().removeMapLayer(ptLayer.id())