Skip to content

Commit f3d9e19

Browse files
authored
Merge pull request #6989 from ales-erjavec/fixes/owhierarchicalclustering-colors-index-error
[FIX] owhierarchicalclustering: Fix IndexError
2 parents 876acb2 + bb1c1c7 commit f3d9e19

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

Orange/widgets/unsupervised/owhierarchicalclustering.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,10 @@ def data(self, index, role=Qt.DisplayRole):
149149
return font
150150
if role == Qt.BackgroundRole:
151151
if self.__colors is not None:
152-
return self.__colors[index.row()]
152+
if index.row() < len(self.__colors):
153+
return self.__colors[index.row()]
154+
else:
155+
return QColor()
153156
elif not any(self) and self.subset: # no labels, no color, but subset
154157
return QColor(0, 0, 0)
155158
if role == Qt.UserRole and self.subset:

Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring, protected-access
3+
import unittest
34
import warnings
45

56
import numpy as np
67

78
from AnyQt.QtCore import QPoint, Qt
9+
from AnyQt.QtGui import QColor
810
from AnyQt.QtTest import QTest
911

1012
import Orange.misc
@@ -13,7 +15,7 @@
1315
from Orange.misc import DistMatrix
1416
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin
1517
from Orange.widgets.unsupervised.owhierarchicalclustering import \
16-
OWHierarchicalClustering
18+
OWHierarchicalClustering, SelectedLabelsModel
1719

1820

1921
class TestOWHierarchicalClustering(WidgetTest, WidgetOutputsTestMixin):
@@ -226,3 +228,16 @@ def test_many_values_warning(self):
226228

227229
self.send_signal(self.widget.Inputs.distances, None)
228230
self.assertFalse(w.Warning.many_clusters.is_shown())
231+
232+
233+
class TestSelectedLabelsModel(unittest.TestCase):
234+
def test_model_extend(self):
235+
model = SelectedLabelsModel()
236+
model[:] = ["1"]
237+
model.set_colors([QColor(Qt.blue)])
238+
index = model.index(0)
239+
self.assertEqual(index.data(Qt.DisplayRole), "1")
240+
self.assertEqual(index.data(Qt.BackgroundRole), QColor(Qt.blue))
241+
model[:]= ["1", "2"]
242+
index1 = model.index(1)
243+
self.assertEqual(index1.data(Qt.BackgroundRole), QColor()) # should be invalid color

0 commit comments

Comments
 (0)