|
2 | 2 | from unittest.mock import patch, PropertyMock, MagicMock, Mock
|
3 | 3 |
|
4 | 4 | import numpy as np
|
| 5 | +from AnyQt.QtGui import QStandardItem, QIcon |
5 | 6 | from Orange.data import Domain, StringVariable
|
| 7 | +from Orange.widgets.data.utils.preprocess import DescriptionRole, ParametersRole |
6 | 8 | from orangewidget.utils.filedialogs import RecentPath
|
7 | 9 | from Orange.widgets.tests.base import WidgetTest
|
8 | 10 | from Orange.widgets.tests.utils import simulate
|
@@ -180,6 +182,153 @@ def test_no_tokens_left(self):
|
180 | 182 | self.wait_until_finished()
|
181 | 183 | self.assertFalse(self.widget.Warning.no_token_left.is_shown())
|
182 | 184 |
|
| 185 | + def test_language_from_corpus(self): |
| 186 | + """Test language from corpus is set correctly""" |
| 187 | + initial = { |
| 188 | + "name": "", |
| 189 | + "preprocessors": [("preprocess.normalize", {}), ("preprocess.filter", {})], |
| 190 | + } |
| 191 | + self.widget.storedsettings = initial |
| 192 | + self.widget._initialize() |
| 193 | + self.assertDictEqual(initial, self.widget.storedsettings) |
| 194 | + combos = self.widget.mainArea.findChildren(LanguageComboBox) |
| 195 | + self.assertEqual( |
| 196 | + ["English", "English", "English", "English"], |
| 197 | + [c.currentText() for c in combos] |
| 198 | + ) |
| 199 | + |
| 200 | + # test with Slovenian - language should set for all preprocessors except |
| 201 | + # Snowball that doesn't support Slovenian |
| 202 | + self.corpus.attributes["language"] = "sl" |
| 203 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 204 | + self.assertEqual( |
| 205 | + ["English", "Slovenian", "Slovenian", "Slovenian"], |
| 206 | + [c.currentText() for c in combos] |
| 207 | + ) |
| 208 | + settings = self.widget.storedsettings["preprocessors"] |
| 209 | + self.assertEqual("sl", settings[0][1]["udpipe_language"]) |
| 210 | + self.assertEqual("sl", settings[0][1]["lemmagen_language"]) |
| 211 | + self.assertEqual("sl", settings[1][1]["language"]) |
| 212 | + |
| 213 | + # test with Lithuanian that is support by one preprocessors |
| 214 | + self.corpus.attributes["language"] = "lt" |
| 215 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 216 | + self.assertEqual( |
| 217 | + ["English", "Lithuanian", "Slovenian", "Slovenian"], |
| 218 | + [c.currentText() for c in combos] |
| 219 | + ) |
| 220 | + settings = self.widget.storedsettings["preprocessors"] |
| 221 | + self.assertEqual("lt", settings[0][1]["udpipe_language"]) |
| 222 | + self.assertEqual("sl", settings[0][1]["lemmagen_language"]) |
| 223 | + self.assertEqual("sl", settings[1][1]["language"]) |
| 224 | + |
| 225 | + self.corpus.attributes["language"] = "pt" |
| 226 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 227 | + self.assertEqual( |
| 228 | + ["Portuguese", "Portuguese", "Slovenian", "Portuguese"], |
| 229 | + [c.currentText() for c in combos] |
| 230 | + ) |
| 231 | + settings = self.widget.storedsettings["preprocessors"] |
| 232 | + self.assertEqual("pt", settings[0][1]["snowball_language"]) |
| 233 | + self.assertEqual("pt", settings[0][1]["udpipe_language"]) |
| 234 | + self.assertEqual("sl", settings[0][1]["lemmagen_language"]) |
| 235 | + self.assertEqual("pt", settings[1][1]["language"]) |
| 236 | + |
| 237 | + # language not supported by any preprocessor - language shouldn't change |
| 238 | + self.corpus.attributes["language"] = "bo" |
| 239 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 240 | + self.assertEqual( |
| 241 | + ["Portuguese", "Portuguese", "Slovenian", "Portuguese"], |
| 242 | + [c.currentText() for c in combos] |
| 243 | + ) |
| 244 | + settings = self.widget.storedsettings["preprocessors"] |
| 245 | + self.assertEqual("pt", settings[0][1]["snowball_language"]) |
| 246 | + self.assertEqual("pt", settings[0][1]["udpipe_language"]) |
| 247 | + self.assertEqual("sl", settings[0][1]["lemmagen_language"]) |
| 248 | + self.assertEqual("pt", settings[1][1]["language"]) |
| 249 | + |
| 250 | + # test with missing language - language shouldn't change |
| 251 | + self.corpus.attributes["language"] = None |
| 252 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 253 | + self.assertEqual( |
| 254 | + ["Portuguese", "Portuguese", "Slovenian", "Portuguese"], |
| 255 | + [c.currentText() for c in combos] |
| 256 | + ) |
| 257 | + settings = self.widget.storedsettings["preprocessors"] |
| 258 | + self.assertEqual("pt", settings[0][1]["snowball_language"]) |
| 259 | + self.assertEqual("pt", settings[0][1]["udpipe_language"]) |
| 260 | + self.assertEqual("sl", settings[0][1]["lemmagen_language"]) |
| 261 | + self.assertEqual("pt", settings[1][1]["language"]) |
| 262 | + |
| 263 | + def test_language_from_schema(self): |
| 264 | + """Test language from schema/workflow is retained""" |
| 265 | + initial = { |
| 266 | + "name": "", |
| 267 | + "preprocessors": [ |
| 268 | + ( |
| 269 | + "preprocess.normalize", |
| 270 | + { |
| 271 | + "lemmagen_language": "sl", |
| 272 | + "snowball_language": "nl", |
| 273 | + "udpipe_language": "lt", |
| 274 | + }, |
| 275 | + ), |
| 276 | + ("preprocess.filter", {"language": "nl"}), |
| 277 | + ], |
| 278 | + } |
| 279 | + self.widget.storedsettings = initial |
| 280 | + |
| 281 | + settings = self.widget.settingsHandler.pack_data(self.widget) |
| 282 | + widget = self.create_widget(OWPreprocess, stored_settings=settings) |
| 283 | + self.send_signal(widget.Inputs.corpus, self.corpus, widget=widget) |
| 284 | + self.assertDictEqual(initial, widget.storedsettings) |
| 285 | + combos = widget.mainArea.findChildren(LanguageComboBox) |
| 286 | + self.assertEqual( |
| 287 | + ["Dutch", "Lithuanian", "Slovenian", "Dutch"], |
| 288 | + [c.currentText() for c in combos] |
| 289 | + ) |
| 290 | + |
| 291 | + def test_language_from_corpus_editor_inserted(self): |
| 292 | + """Test language from corpus is set to new editor too""" |
| 293 | + initial = { |
| 294 | + "name": "", |
| 295 | + "preprocessors": [("preprocess.filter", {})], |
| 296 | + } |
| 297 | + self.widget.storedsettings = initial |
| 298 | + self.widget._initialize() |
| 299 | + self.assertDictEqual(initial, self.widget.storedsettings) |
| 300 | + combos = self.widget.mainArea.findChildren(LanguageComboBox) |
| 301 | + self.assertEqual( |
| 302 | + ["English"], |
| 303 | + [c.currentText() for c in combos] |
| 304 | + ) |
| 305 | + |
| 306 | + # insert data - language of stopwords combo should change to italian |
| 307 | + self.corpus.attributes["language"] = "sl" |
| 308 | + self.send_signal(self.widget.Inputs.corpus, self.corpus) |
| 309 | + self.assertEqual( |
| 310 | + ["Slovenian"], |
| 311 | + [c.currentText() for c in combos] |
| 312 | + ) |
| 313 | + |
| 314 | + # insert new editor - all languages except snowball should be set to Slovenian |
| 315 | + pp_def = self.widget._qname2ppdef["preprocess.normalize"] |
| 316 | + description = pp_def.description |
| 317 | + item = QStandardItem(description.title) |
| 318 | + icon = QIcon(description.icon) |
| 319 | + item.setIcon(icon) |
| 320 | + item.setToolTip(description.summary) |
| 321 | + item.setData(pp_def, DescriptionRole) |
| 322 | + item.setData({}, ParametersRole) |
| 323 | + self.widget.preprocessormodel.insertRow(0, [item]) |
| 324 | + self.wait_until_finished() |
| 325 | + |
| 326 | + combos = self.widget.mainArea.findChildren(LanguageComboBox) |
| 327 | + self.assertEqual( |
| 328 | + ['Slovenian', 'English', 'Slovenian', 'Slovenian'], |
| 329 | + [c.currentText() for c in combos] |
| 330 | + ) |
| 331 | + |
183 | 332 |
|
184 | 333 | @patch(SF_LIST, new=Mock(return_value=SERVER_FILES))
|
185 | 334 | class TestOWPreprocessMigrateSettings(WidgetTest):
|
@@ -983,14 +1132,20 @@ def test_set_current_language(self):
|
983 | 1132 | self.assertEqual("Portuguese", cb.currentText())
|
984 | 1133 | cb.set_current_language("sl")
|
985 | 1134 | self.assertEqual("Slovenian", cb.currentText())
|
986 |
| - cb.set_current_language("abc") # should set to default |
987 |
| - self.assertEqual("English", cb.currentText()) |
| 1135 | + cb.set_current_language("abc") # language not in list - keep current seleciton |
| 1136 | + self.assertEqual("Slovenian", cb.currentText()) |
| 1137 | + |
| 1138 | + def test_set_language_to_default(self): |
| 1139 | + """In case current item not in dropdown anymore set language to default""" |
| 1140 | + mock = Mock() |
| 1141 | + cb = UDPipeComboBox(None, "pt", "en", mock) |
| 1142 | + self.assertEqual("Portuguese", cb.currentText()) |
988 | 1143 | # when no default language in the dropdown set to first
|
989 | 1144 | cb.removeItem(0)
|
990 | 1145 | x = cb._UDPipeComboBox__items
|
991 | 1146 | cb._UDPipeComboBox__items = x[:3] + x[4:]
|
992 |
| - cb.set_current_language("abc") |
993 |
| - self.assertEqual("English (lines)", cb.currentText()) |
| 1147 | + cb.showPopup() |
| 1148 | + self.assertEqual("English", cb.currentText()) |
994 | 1149 |
|
995 | 1150 | def test_change_item(self):
|
996 | 1151 | mock = Mock()
|
|
0 commit comments