Skip to content

Commit e4a94bc

Browse files
committed
Add unit tests for QgsRasterBandComboBox
1 parent c9bfb9f commit e4a94bc

File tree

3 files changed

+132
-1
lines changed

3 files changed

+132
-1
lines changed

src/gui/raster/qgsrasterbandcombobox.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ QgsRasterBandComboBox::QgsRasterBandComboBox( QWidget *parent )
2525
{
2626
emit bandChanged( currentIndex() >= 0 ? currentData().toInt() : -1 );
2727
} );
28+
setEnabled( false );
2829
}
2930

3031
QgsRasterLayer *QgsRasterBandComboBox::layer() const
@@ -41,6 +42,8 @@ void QgsRasterBandComboBox::setLayer( QgsMapLayer *layer )
4142
{
4243
QgsRasterLayer *rl = qobject_cast< QgsRasterLayer * >( layer );
4344
mLayer = rl;
45+
int oldBand = currentBand();
46+
4447
blockSignals( true );
4548
clear();
4649

@@ -63,7 +66,7 @@ void QgsRasterBandComboBox::setLayer( QgsMapLayer *layer )
6366
setEnabled( count() > 1 );
6467

6568
if ( count() > 0 )
66-
setCurrentIndex( 0 );
69+
setCurrentIndex( findData( oldBand ) >= 0 ? findData( oldBand ) : 0 );
6770

6871
blockSignals( false );
6972
emit bandChanged( currentIndex() >= 0 ? currentData().toInt() : -1 );

tests/src/python/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ ADD_PYTHON_TEST(PyQgsPointDisplacementRenderer test_qgspointdisplacementrenderer
103103
ADD_PYTHON_TEST(PyQgsProjectionSelectionWidgets test_qgsprojectionselectionwidgets.py)
104104
ADD_PYTHON_TEST(PyQgsRange test_qgsrange.py)
105105
ADD_PYTHON_TEST(PyQgsRangeWidgets test_qgsrangewidgets.py)
106+
ADD_PYTHON_TEST(PyQgsRasterBandComboBox test_qgsrasterbandcombobox.py)
106107
ADD_PYTHON_TEST(PyQgsRasterFileWriter test_qgsrasterfilewriter.py)
107108
ADD_PYTHON_TEST(PyQgsRasterFileWriterTask test_qgsrasterfilewritertask.py)
108109
ADD_PYTHON_TEST(PyQgsRasterLayer test_qgsrasterlayer.py)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsRasterBandComboBox.
3+
4+
.. note:: This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation; either version 2 of the License, or
7+
(at your option) any later version.
8+
"""
9+
__author__ = 'Nyall Dawson'
10+
__date__ = '09/05/2017'
11+
__copyright__ = 'Copyright 2017, The QGIS Project'
12+
# This will get replaced with a git SHA1 when you do a git archive
13+
__revision__ = '$Format:%H$'
14+
15+
import qgis # NOQA
16+
import os
17+
18+
from qgis.core import QgsRasterLayer
19+
from qgis.gui import QgsRasterBandComboBox
20+
from qgis.testing import start_app, unittest
21+
from qgis.PyQt.QtCore import QFileInfo
22+
from qgis.PyQt.QtTest import QSignalSpy
23+
from utilities import unitTestDataPath
24+
25+
start_app()
26+
27+
28+
class TestQgsRasterBandComboBox(unittest.TestCase):
29+
30+
def testNoLayer(self):
31+
"""
32+
Test widget with no layer
33+
"""
34+
35+
combo = QgsRasterBandComboBox()
36+
self.assertFalse(combo.layer())
37+
self.assertEqual(combo.currentBand(), -1)
38+
self.assertFalse(combo.isEnabled())
39+
40+
combo.setShowNotSetOption(True)
41+
self.assertEqual(combo.currentBand(), -1)
42+
self.assertFalse(combo.isEnabled())
43+
44+
combo.setBand(11111)
45+
self.assertEqual(combo.currentBand(), -1)
46+
combo.setBand(-11111)
47+
self.assertEqual(combo.currentBand(), -1)
48+
49+
def testOneBandRaster(self):
50+
path = os.path.join(unitTestDataPath('raster'),
51+
'band1_float32_noct_epsg4326.tif')
52+
info = QFileInfo(path)
53+
base_name = info.baseName()
54+
layer = QgsRasterLayer(path, base_name)
55+
self.assertTrue(layer)
56+
57+
combo = QgsRasterBandComboBox()
58+
combo.setLayer(layer)
59+
self.assertEqual(combo.layer(), layer)
60+
self.assertEqual(combo.currentBand(), 1)
61+
# only one choice, should be disabled
62+
self.assertEqual(combo.count(), 1)
63+
self.assertFalse(combo.isEnabled())
64+
65+
combo.setShowNotSetOption(True)
66+
self.assertEqual(combo.currentBand(), 1)
67+
self.assertEqual(combo.count(), 2)
68+
self.assertTrue(combo.isEnabled())
69+
combo.setBand(-1)
70+
self.assertEqual(combo.currentBand(), -1)
71+
combo.setBand(1)
72+
self.assertEqual(combo.currentBand(), 1)
73+
74+
combo.setShowNotSetOption(False)
75+
self.assertEqual(combo.currentBand(), 1)
76+
self.assertEqual(combo.count(), 1)
77+
self.assertFalse(combo.isEnabled())
78+
79+
def testMultiBandRaster(self):
80+
path = os.path.join(unitTestDataPath('raster'),
81+
'band3_float32_noct_epsg4326.tif')
82+
info = QFileInfo(path)
83+
base_name = info.baseName()
84+
layer = QgsRasterLayer(path, base_name)
85+
self.assertTrue(layer)
86+
87+
combo = QgsRasterBandComboBox()
88+
combo.setLayer(layer)
89+
self.assertEqual(combo.layer(), layer)
90+
self.assertEqual(combo.currentBand(), 1)
91+
self.assertEqual(combo.count(), 3)
92+
self.assertTrue(combo.isEnabled())
93+
combo.setBand(2)
94+
self.assertEqual(combo.currentBand(), 2)
95+
96+
combo.setShowNotSetOption(True)
97+
self.assertEqual(combo.currentBand(), 2)
98+
self.assertEqual(combo.count(), 4)
99+
self.assertTrue(combo.isEnabled())
100+
101+
combo.setShowNotSetOption(False)
102+
self.assertEqual(combo.currentBand(), 2)
103+
self.assertEqual(combo.count(), 3)
104+
self.assertTrue(combo.isEnabled())
105+
106+
def testSignals(self):
107+
path = os.path.join(unitTestDataPath('raster'),
108+
'band3_float32_noct_epsg4326.tif')
109+
info = QFileInfo(path)
110+
base_name = info.baseName()
111+
layer = QgsRasterLayer(path, base_name)
112+
self.assertTrue(layer)
113+
114+
combo = QgsRasterBandComboBox()
115+
combo.setLayer(layer)
116+
117+
signal_spy = QSignalSpy(combo.bandChanged)
118+
combo.setBand(2)
119+
self.assertEqual(len(signal_spy), 1)
120+
self.assertEqual(signal_spy[0][0], 2)
121+
combo.setBand(3)
122+
self.assertEqual(len(signal_spy), 2)
123+
self.assertEqual(signal_spy[1][0], 3)
124+
125+
126+
if __name__ == '__main__':
127+
unittest.main()

0 commit comments

Comments
 (0)