|
4 | 4 | import unittest |
5 | 5 | from unittest.mock import patch |
6 | 6 |
|
7 | | -import numpy as np |
8 | | - |
9 | 7 | from AnyQt.QtCore import Qt, QModelIndex |
10 | 8 | from AnyQt.QtTest import QSignalSpy |
11 | 9 |
|
|
14 | 12 | ContinuousVariable, DiscreteVariable, StringVariable, TimeVariable |
15 | 13 | from Orange.widgets.utils import colorpalettes |
16 | 14 | from Orange.widgets.utils.itemmodels import \ |
17 | | - AbstractSortTableModel, PyTableModel,\ |
18 | | - PyListModel, VariableListModel, DomainModel, ContinuousPalettesModel, \ |
| 15 | + PyTableModel, PyListModel, PyListModelTooltip,\ |
| 16 | + VariableListModel, DomainModel, ContinuousPalettesModel, \ |
19 | 17 | _as_contiguous_range |
20 | 18 | from Orange.widgets.gui import TableVariable |
21 | 19 | from orangewidget.tests.base import GuiTest |
@@ -481,5 +479,54 @@ def testIndexOf(self): |
481 | 479 | self.assertIsNone(model.indexOf(42)) |
482 | 480 |
|
483 | 481 |
|
| 482 | +class TestPyListModelTooltip(GuiTest): |
| 483 | + def test_tooltips_size(self): |
| 484 | + def data(i): |
| 485 | + return model.data(model.index(i, 0)) |
| 486 | + |
| 487 | + def tip(i): |
| 488 | + return model.data(model.index(i, 0), Qt.ToolTipRole) |
| 489 | + |
| 490 | + # Not enough tooptips - return None |
| 491 | + model = PyListModelTooltip(["foo", "bar", "baz"], ["footip", "bartip"]) |
| 492 | + self.assertEqual(data(1), "bar") |
| 493 | + self.assertEqual(data(2), "baz") |
| 494 | + self.assertIsNone(data(3)) |
| 495 | + self.assertEqual(tip(1), "bartip") |
| 496 | + self.assertIsNone(tip(2)) |
| 497 | + |
| 498 | + # No tooltips |
| 499 | + model = PyListModelTooltip(["foo", "bar", "baz"]) |
| 500 | + self.assertIsNone(tip(1)) |
| 501 | + self.assertIsNone(tip(2)) |
| 502 | + |
| 503 | + # Too many tooltips |
| 504 | + model = PyListModelTooltip(["foo", "bar"], ["footip", "bartip", "btip"]) |
| 505 | + self.assertEqual(data(0), "foo") |
| 506 | + self.assertEqual(data(1), "bar") |
| 507 | + self.assertIsNone(data(2)) |
| 508 | + self.assertEqual(tip(1), "bartip") |
| 509 | + self.assertEqual(tip(2), "btip") |
| 510 | + |
| 511 | + def test_tooltip_arg(self): |
| 512 | + def tip(i): |
| 513 | + return model.data(model.index(i, 0), Qt.ToolTipRole) |
| 514 | + |
| 515 | + # Allow generators |
| 516 | + s = dict(a="ta", b="tb") |
| 517 | + model = PyListModelTooltip(s, s.values()) |
| 518 | + self.assertEqual(tip(0), "ta") |
| 519 | + self.assertEqual(tip(1), "tb") |
| 520 | + |
| 521 | + # Basically backward compatibility; this behaviour diverges from |
| 522 | + # behaviour of data role |
| 523 | + s = [] |
| 524 | + model = PyListModelTooltip(["foo"], s) |
| 525 | + self.assertIsNone(tip(0)) |
| 526 | + |
| 527 | + s += ["footip"] |
| 528 | + self.assertEqual(tip(1), "footip") |
| 529 | + |
| 530 | + |
484 | 531 | if __name__ == "__main__": |
485 | 532 | unittest.main() |
0 commit comments