|
| 1 | +from unittest.mock import Mock |
| 2 | + |
1 | 3 | import scipy.sparse as sp |
2 | 4 |
|
3 | 5 | from orangewidget.widget import StateInfo |
|
6 | 8 | from Orange.base import Learner, Model |
7 | 9 | from Orange.classification import KNNLearner |
8 | 10 | from Orange.data import Table, Domain |
9 | | -from Orange.modelling import TreeLearner |
| 11 | +from Orange.modelling import TreeLearner, Fitter |
10 | 12 | from Orange.preprocess import continuize |
11 | 13 | from Orange.regression import MeanLearner, LinearRegressionLearner |
12 | 14 | from Orange.widgets.utils.owlearnerwidget import OWBaseLearner |
@@ -151,3 +153,52 @@ class WidgetA(OWBaseLearner): |
151 | 153 | self.send_signal(widget.Inputs.data, None) |
152 | 154 | self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) |
153 | 155 | self.assertEqual(info._StateInfo__input_summary.details, no_input) |
| 156 | + |
| 157 | + def test_invalid_number_of_targets(self): |
| 158 | + class MockLearner(Fitter): |
| 159 | + name = 'mock' |
| 160 | + __fits__ = {'classification': Mock()} |
| 161 | + __returns__ = Mock() |
| 162 | + |
| 163 | + class WidgetLR(OWBaseLearner): |
| 164 | + name = "lr" |
| 165 | + LEARNER = MockLearner |
| 166 | + |
| 167 | + w = self.create_widget(WidgetLR) |
| 168 | + error = w.Error.data_error |
| 169 | + heart = Table("heart_disease") |
| 170 | + domain = heart.domain |
| 171 | + |
| 172 | + no_target = heart.transform( |
| 173 | + Domain(domain.attributes, |
| 174 | + [])) |
| 175 | + two_targets = heart.transform( |
| 176 | + Domain([domain["age"]], |
| 177 | + [domain["gender"], domain["chest pain"]])) |
| 178 | + |
| 179 | + self.send_signal(w.Inputs.data, heart) |
| 180 | + self.assertFalse(error.is_shown()) |
| 181 | + self.assertIs(w.data, heart) |
| 182 | + |
| 183 | + self.send_signal(w.Inputs.data, no_target) |
| 184 | + self.assertTrue(error.is_shown()) |
| 185 | + self.assertIsNone(w.data) |
| 186 | + err_no_target = str(error) |
| 187 | + self.assertIn("target", err_no_target) |
| 188 | + |
| 189 | + self.send_signal(w.Inputs.data, two_targets) |
| 190 | + self.assertTrue(error.is_shown()) |
| 191 | + self.assertIsNone(w.data) |
| 192 | + err_two_targets = str(error) |
| 193 | + self.assertIn("target", err_no_target) |
| 194 | + self.assertNotEqual(err_no_target, err_two_targets) |
| 195 | + |
| 196 | + self.send_signal(w.Inputs.data, None) |
| 197 | + self.assertIsNone(w.data) |
| 198 | + self.assertFalse(error.is_shown()) |
| 199 | + |
| 200 | + self.send_signal(w.Inputs.data, two_targets) |
| 201 | + self.assertTrue(error.is_shown()) |
| 202 | + |
| 203 | + self.send_signal(w.Inputs.data, None) |
| 204 | + self.assertFalse(error.is_shown()) |
0 commit comments