File: test_tableview.py

package info (click to toggle)
orange3 3.40.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,908 kB
  • sloc: python: 162,745; ansic: 622; makefile: 322; sh: 93; cpp: 77
file content (69 lines) | stat: -rw-r--r-- 2,670 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from AnyQt.QtWidgets import QAbstractButton

from orangewidget.tests.base import GuiTest

import Orange
from Orange.widgets.data.utils.models import RichTableModel, TableSliceProxy
from Orange.widgets.data.utils.tableview import RichTableView
from Orange.widgets.utils.itemselectionmodel import BlockSelectionModel


class TableViewTest(GuiTest):
    def setUp(self) -> None:
        super().setUp()
        self.data = Orange.data.Table("iris")[::10]
        self.data.domain.attributes[0].attributes["A"] = "a"
        self.data.domain.class_var.attributes["A"] = "b"

    def tearDown(self) -> None:
        del self.data
        super().tearDown()

    def test_tableview(self):
        view = RichTableView()
        model = RichTableModel(self.data)
        view.setModel(model)
        self.assertIsInstance(view.selectionModel(), BlockSelectionModel)
        model.setRichHeaderFlags(RichTableModel.Name | RichTableModel.Labels |
                                 RichTableModel.Icon)
        view.grab()
        self.assertIn("A", view.cornerText())
        model.setRichHeaderFlags(RichTableModel.Name)
        self.assertEqual(view.cornerText(), "")

    def test_tableview_empty_model(self):
        data = Orange.data.Table.from_list(
            Orange.data.Domain([], None),
            [],
        )
        view = RichTableView()
        model = RichTableModel(data)
        view.setModel(model)
        self.assertIsInstance(view.selectionModel(), BlockSelectionModel)
        model.setRichHeaderFlags(RichTableModel.Name | RichTableModel.Labels |
                                 RichTableModel.Icon)
        view.grab()

    def test_selection(self):
        view = RichTableView()
        model = RichTableModel(self.data)
        view.setModel(model)
        view.setBlockSelection([1, 2], [2, 3])
        sel = [(idx.row(), idx.column()) for idx in view.selectedIndexes()]
        self.assertEqual(sorted(sel), [(1, 2), (1, 3), (2, 2), (2, 3)])
        self.assertEqual(view.blockSelection(), ([1, 2], [2, 3]))

        model_ = TableSliceProxy(rowSlice=slice(1, None, 1))
        model_.setSourceModel(model)
        view.setModel(model_)
        view.setBlockSelection([1, 2], [2, 3])
        sel = [(idx.row(), idx.column()) for idx in view.selectedIndexes()]
        self.assertEqual(sorted(sel), [(0, 2), (0, 3), (1, 2), (1, 3)])
        self.assertEqual(view.blockSelection(), ([1, 2], [2, 3]))

    def test_basket_column(self):
        model = RichTableModel(self.data.to_sparse())
        view = RichTableView()
        view.setModel(model)
        model.setRichHeaderFlags(RichTableModel.Name | RichTableModel.Labels)
        view.grab()