Ejemplo n.º 1
0
    def testProperties(self):
        model = QgsAggregateMappingModel(self.source_fields)

        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[0].source, '"source_field1"')
        self.assertEqual(mapping[0].aggregate, 'concatenate')
        self.assertEqual(mapping[0].delimiter, ',')
        self.assertEqual(mapping[1].field.name(), 'source_field2')
        self.assertEqual(mapping[1].source, '"source_field2"')
        self.assertEqual(mapping[1].aggregate, 'sum')
        self.assertEqual(mapping[1].delimiter, ',')

        mapping[0].source = 'upper("source_field2")'
        mapping[0].aggregate = 'first_value'
        mapping[0].delimiter = '|'
        new_aggregate = QgsAggregateMappingModel.Aggregate()
        new_aggregate.field = QgsField('output_field3',
                                       QVariant.Double,
                                       len=4,
                                       prec=2)
        new_aggregate.source = 'randf(1,2)'
        new_aggregate.aggregate = 'mean'
        new_aggregate.delimiter = '*'
        mapping.append(new_aggregate)

        model.setMapping(mapping)

        self.assertEqual(model.rowCount(), 3)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'upper("source_field2")')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'first_value')
        self.assertEqual(model.data(model.index(0, 2), Qt.DisplayRole), '|')
        self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole),
                         'source_field1')
        self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole),
                         QVariant.String)
        self.assertEqual(model.data(model.index(0, 5), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(0, 6), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         '"source_field2"')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'sum')
        self.assertEqual(model.data(model.index(1, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole),
                         'source_field2')
        self.assertEqual(model.data(model.index(1, 4), Qt.DisplayRole),
                         QVariant.Int)
        self.assertEqual(model.data(model.index(1, 5), Qt.DisplayRole), 10)
        self.assertEqual(model.data(model.index(1, 6), Qt.DisplayRole), 8)
        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         'randf(1,2)')
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'mean')
        self.assertEqual(model.data(model.index(2, 2), Qt.DisplayRole), '*')
        self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole),
                         'output_field3')
        self.assertEqual(model.data(model.index(2, 4), Qt.DisplayRole),
                         QVariant.Double)
        self.assertEqual(model.data(model.index(2, 5), Qt.DisplayRole), 4)
        self.assertEqual(model.data(model.index(2, 6), Qt.DisplayRole), 2)
Ejemplo n.º 2
0
    def testModel(self):
        """Test the mapping model"""

        model = QgsAggregateMappingModel(self.source_fields)
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertIsNone(model.data(model.index(9999, 0), Qt.DisplayRole))

        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         '"source_field1"')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'concatenate')
        self.assertEqual(model.data(model.index(0, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole),
                         'source_field1')
        self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole),
                         QVariant.String)
        self.assertEqual(model.data(model.index(0, 5), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(0, 6), Qt.DisplayRole), 0)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         '"source_field2"')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'sum')
        self.assertEqual(model.data(model.index(1, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole),
                         'source_field2')
        self.assertEqual(model.data(model.index(1, 4), Qt.DisplayRole),
                         QVariant.Int)
        self.assertEqual(model.data(model.index(1, 5), Qt.DisplayRole), 10)
        self.assertEqual(model.data(model.index(1, 6), Qt.DisplayRole), 8)

        # Test expression scope
        ctx = model.contextGenerator().createExpressionContext()
        self.assertTrue('source_field1' in ctx.fields().names())

        # Test add fields
        model.appendField(QgsField('field3', QVariant.String),
                          'upper("field3")', 'first_value')
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         'upper("field3")')
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'first_value')
        self.assertEqual(model.data(model.index(2, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole),
                         'field3')
        self.assertEqual(model.data(model.index(2, 4), Qt.DisplayRole),
                         QVariant.String)
        self.assertEqual(model.data(model.index(2, 5), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(2, 6), Qt.DisplayRole), 0)

        # Test remove field
        model.removeField(model.index(1, 0))
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         '"source_field1"')
        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'upper("field3")')

        # Test edit fields
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[0].aggregate, 'concatenate')
        self.assertEqual(mapping[0].delimiter, ',')
        self.assertEqual(mapping[0].source, '"source_field1"')
        self.assertEqual(mapping[1].field.name(), 'field3')
        self.assertEqual(mapping[1].aggregate, 'first_value')
        self.assertEqual(mapping[1].delimiter, ',')
        self.assertEqual(mapping[1].source, 'upper("field3")')

        # Test move up or down
        self.assertFalse(model.moveUp(model.index(0, 0)))
        self.assertFalse(model.moveUp(model.index(100, 0)))
        self.assertFalse(model.moveDown(model.index(1, 0)))
        self.assertFalse(model.moveDown(model.index(100, 0)))

        self.assertTrue(model.moveDown(model.index(0, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'field3')
        self.assertEqual(mapping[1].field.name(), 'source_field1')

        self.assertTrue(model.moveUp(model.index(1, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[1].field.name(), 'field3')