From 6e49403163cb30517f97af55115003e693dd6462 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 20 Jul 2017 10:13:54 +1000 Subject: [PATCH] Fix QgsFieldComboBox::setField sets incorrect field when filter is present --- src/gui/qgsfieldcombobox.cpp | 2 +- tests/src/python/CMakeLists.txt | 1 + tests/src/python/test_qgsfieldcombobox.py | 65 +++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/src/python/test_qgsfieldcombobox.py diff --git a/src/gui/qgsfieldcombobox.cpp b/src/gui/qgsfieldcombobox.cpp index f2d4b679d70..0663eb9d587 100644 --- a/src/gui/qgsfieldcombobox.cpp +++ b/src/gui/qgsfieldcombobox.cpp @@ -62,7 +62,7 @@ void QgsFieldComboBox::setField( const QString &fieldName ) QModelIndex proxyIdx = mFieldProxyModel->mapFromSource( idx ); if ( proxyIdx.isValid() ) { - setCurrentIndex( idx.row() ); + setCurrentIndex( proxyIdx.row() ); emit fieldChanged( currentField() ); return; } diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index df4ab669b36..52602906698 100755 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -52,6 +52,7 @@ ADD_PYTHON_TEST(PyQgsExtentGroupBox test_qgsextentgroupbox.py) ADD_PYTHON_TEST(PyQgsFeature test_qgsfeature.py) ADD_PYTHON_TEST(PyQgsFeatureSink test_qgsfeaturesink.py) ADD_PYTHON_TEST(PyQgsFeatureSource test_qgsfeaturesource.py) +ADD_PYTHON_TEST(PyQgsFieldComboBoxTest test_qgsfieldcombobox.py) ADD_PYTHON_TEST(PyQgsFieldFormattersTest test_qgsfieldformatters.py) ADD_PYTHON_TEST(PyQgsFillSymbolLayers test_qgsfillsymbollayers.py) ADD_PYTHON_TEST(PyQgsProject test_qgsproject.py) diff --git a/tests/src/python/test_qgsfieldcombobox.py b/tests/src/python/test_qgsfieldcombobox.py new file mode 100644 index 00000000000..1e506115d8d --- /dev/null +++ b/tests/src/python/test_qgsfieldcombobox.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +"""QGIS Unit tests for QgsFieldComboBox + +.. note:: This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" +__author__ = 'Nyall Dawson' +__date__ = '20/07/2017' +__copyright__ = 'Copyright 2017, The QGIS Project' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import qgis # NOQA + +from qgis.core import QgsFields, QgsVectorLayer, QgsFieldProxyModel +from qgis.gui import QgsFieldComboBox +from qgis.PyQt.QtCore import QVariant, Qt + +from qgis.testing import start_app, unittest + +start_app() + + +def create_layer(): + layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer&field=fldint2:integer", + "addfeat", "memory") + assert layer.isValid() + return layer + + +def create_model(): + l = create_layer() + m = QgsFieldModel() + m.setLayer(l) + return l, m + + +class TestQgsFieldComboBox(unittest.TestCase): + + def testGettersSetters(self): + """ test combobox getters/setters """ + l = create_layer() + w = QgsFieldComboBox() + w.setLayer(l) + self.assertEqual(w.layer(), l) + + w.setField('fldint') + self.assertEqual(w.currentField(), 'fldint') + + def testFilter(self): + """ test setting field with filter """ + l = create_layer() + w = QgsFieldComboBox() + w.setLayer(l) + w.setFilters(QgsFieldProxyModel.Int) + self.assertEqual(w.layer(), l) + + w.setField('fldint') + self.assertEqual(w.currentField(), 'fldint') + + +if __name__ == '__main__': + unittest.main()