|
12 | 12 |
|
13 | 13 | from AnyQt.QtCore import QItemSelectionModel, Qt, QItemSelection |
14 | 14 | from AnyQt.QtWidgets import QAction, QComboBox, QLineEdit, \ |
15 | | - QStyleOptionViewItem, QDialog |
| 15 | + QStyleOptionViewItem, QDialog, QMenu |
16 | 16 | from AnyQt.QtTest import QTest, QSignalSpy |
17 | 17 |
|
18 | 18 | from Orange.widgets.utils import colorpalettes |
|
38 | 38 | GroupItemsDialog) |
39 | 39 | from Orange.widgets.data.owcolor import OWColor, ColorRole |
40 | 40 | from Orange.widgets.tests.base import WidgetTest, GuiTest |
| 41 | +from Orange.widgets.tests.utils import contextMenu |
41 | 42 | from Orange.tests import test_filename, assert_array_nanequal |
42 | 43 | from Orange.widgets.utils.state_summary import format_summary_details |
43 | 44 |
|
@@ -544,6 +545,23 @@ def test_discrete_editor_rename_selected_items_action(self): |
544 | 545 | list(spy), [[]], 'variable_changed should emit exactly once' |
545 | 546 | ) |
546 | 547 |
|
| 548 | + def test_discrete_editor_context_menu(self): |
| 549 | + w = DiscreteVariableEditor() |
| 550 | + v = Categorical("C", ("a", "b", "c"), |
| 551 | + (("A", "1"), ("B", "b")), False) |
| 552 | + w.set_data_categorical(v, []) |
| 553 | + view = w.values_edit |
| 554 | + model = view.model() |
| 555 | + |
| 556 | + pos = view.visualRect(model.index(0, 0)).center() |
| 557 | + with patch.object(QMenu, "setVisible", return_value=None) as m: |
| 558 | + contextMenu(view.viewport(), pos) |
| 559 | + m.assert_called() |
| 560 | + |
| 561 | + menu = view.findChild(QMenu) |
| 562 | + self.assertIsNotNone(menu) |
| 563 | + menu.close() |
| 564 | + |
547 | 565 | def test_time_editor(self): |
548 | 566 | w = TimeVariableEditor() |
549 | 567 | self.assertEqual(w.get_data(), (None, [])) |
|
0 commit comments