def test_wraps_exceptions_toml(self):
        expected_wrapped = [KeyError(), NotImplementedError(), ValueError()]

        for known_exception in expected_wrapped:
            with mock.patch("sans.gui_logic.models.file_loading.TomlParser"
                            ) as mocked_module:
                mocked_parser = mock.Mock()
                mocked_module.return_value = mocked_parser

                mocked_parser.parse_toml_file.side_effect = known_exception
                with self.assertRaises(UserFileLoadException):
                    FileLoading.load_user_file(mock.Mock(), None)

        not_wrapped = [KeyboardInterrupt(), SystemExit(), RuntimeError()]
        for unexpected_exception in not_wrapped:
            with mock.patch("sans.gui_logic.models.file_loading.TomlParser"
                            ) as mocked_module:
                mocked_parser = mock.Mock()
                mocked_module.return_value = mocked_parser
                mocked_parser.parse_toml_file.side_effect = unexpected_exception
                with self.assertRaises(type(unexpected_exception)):
                    FileLoading.load_user_file(mock.Mock(), None)
    def test_can_parse_toml_file(self):
        mock_path = mock.NonCallableMock()
        with mock.patch("sans.gui_logic.models.file_loading.TomlParser"
                        ) as mocked_module:
            mocked_parser = mock.Mock()
            mocked_module.return_value = mocked_parser

            file_info = mock.NonCallableMock()
            result = FileLoading.load_user_file(file_path=mock_path,
                                                file_information=file_info)
            mocked_parser.parse_toml_file.assert_called_once_with(
                mock_path, file_information=file_info)
            self.assertEqual(result,
                             mocked_parser.parse_toml_file.return_value)
    def test_wraps_legacy_exceptions(self):
        expected_wrapped = [RuntimeError(), ValueError()]

        for known_exception in expected_wrapped:
            with mock.patch(
                    "sans.gui_logic.models.file_loading.UserFileReaderAdapter"
            ) as mocked_module:
                mocked_parser = mock.Mock()
                mocked_module.return_value = mocked_parser

                mocked_parser.get_all_states.side_effect = known_exception
                with self.assertRaises(UserFileLoadException):
                    FileLoading.load_user_file('legacy.txt', None)

        not_wrapped = [KeyboardInterrupt(), SystemExit()]
        for unexpected_exception in not_wrapped:
            with mock.patch(
                    "sans.gui_logic.models.file_loading.UserFileReaderAdapter"
            ) as mocked_module:
                mocked_parser = mock.Mock()
                mocked_module.return_value = mocked_parser
                mocked_parser.get_all_states.side_effect = unexpected_exception
                with self.assertRaises(type(unexpected_exception)):
                    FileLoading.load_user_file('legacy.txt', None)
 def _load_current_state(self, file_information, row_user_file):
     if row_user_file:
         # Has a custom user file so ignore any settings from GUI
         user_file_path = FileFinder.getFullPath(row_user_file)
         if not os.path.exists(user_file_path):
             raise ValueError(
                 f"The user path {user_file_path}\n"
                 " does not exist. Make sure a valid user file has been specified."
             )
         state = FileLoading.load_user_file(
             user_file_path, file_information=file_information)
         gui_state = StateGuiModel(state)
     else:
         # We want to copy our master GUI state to set any row options (see prototype pattern)
         gui_state = copy.deepcopy(self._state_gui_model)
     return gui_state