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)
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"), ])