示例#1
0
    def test_algorithm(self):
        geocoder = TestGeocoder()

        alg = TestGeocoderAlgorithm(geocoder)
        alg.initParameters()

        fields = QgsFields()
        fields.append(QgsField('some_pk', QVariant.Int))
        fields.append(QgsField('address', QVariant.String))

        f = QgsFeature(fields)
        f.initAttributes(2)
        f['some_pk'] = 17

        params = {'FIELD': 'address'}

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        self.assertTrue(alg.prepareAlgorithm(params, context, feedback))

        output_fields = alg.outputFields(fields)
        self.assertEqual([f.name() for f in output_fields],
                         ['some_pk', 'address'])
        self.assertEqual([f.type() for f in output_fields],
                         [QVariant.Int, QVariant.String])

        # empty field
        res = alg.processFeature(f, context, feedback)
        self.assertEqual(len(res), 1)
        self.assertTrue(res[0].geometry().isNull())
        self.assertEqual(res[0].attributes(), [17, NULL])

        # no result
        f['address'] = 'c'
        res = alg.processFeature(f, context, feedback)
        self.assertEqual(len(res), 1)
        self.assertTrue(res[0].geometry().isNull())
        self.assertEqual(res[0].attributes(), [17, 'c'])

        f['address'] = 'a'
        res = alg.processFeature(f, context, feedback)
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0].geometry().asWkt(), 'Point (1 2)')
        self.assertEqual(res[0].attributes(), [17, 'a'])

        f['address'] = 'b'
        res = alg.processFeature(f, context, feedback)
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0].geometry().asWkt(), 'Point (11 12)')
        self.assertEqual(res[0].attributes(), [17, 'b'])