Skip to content

Commit b3f5841

Browse files
committed
oweditdomain: Fix errors and add basic tests for variable editors
1 parent cabb4ae commit b3f5841

File tree

2 files changed

+62
-7
lines changed

2 files changed

+62
-7
lines changed

Orange/widgets/data/oweditdomain.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def get_data(self):
217217
labels = self.labels_model.get_dict()
218218

219219
# Is the variable actually changed.
220-
if not self.is_same():
220+
if self.var is not None and not self.is_same():
221221
var = type(self.var)(name)
222222
var.attributes.update(labels)
223223
self.var = var
@@ -321,7 +321,7 @@ def get_data(self):
321321
labels = self.labels_model.get_dict()
322322
values = map(str, self.values_model)
323323

324-
if not self.is_same():
324+
if self.var is not None and not self.is_same():
325325
var = type(self.var)(name, values=values)
326326
var.attributes.update(labels)
327327
self.var = var
@@ -333,8 +333,9 @@ def get_data(self):
333333
def is_same(self):
334334
"""Is the current model state the same as the input.
335335
"""
336-
values = map(str, self.values_model)
337-
return VariableEditor.is_same(self) and self.var.values == values
336+
values = list(map(str, self.values_model))
337+
return (VariableEditor.is_same(self) and self.var is not None and
338+
self.var.values == values)
338339

339340
def clear(self):
340341
"""Clear the model state.

Orange/widgets/data/tests/test_oweditdomain.py

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
from AnyQt.QtCore import QModelIndex, Qt
88

9-
from Orange.data import ContinuousVariable, DiscreteVariable, Table, Domain
9+
from Orange.data import ContinuousVariable, DiscreteVariable, \
10+
StringVariable, Table, Domain
1011
from Orange.widgets.data.oweditdomain import EditDomainReport, OWEditDomain, \
11-
ContinuousVariableEditor
12+
ContinuousVariableEditor, DiscreteVariableEditor, VariableEditor
1213
from Orange.widgets.data.owcolor import OWColor, ColorRole
13-
from Orange.widgets.tests.base import WidgetTest
14+
from Orange.widgets.tests.base import WidgetTest, GuiTest
1415

1516
SECTION_NAME = "NAME"
1617

@@ -138,3 +139,56 @@ def test_list_attributes_remain_lists(self):
138139
self.widget.unconditional_commit()
139140
t2 = self.get_output("Data")
140141
self.assertEqual(t2.domain["a"].attributes["list"], [1, 2, 4])
142+
143+
144+
class TestEditors(GuiTest):
145+
def test_variable_editor(self):
146+
w = VariableEditor()
147+
self.assertIs(w.get_data(), None)
148+
149+
v = StringVariable(name="S")
150+
v.attributes.update({"A": 1, "B": "b"},)
151+
w.set_data(v)
152+
153+
self.assertEqual(w.name_edit.text(), v.name)
154+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
155+
self.assertTrue(w.is_same())
156+
157+
w.set_data(None)
158+
self.assertEqual(w.name_edit.text(), "")
159+
self.assertEqual(w.labels_model.get_dict(), {})
160+
self.assertIs(w.get_data(), None)
161+
162+
def test_continuous_editor(self):
163+
w = ContinuousVariableEditor()
164+
self.assertIs(w.get_data(), None)
165+
166+
v = ContinuousVariable("X", number_of_decimals=5)
167+
v.attributes.update({"A": 1, "B": "b"})
168+
w.set_data(v)
169+
170+
self.assertEqual(w.name_edit.text(), v.name)
171+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
172+
self.assertTrue(w.is_same())
173+
174+
w.set_data(None)
175+
self.assertEqual(w.name_edit.text(), "")
176+
self.assertEqual(w.labels_model.get_dict(), {})
177+
self.assertIs(w.get_data(), None)
178+
179+
def test_discrete_editor(self):
180+
w = DiscreteVariableEditor()
181+
self.assertIs(w.get_data(), None)
182+
183+
v = DiscreteVariable("C", values=["a", "b", "c"])
184+
v.attributes.update({"A": 1, "B": "b"})
185+
w.set_data(v)
186+
187+
self.assertEqual(w.name_edit.text(), v.name)
188+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
189+
self.assertTrue(w.is_same())
190+
191+
w.set_data(None)
192+
self.assertEqual(w.name_edit.text(), "")
193+
self.assertEqual(w.labels_model.get_dict(), {})
194+
self.assertIs(w.get_data(), None)

0 commit comments

Comments
 (0)