|
4 | 4 | from unittest import TestCase |
5 | 5 |
|
6 | 6 | from PyQt4.QtCore import Qt |
7 | | -from Orange.widgets.utils.itemmodels import PyTableModel, PyListModel |
| 7 | + |
| 8 | +from Orange.data import Domain, ContinuousVariable |
| 9 | +from Orange.widgets.utils.itemmodels import \ |
| 10 | + PyTableModel, PyListModel, DomainModel |
8 | 11 |
|
9 | 12 |
|
10 | 13 | class TestPyTableModel(TestCase): |
@@ -183,3 +186,73 @@ def test_insert_delete_rows(self): |
183 | 186 | success = model.removeRows(3, 4) |
184 | 187 | self.assertIs(success, True) |
185 | 188 | self.assertSequenceEqual(model, [None, None, None]) |
| 189 | + |
| 190 | + |
| 191 | +class TestDomainModel(TestCase): |
| 192 | + def test_init_with_single_section(self): |
| 193 | + model = DomainModel(order=DomainModel.CLASSES) |
| 194 | + self.assertEqual(model.order, (DomainModel.CLASSES, )) |
| 195 | + |
| 196 | + def test_separators(self): |
| 197 | + attrs = [ContinuousVariable(n) for n in "abg"] |
| 198 | + classes = [ContinuousVariable(n) for n in "deh"] |
| 199 | + metas = [ContinuousVariable(n) for n in "ijf"] |
| 200 | + |
| 201 | + model = DomainModel() |
| 202 | + sep = [model.Separator] |
| 203 | + model.set_domain(Domain(attrs, classes, metas)) |
| 204 | + self.assertEqual(list(model), classes + sep + metas + sep + attrs) |
| 205 | + |
| 206 | + model = DomainModel() |
| 207 | + model.set_domain(Domain(attrs, [], metas)) |
| 208 | + self.assertEqual(list(model), metas + sep + attrs) |
| 209 | + |
| 210 | + model = DomainModel() |
| 211 | + model.set_domain(Domain([], [], metas)) |
| 212 | + self.assertEqual(list(model), metas) |
| 213 | + |
| 214 | + model = DomainModel(placeholder="foo") |
| 215 | + model.set_domain(Domain([], [], metas)) |
| 216 | + self.assertEqual(list(model), [None] + sep + metas) |
| 217 | + |
| 218 | + model = DomainModel(placeholder="foo") |
| 219 | + model.set_domain(Domain(attrs, [], metas)) |
| 220 | + self.assertEqual(list(model), [None] + sep + metas + sep + attrs) |
| 221 | + |
| 222 | + def test_placeholder_placement(self): |
| 223 | + model = DomainModel(placeholder="foo") |
| 224 | + sep = model.Separator |
| 225 | + self.assertEqual(model.order, (None, sep) + model.SEPARATED) |
| 226 | + |
| 227 | + model = DomainModel(order=("bar", ), placeholder="foo") |
| 228 | + self.assertEqual(model.order, (None, "bar")) |
| 229 | + |
| 230 | + model = DomainModel(order=("bar", None, "baz"), placeholder="foo") |
| 231 | + self.assertEqual(model.order, ("bar", None, "baz")) |
| 232 | + |
| 233 | + model = DomainModel(order=("bar", sep, "baz"), |
| 234 | + placeholder="foo") |
| 235 | + self.assertEqual(model.order, (None, sep, "bar", sep, "baz")) |
| 236 | + |
| 237 | + def test_subparts(self): |
| 238 | + attrs = [ContinuousVariable(n) for n in "abg"] |
| 239 | + classes = [ContinuousVariable(n) for n in "deh"] |
| 240 | + metas = [ContinuousVariable(n) for n in "ijf"] |
| 241 | + |
| 242 | + m = DomainModel |
| 243 | + sep = m.Separator |
| 244 | + model = DomainModel( |
| 245 | + order=(m.ATTRIBUTES | m.METAS, sep, m.CLASSES)) |
| 246 | + model.set_domain(Domain(attrs, classes, metas)) |
| 247 | + self.assertEqual(list(model), attrs + metas + [sep] + classes) |
| 248 | + |
| 249 | + m = DomainModel |
| 250 | + sep = m.Separator |
| 251 | + model = DomainModel( |
| 252 | + order=(m.ATTRIBUTES | m.METAS, sep, m.CLASSES), |
| 253 | + alphabetical=True) |
| 254 | + model.set_domain(Domain(attrs, classes, metas)) |
| 255 | + self.assertEqual(list(model), |
| 256 | + sorted(attrs + metas, key=lambda x: x.name) + |
| 257 | + [sep] + |
| 258 | + sorted(classes, key=lambda x: x.name)) |
0 commit comments