diff options
Diffstat (limited to 'src/silx/test/test_resources.py')
-rw-r--r-- | src/silx/test/test_resources.py | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/src/silx/test/test_resources.py b/src/silx/test/test_resources.py new file mode 100644 index 0000000..4030271 --- /dev/null +++ b/src/silx/test/test_resources.py @@ -0,0 +1,187 @@ +# coding: utf-8 +# /*########################################################################## +# +# Copyright (c) 2016-2018 European Synchrotron Radiation Facility +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ###########################################################################*/ +"""Test for resource files management.""" + +__authors__ = ["T. Vincent"] +__license__ = "MIT" +__date__ = "08/03/2019" + + +import os +import unittest +import shutil +import tempfile + +import silx.resources + + +class TestResources(unittest.TestCase): + + @classmethod + def setUpClass(cls): + super(TestResources, cls).setUpClass() + + cls.tmpDirectory = tempfile.mkdtemp(prefix="resource_") + os.mkdir(os.path.join(cls.tmpDirectory, "gui")) + destination_dir = os.path.join(cls.tmpDirectory, "gui", "icons") + os.mkdir(destination_dir) + source = silx.resources.resource_filename("gui/icons/zoom-in.png") + destination = os.path.join(destination_dir, "foo.png") + shutil.copy(source, destination) + source = silx.resources.resource_filename("gui/icons/zoom-out.svg") + destination = os.path.join(destination_dir, "close.png") + shutil.copy(source, destination) + + @classmethod + def tearDownClass(cls): + super(TestResources, cls).tearDownClass() + shutil.rmtree(cls.tmpDirectory) + + def setUp(self): + # Store the original configuration + self._oldResources = dict(silx.resources._RESOURCE_DIRECTORIES) + unittest.TestCase.setUp(self) + + def tearDown(self): + unittest.TestCase.tearDown(self) + # Restiture the original configuration + silx.resources._RESOURCE_DIRECTORIES = self._oldResources + + def test_resource_dir(self): + """Get a resource directory""" + icons_dirname = silx.resources.resource_filename('gui/icons/') + self.assertTrue(os.path.isdir(icons_dirname)) + + def test_resource_file(self): + """Get a resource file name""" + filename = silx.resources.resource_filename('gui/icons/colormap.png') + self.assertTrue(os.path.isfile(filename)) + + def test_resource_nonexistent(self): + """Get a non existent resource""" + filename = silx.resources.resource_filename('non_existent_file.txt') + self.assertFalse(os.path.exists(filename)) + + def test_isdir(self): + self.assertTrue(silx.resources.is_dir('gui/icons')) + + def test_not_isdir(self): + self.assertFalse(silx.resources.is_dir('gui/icons/colormap.png')) + + def test_list_dir(self): + result = silx.resources.list_dir('gui/icons') + self.assertTrue(len(result) > 10) + + # With prefixed resources + + def test_resource_dir_with_prefix(self): + """Get a resource directory""" + icons_dirname = silx.resources.resource_filename('silx:gui/icons/') + self.assertTrue(os.path.isdir(icons_dirname)) + + def test_resource_file_with_prefix(self): + """Get a resource file name""" + filename = silx.resources.resource_filename('silx:gui/icons/colormap.png') + self.assertTrue(os.path.isfile(filename)) + + def test_resource_nonexistent_with_prefix(self): + """Get a non existent resource""" + filename = silx.resources.resource_filename('silx:non_existent_file.txt') + self.assertFalse(os.path.exists(filename)) + + def test_isdir_with_prefix(self): + self.assertTrue(silx.resources.is_dir('silx:gui/icons')) + + def test_not_isdir_with_prefix(self): + self.assertFalse(silx.resources.is_dir('silx:gui/icons/colormap.png')) + + def test_list_dir_with_prefix(self): + result = silx.resources.list_dir('silx:gui/icons') + self.assertTrue(len(result) > 10) + + # Test new repository + + def test_repository_not_exists(self): + """The resource from 'test' is available""" + self.assertRaises(ValueError, silx.resources.resource_filename, 'test:foo.png') + + def test_adding_test_directory(self): + """The resource from 'test' is available""" + silx.resources.register_resource_directory("test", "silx.test.resources", forced_path=self.tmpDirectory) + path = silx.resources.resource_filename('test:gui/icons/foo.png') + self.assertTrue(os.path.exists(path)) + + def test_adding_test_directory_no_override(self): + """The resource from 'silx' is still available""" + silx.resources.register_resource_directory("test", "silx.test.resources", forced_path=self.tmpDirectory) + filename1 = silx.resources.resource_filename('gui/icons/close.png') + filename2 = silx.resources.resource_filename('silx:gui/icons/close.png') + filename3 = silx.resources.resource_filename('test:gui/icons/close.png') + self.assertTrue(os.path.isfile(filename1)) + self.assertTrue(os.path.isfile(filename2)) + self.assertTrue(os.path.isfile(filename3)) + self.assertEqual(filename1, filename2) + self.assertNotEqual(filename1, filename3) + + def test_adding_test_directory_non_existing(self): + """A resource while not exists in test is not available anyway it exists + in silx""" + silx.resources.register_resource_directory("test", "silx.test.resources", forced_path=self.tmpDirectory) + resource_name = "gui/icons/colormap.png" + path = silx.resources.resource_filename('test:' + resource_name) + path2 = silx.resources.resource_filename('silx:' + resource_name) + self.assertFalse(os.path.exists(path)) + self.assertTrue(os.path.exists(path2)) + + +class TestResourcesWithoutPkgResources(TestResources): + + @classmethod + def setUpClass(cls): + super(TestResourcesWithoutPkgResources, cls).setUpClass() + cls._old = silx.resources.pkg_resources + silx.resources.pkg_resources = None + + @classmethod + def tearDownClass(cls): + silx.resources.pkg_resources = cls._old + del cls._old + super(TestResourcesWithoutPkgResources, cls).tearDownClass() + + +class TestResourcesWithCustomDirectory(TestResources): + + @classmethod + def setUpClass(cls): + super(TestResourcesWithCustomDirectory, cls).setUpClass() + cls._old = silx.resources._RESOURCES_DIR + base = os.path.dirname(silx.resources.__file__) + silx.resources._RESOURCES_DIR = base + + @classmethod + def tearDownClass(cls): + silx.resources._RESOURCES_DIR = cls._old + del cls._old + super(TestResourcesWithCustomDirectory, cls).tearDownClass() |