def testStoredExpressions(self):
        """Check that expressions can be stored and retrieved"""

        w = QgsExpressionBuilderWidget()

        w.expressionTree().saveToUserExpressions(
            'Stored Expression Number One', '"field_one" = 123',
            "An humble expression")
        items = w.findExpressions('Stored Expression Number One')
        self.assertEqual(len(items), 1)
        exp = items[0]
        self.assertEqual(exp.getExpressionText(), '"field_one" = 123')

        # Add another one with the same name (overwrite)
        w.expressionTree().saveToUserExpressions(
            'Stored Expression Number One', '"field_two" = 456',
            "An even more humble expression")
        items = w.findExpressions('Stored Expression Number One')
        self.assertEqual(len(items), 1)
        exp = items[0]
        self.assertEqual(exp.getExpressionText(), '"field_two" = 456')

        # Reload by creating a new widget
        w = QgsExpressionBuilderWidget()
        items = w.findExpressions('Stored Expression Number One')
        self.assertEqual(len(items), 1)
        exp = items[0]
        self.assertEqual(exp.getExpressionText(), '"field_two" = 456')

        # Test removal
        w.expressionTree().removeFromUserExpressions(
            'Stored Expression Number One')
        items = w.findExpressions('Stored Expression Number One')
        self.assertEqual(len(items), 0)
Ejemplo n.º 2
0
    def testValuesList(self):
        """
        Test the content of values list widget
        """

        w = QgsExpressionBuilderWidget()

        valuesList = w.findChild(QListView, 'mValuesListView')
        self.assertTrue(valuesList)

        valuesModel = valuesList.model()
        self.assertTrue(valuesModel)

        layer = QgsVectorLayer(
            "None?field=myarray:string[]&field=mystr:string&field=myint:integer&field=myintarray:int[]&field=mydoublearray:double[]",
            "arraylayer", "memory")

        self.assertTrue(layer.isValid())

        # add some features, one has invalid geometry
        pr = layer.dataProvider()
        f1 = QgsFeature(1)
        f1.setAttributes([["one 'item'", 'B'], "another 'item'", 0, [1, 2], [1.1, 2.1]])
        f2 = QgsFeature(2)
        f2.setAttributes([['C'], "", 1, [3, 4], [-0.1, 2.0]])
        f3 = QgsFeature(3)
        f3.setAttributes([[], "test", 2, [], []])
        f4 = QgsFeature(4)
        self.assertTrue(pr.addFeatures([f1, f2, f3, f4]))

        w.setLayer(layer)

        # test string array
        items = w.expressionTree().findExpressions("myarray")
        self.assertEqual(len(items), 1)
        currentIndex = w.expressionTree().model().mapFromSource(items[0].index())
        self.assertTrue(currentIndex.isValid())
        w.expressionTree().setCurrentIndex(currentIndex)
        self.assertTrue(w.expressionTree().currentItem())

        w.loadAllValues()

        datas = sorted([(valuesModel.data(valuesModel.index(i, 0), Qt.DisplayRole), valuesModel.data(valuesModel.index(i, 0), Qt.UserRole + 1)) for i in range(4)])
        self.assertEqual(datas, [(" [array()]", "array()"),
                                 ("C [array('C')]", "array('C')"),
                                 ("NULL [NULL]", "NULL"),
                                 ("one 'item', B [array('one ''item''', 'B')]", "array('one ''item''', 'B')")])

        # test string
        items = w.expressionTree().findExpressions("mystr")
        self.assertEqual(len(items), 1)
        currentIndex = w.expressionTree().model().mapFromSource(items[0].index())
        self.assertTrue(currentIndex.isValid())
        w.expressionTree().setCurrentIndex(currentIndex)
        self.assertTrue(w.expressionTree().currentItem())

        w.loadAllValues()

        datas = sorted([(valuesModel.data(valuesModel.index(i, 0), Qt.DisplayRole), valuesModel.data(valuesModel.index(i, 0), Qt.UserRole + 1)) for i in range(4)])

        self.assertEqual(datas, [("", "''"),
                                 ("NULL [NULL]", "NULL"),
                                 ("another 'item'", "'another ''item'''"),
                                 ("test", "'test'")])

        # test int
        items = w.expressionTree().findExpressions("myint")
        self.assertEqual(len(items), 1)
        currentIndex = w.expressionTree().model().mapFromSource(items[0].index())
        self.assertTrue(currentIndex.isValid())
        w.expressionTree().setCurrentIndex(currentIndex)
        self.assertTrue(w.expressionTree().currentItem())

        w.loadAllValues()

        datas = sorted([(valuesModel.data(valuesModel.index(i, 0), Qt.DisplayRole), valuesModel.data(valuesModel.index(i, 0), Qt.UserRole + 1)) for i in range(4)])

        self.assertEqual(datas, [("0", "0"),
                                 ("1", "1"),
                                 ("2", "2"),
                                 ("NULL [NULL]", "NULL")])

        # test int array
        items = w.expressionTree().findExpressions("myintarray")
        self.assertEqual(len(items), 1)
        currentIndex = w.expressionTree().model().mapFromSource(items[0].index())
        self.assertTrue(currentIndex.isValid())
        w.expressionTree().setCurrentIndex(currentIndex)
        self.assertTrue(w.expressionTree().currentItem())

        w.loadAllValues()

        datas = sorted([(valuesModel.data(valuesModel.index(i, 0), Qt.DisplayRole), valuesModel.data(valuesModel.index(i, 0), Qt.UserRole + 1)) for i in range(4)])
        self.assertEqual(datas, [(" [array()]", "array()"),
                                 ("1, 2 [array(1, 2)]", "array(1, 2)"),
                                 ("3, 4 [array(3, 4)]", "array(3, 4)"),
                                 ("NULL [NULL]", "NULL"),
                                 ])

        # test double array
        items = w.expressionTree().findExpressions("mydoublearray")
        self.assertEqual(len(items), 1)
        currentIndex = w.expressionTree().model().mapFromSource(items[0].index())
        self.assertTrue(currentIndex.isValid())
        w.expressionTree().setCurrentIndex(currentIndex)
        self.assertTrue(w.expressionTree().currentItem())

        w.loadAllValues()

        datas = sorted([(valuesModel.data(valuesModel.index(i, 0), Qt.DisplayRole), valuesModel.data(valuesModel.index(i, 0), Qt.UserRole + 1)) for i in range(4)])
        self.assertEqual(datas, [(" [array()]", "array()"),
                                 ("-0.1, 2 [array(-0.1, 2)]", "array(-0.1, 2)"),
                                 ("1.1, 2.1 [array(1.1, 2.1)]", "array(1.1, 2.1)"),
                                 ("NULL [NULL]", "NULL"),
                                 ])