1import pytest 2from unittest.mock import patch, MagicMock 3 4from UM.FileHandler.FileHandler import FileHandler 5 6 7@pytest.fixture 8def file_handler(application): 9 FileHandler._FileHandler__instance = None 10 with patch("UM.FileHandler.FileHandler.PluginRegistry.addType"): 11 handler = FileHandler(application, writer_type= "test_writer", reader_type= "test_reader") 12 return handler 13 14@pytest.fixture 15def file_writer(): 16 mocked_writer = MagicMock() 17 mocked_writer.getPluginId = MagicMock(return_value="beep") 18 return mocked_writer 19 20 21def test_getSupportedFileTypesRead(file_handler): 22 registry = MagicMock() 23 registry.getAllMetaData = MagicMock(return_value = [{"test_reader": [{"extension":".test"}]}]) 24 with patch("UM.PluginRegistry.PluginRegistry.getInstance", MagicMock(return_value = registry)): 25 assert file_handler.getSupportedFileTypesRead() == {".test": ".test"} 26 27 28def test_getSupportedFileTypesWrite(file_handler): 29 registry = MagicMock() 30 registry.getAllMetaData = MagicMock(return_value=[{"id":"beep", "test_writer":{ "output": [{ "extension": ".test", "mime_type": "test/test"}] }}]) 31 with patch("UM.PluginRegistry.PluginRegistry.getInstance", MagicMock(return_value=registry)): 32 assert file_handler.getSupportedFileTypesWrite() == [{'id': 'beep', 'extension': '.test', 'description': '.test', 'mime_type': 'test/test', 'mode': 1, 'hide_in_file_dialog': False}] 33 34 35def test_getWriterByMimeType_KnownMimeType(file_handler, file_writer): 36 file_handler.addWriter(file_writer) 37 registry = MagicMock() 38 registry.getAllMetaData = MagicMock(return_value=[{"id": "beep", "test_writer": {"output": [{"extension": ".test", "mime_type": "test/test"}]}}]) 39 with patch("UM.PluginRegistry.PluginRegistry.getInstance", MagicMock(return_value=registry)): 40 assert file_handler.getWriterByMimeType("test/test") == file_writer 41 42 43def test_getWriterByMimeType_UnknownMimeType(file_handler, file_writer): 44 file_handler.addWriter(file_writer) 45 registry = MagicMock() 46 registry.getAllMetaData = MagicMock(return_value=[]) 47 with patch("UM.PluginRegistry.PluginRegistry.getInstance", MagicMock(return_value=registry)): 48 assert file_handler.getWriterByMimeType("test/test") is None 49 50 51def test_getWriter_KnownWriter(file_handler, file_writer): 52 file_handler.addWriter(file_writer) 53 assert file_handler.getWriter("beep") == file_writer 54 55 56def test_getWriter_UnknownWriter(file_handler): 57 # We never added a writer, so we should get None 58 assert file_handler.getWriter("beep") is None 59 60 61def test_getReaderForFile(file_handler): 62 mocked_reader = MagicMock() 63 mocked_reader.acceptsFile = MagicMock(return_value = True) 64 file_handler.addReader(mocked_reader) 65 66 assert file_handler.getReaderForFile("whatever") is mocked_reader 67 68 69def test_getReaderForFileWithException(file_handler): 70 mocked_reader = MagicMock() 71 mocked_reader.acceptsFile = MagicMock(side_effect=Exception) 72 file_handler.addReader(mocked_reader) 73 74 # As file readers are plugins, we ensure that any exceptions are handled and dropped so they don't crash the 75 # application 76 assert file_handler.getReaderForFile("whatever") is None 77