File: test_finders.py

package info (click to toggle)
python-moderngl-window 3.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 69,096 kB
  • sloc: python: 12,076; makefile: 21
file content (85 lines) | stat: -rw-r--r-- 3,416 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from pathlib import Path
from unittest import TestCase

from utils import settings_context

from moderngl_window.exceptions import ImproperlyConfigured
from moderngl_window.finders import data, program, scene, texture
from moderngl_window.finders.base import BaseFilesystemFinder


class FinderTestCase(TestCase):
    root = Path(__file__).parent / 'fixtures' / 'resources'
    finder_settings = {
        'DATA_DIRS': [Path(root, 'data')],
        'PROGRAM_DIRS': [Path(root, 'programs')],
        'TEXTURE_DIRS': [Path(root, 'textures')],
        'SCENE_DIRS': [Path(root, 'scenes')],
    }

    def test_data_finder(self):
        """Find a data file"""
        with settings_context(self.finder_settings):
            result = data.FilesystemFinder().find(Path('data.json'))
            self.assertIsInstance(result, Path)
            self.assertTrue(result.name, 'data.json')

    def test_program_finder(self):
        """Find a glsl file"""
        with settings_context(self.finder_settings):
            result = program.FilesystemFinder().find(Path('test.glsl'))
            self.assertIsInstance(result, Path)
            self.assertTrue(result.name, 'test.glsl')

    def test_texture_finder(self):
        """Find a texture"""
        with settings_context(self.finder_settings):
            result = texture.FilesystemFinder().find(Path('image.png'))
            self.assertIsInstance(result, Path)
            self.assertTrue(result.name, 'image.png')

    def test_scene_finder(self):
        """Find a scene"""
        with settings_context(self.finder_settings):
            result = scene.FilesystemFinder().find(Path('model.obj'))
            self.assertIsInstance(result, Path)
            self.assertTrue(result.name, 'model.obj')

    def test_relative_path_raises_exception(self):
        with settings_context({'DATA_DIRS': ['relative_location']}):
            with self.assertRaises(ImproperlyConfigured):
                data.FilesystemFinder().find(Path('something'))

    def test_absolute_path(self):
        """Ensure absolute paths are ignored"""
        with settings_context(self.finder_settings):
            finder = data.FilesystemFinder()
            result = finder.find(Path(self.root, Path('data/data.json')))
            self.assertIsNone(result)

    def test_not_found(self):
        """Ensure finder returns non when nothing was found"""
        finder = data.FilesystemFinder()
        result = finder.find(Path(self.root, Path('data/idontexist.json')))
        self.assertIsNone(result)

    def test_no_search_dirs(self):
        """When no search dirs the finder should return None"""
        with settings_context({'DATA_DIRS': []}):
            finder = data.FilesystemFinder()
            result = finder.find(Path('data/data.json'))
            self.assertIsNone(result)

    def test_non_path(self):
        """Raise ValueError if finder gets non-Path instance"""
        finder = data.FilesystemFinder()
        with self.assertRaises(ValueError):
            finder.find('test')

    def test_custom_finder_missing_setting(self):
        """Ensure broken finder with nonexisting settings attr is detected"""
        class BrokenFinder(BaseFilesystemFinder):
            settings_attr = "NOPE"

        with self.assertRaises(ImproperlyConfigured):
            BrokenFinder()