Skip to content

Commit 5fcb75c

Browse files
authored
Merge pull request #1470 from VesnaT/widget_learner_tests
[ENH] Support learner widgets testing
2 parents e7e4ccf + 8074ce2 commit 5fcb75c

15 files changed

+305
-20
lines changed

Orange/widgets/classify/owknn.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ class OWKNNLearner(OWBaseLearner):
2525

2626
def add_main_layout(self):
2727
box = gui.vBox(self.controlArea, "Neighbors")
28-
gui.spin(box, self, "n_neighbors", 1, 100, label="Number of neighbors:",
29-
alignment=Qt.AlignRight, callback=self.settings_changed)
30-
gui.comboBox(box, self, "metric_index", label="Metric:",
31-
orientation=Qt.Horizontal,
32-
items=[i.capitalize() for i in self.metrics],
33-
callback=self.settings_changed)
34-
gui.comboBox(box, self, "weight_type", label="Weight:",
35-
orientation=Qt.Horizontal,
36-
items=[i.capitalize() for i in self.weights],
37-
callback=self.settings_changed)
28+
self.n_neighbors_spin = gui.spin(
29+
box, self, "n_neighbors", 1, 100, label="Number of neighbors:",
30+
alignment=Qt.AlignRight, callback=self.settings_changed)
31+
self.metrics_combo = gui.comboBox(
32+
box, self, "metric_index", orientation=Qt.Horizontal,
33+
label="Metric:", items=[i.capitalize() for i in self.metrics],
34+
callback=self.settings_changed)
35+
self.weights_combo = gui.comboBox(
36+
box, self, "weight_type", orientation=Qt.Horizontal,
37+
label="Weight:", items=[i.capitalize() for i in self.weights],
38+
callback=self.settings_changed)
3839

3940
def create_learner(self):
4041
return self.LEARNER(
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.classify.owclassificationtree import OWClassificationTree
4+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
5+
6+
7+
class TestOWClassificationTree(WidgetTest, WidgetLearnerTestMixin):
8+
def setUp(self):
9+
self.widget = self.create_widget(OWClassificationTree,
10+
stored_settings={"auto_apply": False})
11+
self.init()

Orange/widgets/classify/tests/test_owlogisticregression.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from Orange.data import Table
66
from Orange.statistics.util import stats
77
from Orange.classification import LogisticRegressionLearner
8-
from Orange.widgets.classify.owlogisticregression import create_coef_table, OWLogisticRegression
9-
from Orange.widgets.tests.base import WidgetTest
8+
from Orange.widgets.classify.owlogisticregression import (create_coef_table,
9+
OWLogisticRegression)
10+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
1011

1112

1213
class LogisticRegressionTest(unittest.TestCase):
@@ -30,7 +31,8 @@ def test_coef_table_multiple(self):
3031
len(classifier.domain.class_var.values))
3132

3233

33-
class TestOWLogisticRegression(WidgetTest):
34-
def test_data_before_apply(self):
35-
widget = self.create_widget(OWLogisticRegression)
36-
widget.set_data(Table("iris"))
34+
class TestOWLogisticRegression(WidgetTest, WidgetLearnerTestMixin):
35+
def setUp(self):
36+
self.widget = self.create_widget(OWLogisticRegression,
37+
stored_settings={"auto_apply": False})
38+
self.init()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.classify.owmajority import OWMajority
4+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
5+
6+
7+
class TestOWMajority(WidgetTest, WidgetLearnerTestMixin):
8+
def setUp(self):
9+
self.widget = self.create_widget(OWMajority,
10+
stored_settings={"auto_apply": False})
11+
self.init()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.classify.ownaivebayes import OWNaiveBayes
4+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
5+
6+
7+
class TestOWNaiveBayes(WidgetTest, WidgetLearnerTestMixin):
8+
def setUp(self):
9+
self.widget = self.create_widget(OWNaiveBayes,
10+
stored_settings={"auto_apply": False})
11+
self.init()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.classify.owrandomforest import OWRandomForest
4+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
5+
6+
7+
class TestOWRandomForest(WidgetTest, WidgetLearnerTestMixin):
8+
def setUp(self):
9+
self.widget = self.create_widget(OWRandomForest,
10+
stored_settings={"auto_apply": False})
11+
self.init()

Orange/widgets/regression/tests/__init__.py

Whitespace-only changes.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.regression.owknnregression import OWKNNRegression
4+
from Orange.widgets.tests.base import (WidgetTest, WidgetLearnerTestMixin,
5+
GuiToParam)
6+
7+
8+
class TestOWKNNRegression(WidgetTest, WidgetLearnerTestMixin):
9+
def setUp(self):
10+
self.widget = self.create_widget(OWKNNRegression,
11+
stored_settings={"auto_apply": False})
12+
self.init()
13+
14+
def combo_set_value(i, x):
15+
x.activated.emit(i)
16+
x.setCurrentIndex(i)
17+
18+
# FIXME: widget crashes when Mahalanobis metric is chosen.
19+
# When fixed, remove metrics slicing
20+
metrics = self.widget.metrics[:-1]
21+
weights = self.widget.weights
22+
nn_spin = self.widget.n_neighbors_spin
23+
nn_min_max = [nn_spin.minimum(), nn_spin.maximum()]
24+
self.gui_to_params = [
25+
GuiToParam('metric', self.widget.metrics_combo,
26+
lambda x: x.currentText().lower(),
27+
combo_set_value, metrics, list(range(len(metrics)))),
28+
GuiToParam('weights', self.widget.weights_combo,
29+
lambda x: x.currentText().lower(),
30+
combo_set_value, weights, list(range(len(weights)))),
31+
GuiToParam('n_neighbors', nn_spin, lambda x: x.value(),
32+
lambda i, x: x.setValue(i), nn_min_max, nn_min_max)]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.regression.owmean import OWMean
4+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
5+
6+
7+
class TestOWMean(WidgetTest, WidgetLearnerTestMixin):
8+
def setUp(self):
9+
self.widget = self.create_widget(OWMean,
10+
stored_settings={"auto_apply": False})
11+
self.init()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Test methods with long descriptive names can omit docstrings
2+
# pylint: disable=missing-docstring
3+
from Orange.widgets.regression.owrandomforestregression import \
4+
OWRandomForestRegression
5+
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
6+
7+
8+
class TestOWRandomForestRegression(WidgetTest, WidgetLearnerTestMixin):
9+
def setUp(self):
10+
self.widget = self.create_widget(OWRandomForestRegression,
11+
stored_settings={"auto_apply": False})
12+
self.init()

0 commit comments

Comments
 (0)