From 7c16d082f8b09c9ae4c5270716d8d114f3589d10 Mon Sep 17 00:00:00 2001 From: astaric Date: Mon, 7 Nov 2016 18:32:53 +0100 Subject: [PATCH] FeatureConstructor: Fix crash when new variable is created without data --- Orange/widgets/data/owfeatureconstructor.py | 2 +- .../widgets/data/tests/test_owfeatureconstructor.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Orange/widgets/data/owfeatureconstructor.py b/Orange/widgets/data/owfeatureconstructor.py index 62289574ec8..83c2100d8a6 100644 --- a/Orange/widgets/data/owfeatureconstructor.py +++ b/Orange/widgets/data/owfeatureconstructor.py @@ -168,7 +168,7 @@ def setEditorData(self, data, domain): self.setModified(False) self.featureChanged.emit() self.attrs_model[:] = ["Select Feature"] - if domain or domain.metas: + if domain is not None and (domain or domain.metas): self.attrs_model[:] += chain(domain.attributes, domain.class_vars, domain.metas) diff --git a/Orange/widgets/data/tests/test_owfeatureconstructor.py b/Orange/widgets/data/tests/test_owfeatureconstructor.py index 15001284c48..75b4356b1bb 100644 --- a/Orange/widgets/data/tests/test_owfeatureconstructor.py +++ b/Orange/widgets/data/tests/test_owfeatureconstructor.py @@ -4,16 +4,18 @@ from Orange.data import (Table, Domain, StringVariable, ContinuousVariable, DiscreteVariable) +from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.itemmodels import PyListModel from Orange.widgets.data.owfeatureconstructor import (DiscreteDescriptor, ContinuousDescriptor, StringDescriptor, - construct_variables) + construct_variables, OWFeatureConstructor) from Orange.widgets.data.owfeatureconstructor import ( freevars, make_lambda, validate_exp ) + class FeatureConstructorTest(unittest.TestCase): def test_construct_variables_discrete(self): data = Table("iris") @@ -175,3 +177,12 @@ def validate_(source): with self.assertRaises(ValueError): validate_("{a:1 for a in s}") + + +class OWFeatureConstructorTests(WidgetTest): + def setUp(self): + self.widget = OWFeatureConstructor() + + def test_create_variable_with_no_data(self): + self.widget.addFeature( + ContinuousDescriptor("X1", "", 3))