def setUp(self):
     self.bucketFill = BucketFill(IFACE)
     self.bucketFill.initActions()
예제 #2
0
 def setUp(self):
     self.bucketFill = BucketFill(IFACE)
     self.bucketFill.initActions()
class BucketFillTest(unittest.TestCase):
    """
    BucketFill Test Suite.
    """
    def setUp(self):
        self.bucketFill = BucketFill(IFACE)
        self.bucketFill.initActions()

    def tearDown(self):
        pass

    def prepareTestCanvas(self):
        """
        Sets parameters for a test CANVAS.
        """
        loadLayers()
        setCanvasCrs(4326, True)
        CANVAS.resize(QtCore.QSize(400, 400))
        CANVAS.zoomToFullExtent()

    def testCanvasIsValid(self):
        """
        Check if the plugin has a valid CANVAS.
        """
        myMessage = "Plugin was not initialised with a valid CANVAS."
        assert self.bucketFill.iface.mapCanvas().width() == 400, myMessage

    def testEnableBucketTool(self):
        """
        Check that enabling the bucket tool works.
        """
        self.bucketFill.enableBucketTool()
        myMessage = 'Unable to enable the bucketfill map tool'
        assert self.bucketFill.bucketFillAction.isEnabled(), myMessage

    def testSetColorForClass(self):
        """
        Test that clicking the CANVAS sets the current class
        color if the layer is a vector layer.
        """
        self.prepareTestCanvas()
        #self.bucketFill.setColorForClass(
        #                        QPoint(50, 15), QtCore.Qt.LeftButton)
        myColor = QColor(CANVAS.canvasPixmap().toImage().pixel(50, 15))
        # Just for if you want to see what it has rendered
        CANVAS.saveAsImage('test.png')
        # expected R: 182 G: 109 B: 194
        myExpectedColor = QColor(182, 109, 194)
        myMessage = (('Unexpected color\n Received R: %i G: %i B: %i '
                    '\n Expected: R: %i G: %i B: %i') %
                      (myColor.red(),
                       myColor.green(),
                       myColor.blue(),
                       myExpectedColor.red(),
                       myExpectedColor.green(),
                       myExpectedColor.blue()))
        assert myColor == myExpectedColor, myMessage

    def testQGISEnvironment(self):
        """
        QGIS environment has the expected providers.
        """

        r = QgsProviderRegistry.instance()
        #for item in r.providerList():
        #    print str(item)

        print 'Provider count: %s' % len(r.providerList())
        assert 'gdal' in r.providerList()
        assert 'ogr' in r.providerList()

    def testGetActiveVectorLayer(self):
        """
        Tests that the active layer is a vector.
        """
        #check when no layers are loaded that an exception is thrown
        myExceptionFlag = False
        myLayer = None
        try:
            myLayer = self.bucketFill.getActiveVectorLayer()
        except:
            #good we expect an error!
            myExceptionFlag = True
        myMessage = ('Expected an exception to be raised when no layer'
                     'is present, but none was received.')
        assert myExceptionFlag == True, myMessage

        # Now test that when a layer is loaded that we get
        # the expected response
        loadLayers()
        CANVAS.zoomToFullExtent()
        try:
            myLayer = self.bucketFill.getActiveVectorLayer()
        except:
            myErrorMessage = 'Layer could not be identified as a vector.'
            assert myLayer.isValid(), myErrorMessage

    def testGetStyleClassList(self):
        """
        Tests that a list of classes is received.
        """
        loadLayers()
        myLayer = self.bucketFill.getActiveVectorLayer()
        myList = self.bucketFill.getStyleClassList(myLayer)
        myMessage = 'Style list for layer is empty.'
        assert len(myList) > 0, myMessage

    def testGetClickBbox(self):
        """
        Tests that a click returns a small bbox.
        """
        # pixel coords for fake click
        self.prepareTestCanvas()
        myPoint = QgsPoint(50, 15)
        myBox = self.bucketFill.getClickBbox(myPoint)
        myExpectedBox = QgsRectangle(49.99850465,
                                     14.99850465,
                                     50.00149535,
                                     15.00149535)
        myMessage = ('Bounding box was incorrect. Received values %s'
                     ' Expected values %s' % (
                        str('%s, %s, %s, %s' % (
                            myBox.xMinimum(), myBox.yMinimum(),
                            myBox.xMaximum(), myBox.yMaximum()
                            )),
                        str('%s, %s, %s, %s' % (
                            myExpectedBox.xMinimum(), myExpectedBox.yMinimum(),
                            myExpectedBox.xMaximum(), myExpectedBox.yMaximum()
                            ))
                    ))
        assert (round(myBox.xMinimum(), 9) ==
                round(myExpectedBox.xMinimum(), 9) and
                round(myBox.xMaximum(), 9) ==
                round(myExpectedBox.xMaximum(), 9) and
                round(myBox.yMinimum(), 9) ==
                round(myExpectedBox.yMinimum(), 9) and
                round(myBox.yMaximum(), 9) ==
                round(myExpectedBox.yMaximum(), 9)), myMessage

    def testGetFirstFeature(self):
        """
        Tests that a feature is returned.
        """
        self.prepareTestCanvas()
        myLayer = self.bucketFill.getActiveVectorLayer()
        myTestBox = QgsRectangle(TEST_BOX[0], TEST_BOX[1],
                                 TEST_BOX[2], TEST_BOX[3])

        myFeatureCount = myLayer.featureCount()
        if myFeatureCount > 0:
            myFeature = self.bucketFill.getFirstFeature(myLayer, myTestBox)
            print myFeature
            myMessage = ('Returned object was not a feature.')
            assert myFeature.type() == QgsFeature, myMessage
        else:
            myMessage = ('No features found in layer.')
            assert 1 == 0, myMessage
예제 #4
0
class BucketFillTest(unittest.TestCase):
    """
    BucketFill Test Suite.
    """
    def setUp(self):
        self.bucketFill = BucketFill(IFACE)
        self.bucketFill.initActions()

    def tearDown(self):
        pass

    def prepareTestCanvas(self):
        """
        Sets parameters for a test CANVAS.
        """
        loadLayers()
        setCanvasCrs(4326, True)
        CANVAS.resize(QtCore.QSize(400, 400))
        CANVAS.zoomToFullExtent()

    def testCanvasIsValid(self):
        """
        Check if the plugin has a valid CANVAS.
        """
        myMessage = "Plugin was not initialised with a valid CANVAS."
        assert self.bucketFill.iface.mapCanvas().width() == 400, myMessage

    def testEnableBucketTool(self):
        """
        Check that enabling the bucket tool works.
        """
        self.bucketFill.enableBucketTool()
        myMessage = 'Unable to enable the bucketfill map tool'
        assert self.bucketFill.bucketFillAction.isEnabled(), myMessage

    def testSetColorForClass(self):
        """
        Test that clicking the CANVAS sets the current class
        color if the layer is a vector layer.
        """
        self.prepareTestCanvas()
        #self.bucketFill.setColorForClass(
        #                        QPoint(50, 15), QtCore.Qt.LeftButton)
        myColor = QColor(CANVAS.canvasPixmap().toImage().pixel(50, 15))
        # Just for if you want to see what it has rendered
        CANVAS.saveAsImage('test.png')
        # expected R: 182 G: 109 B: 194
        myExpectedColor = QColor(182, 109, 194)
        myMessage = (('Unexpected color\n Received R: %i G: %i B: %i '
                      '\n Expected: R: %i G: %i B: %i') %
                     (myColor.red(), myColor.green(), myColor.blue(),
                      myExpectedColor.red(), myExpectedColor.green(),
                      myExpectedColor.blue()))
        assert myColor == myExpectedColor, myMessage

    def testQGISEnvironment(self):
        """
        QGIS environment has the expected providers.
        """

        r = QgsProviderRegistry.instance()
        #for item in r.providerList():
        #    print str(item)

        print 'Provider count: %s' % len(r.providerList())
        assert 'gdal' in r.providerList()
        assert 'ogr' in r.providerList()

    def testGetActiveVectorLayer(self):
        """
        Tests that the active layer is a vector.
        """
        #check when no layers are loaded that an exception is thrown
        myExceptionFlag = False
        myLayer = None
        try:
            myLayer = self.bucketFill.getActiveVectorLayer()
        except:
            #good we expect an error!
            myExceptionFlag = True
        myMessage = ('Expected an exception to be raised when no layer'
                     'is present, but none was received.')
        assert myExceptionFlag == True, myMessage

        # Now test that when a layer is loaded that we get
        # the expected response
        loadLayers()
        CANVAS.zoomToFullExtent()
        try:
            myLayer = self.bucketFill.getActiveVectorLayer()
        except:
            myErrorMessage = 'Layer could not be identified as a vector.'
            assert myLayer.isValid(), myErrorMessage

    def testGetStyleClassList(self):
        """
        Tests that a list of classes is received.
        """
        loadLayers()
        myLayer = self.bucketFill.getActiveVectorLayer()
        myList = self.bucketFill.getStyleClassList(myLayer)
        myMessage = 'Style list for layer is empty.'
        assert len(myList) > 0, myMessage

    def testGetClickBbox(self):
        """
        Tests that a click returns a small bbox.
        """
        # pixel coords for fake click
        self.prepareTestCanvas()
        myPoint = QgsPoint(50, 15)
        myBox = self.bucketFill.getClickBbox(myPoint)
        myExpectedBox = QgsRectangle(49.99850465, 14.99850465, 50.00149535,
                                     15.00149535)
        myMessage = (
            'Bounding box was incorrect. Received values %s'
            ' Expected values %s' %
            (str('%s, %s, %s, %s' % (myBox.xMinimum(), myBox.yMinimum(),
                                     myBox.xMaximum(), myBox.yMaximum())),
             str('%s, %s, %s, %s' %
                 (myExpectedBox.xMinimum(), myExpectedBox.yMinimum(),
                  myExpectedBox.xMaximum(), myExpectedBox.yMaximum()))))
        assert (round(myBox.xMinimum(), 9) == round(
            myExpectedBox.xMinimum(), 9) and round(myBox.xMaximum(), 9)
                == round(myExpectedBox.xMaximum(), 9) and round(
                    myBox.yMinimum(), 9) == round(myExpectedBox.yMinimum(), 9)
                and round(myBox.yMaximum(), 9) == round(
                    myExpectedBox.yMaximum(), 9)), myMessage

    def testGetFirstFeature(self):
        """
        Tests that a feature is returned.
        """
        self.prepareTestCanvas()
        myLayer = self.bucketFill.getActiveVectorLayer()
        myTestBox = QgsRectangle(TEST_BOX[0], TEST_BOX[1], TEST_BOX[2],
                                 TEST_BOX[3])

        myFeatureCount = myLayer.featureCount()
        if myFeatureCount > 0:
            myFeature = self.bucketFill.getFirstFeature(myLayer, myTestBox)
            print myFeature
            myMessage = ('Returned object was not a feature.')
            assert myFeature.type() == QgsFeature, myMessage
        else:
            myMessage = ('No features found in layer.')
            assert 1 == 0, myMessage