def test_migration_to_version_2(self): const_settings = { 'add_type_annotations': True, 'auto_save': False, 'controlAreaVisible': True, 'last_dir': '/home/joe/Desktop', '__version__': 1} # No compression, Tab-separated values settings = {**const_settings, 'compress': False, 'compression': 'gzip (.gz)', 'filetype': 'Tab-separated values (.tab)'} OWSave.migrate_settings(settings) self.assertEqual( settings, {**const_settings, "filter": "Tab-separated values (*.tab)"}) # Compression; ignore compression format (.xz is no longer supported) settings = {**const_settings, 'compress': True, 'compression': 'lzma (.xz)', 'filetype': 'Tab-separated values (.tab)'} OWSave.migrate_settings(settings) self.assertEqual( settings, {**const_settings, "filter": "Compressed Tab-separated values (*.tab.gz)"}) # No compression, Excel settings = {**const_settings, 'compress': False, 'compression': 'lzma (.xz)', 'filetype': 'Microsoft Excel spreadsheet (.xlsx)'} OWSave.migrate_settings(settings) self.assertEqual( settings, {**const_settings, "filter": "Microsoft Excel spreadsheet (*.xlsx)"}) # Excel with compression - compression must be ignored settings = {**const_settings, 'compress': True, 'compression': 'lzma (.xz)', 'filetype': 'Microsoft Excel spreadsheet (.xlsx)'} OWSave.migrate_settings(settings) self.assertEqual( settings, {**const_settings, "filter": "Microsoft Excel spreadsheet (*.xlsx)"}) # Missing filetype (is this possible?) settings = {**const_settings, 'compress': True, 'compression': 'lzma (.xz)'} OWSave.migrate_settings(settings) self.assertTrue(settings["filter"] in OWSave.get_filters()) # Unsupported file format (is this possible?) settings = {**const_settings, 'compress': True, 'compression': 'lzma (.xz)', 'filetype': 'Bar file (.bar)'} OWSave.migrate_settings(settings) self.assertTrue(settings["filter"] in OWSave.get_filters())
class TestOWSaveLinuxDialog(OWSaveTestBase): def test_get_save_filename_linux(self): widget = self.widget widget.initial_start_dir = lambda: "baz" widget.get_filters = lambda: dict.fromkeys("abc") widget.filter = "b" dlg = widget.SaveFileDialog = Mock() # pylint: disable=invalid-name instance = dlg.return_value instance.selectedFiles.return_value = ["foo"] instance.selectedNameFilter.return_value = "bar" self.assertEqual(widget.get_save_filename(), ("foo", "bar")) self.assertEqual(dlg.call_args[0][3], "baz") self.assertEqual(dlg.call_args[0][4], "a;;b;;c") instance.selectNameFilter.assert_called_with("b") instance.exec.return_value = QFileDialog.Rejected self.assertEqual(widget.get_save_filename(), ("", "")) @patch.object(OWSaveBase, "filters", OWSave.get_filters()) def test_save_file_dialog_enforces_extension_linux(self): dialog = OWSave.SaveFileDialog( OWSave, None, "Save File", "foo.bar", "Bar files (*.tab);;Low files (*.csv)") dialog.selectNameFilter("Low files (*.csv)") self.assertTrue(dialog.selectedFiles()[0].endswith("/foo.csv")) dialog.selectFile("high.bar") self.assertTrue(dialog.selectedFiles()[0].endswith("/high.bar.csv")) dialog.selectNameFilter("Bar files (*.tab)") self.assertTrue(dialog.selectedFiles()[0].endswith("/high.bar.tab")) dialog.selectFile("middle.pkl") self.assertTrue(dialog.selectedFiles()[0].endswith("/middle.tab")) dialog.filterSelected.emit("Low files (*.csv)") self.assertTrue(dialog.selectedFiles()[0].endswith("/middle.csv")) dialog.selectFile("high.tab.gz") self.assertTrue(dialog.selectedFiles()[0].endswith("/high.csv")) dialog.selectFile("high.tab.gz.tab.tab.gz") self.assertTrue(dialog.selectedFiles()[0].endswith("/high.csv")) def test_save_file_dialog_uses_valid_filters_linux(self): widget = self.widget widget.valid_filters = lambda: ["a (*.a)", "b (*.b)"] widget.default_valid_filter = lambda: "a (*.a)" dlg = widget.SaveFileDialog = Mock() # pylint: disable=invalid-name instance = dlg.return_value instance.exec.return_value = dlg.Rejected = QFileDialog.Rejected widget.get_save_filename() self.assertEqual(dlg.call_args[0][4], "a (*.a);;b (*.b)") instance.selectNameFilter.assert_called_with("a (*.a)")