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
|
"""A profile that runs only ShaderTest instances."""
from __future__ import (
absolute_import, division, print_function, unicode_literals
)
import collections
import os
from six.moves import zip
import six
from framework.options import OPTIONS
from framework import grouptools
from framework.profile import TestProfile
from framework.test.shader_test import ShaderTest, MultiShaderTest
from .py_modules.constants import GENERATED_TESTS_DIR, TESTS_DIR
__all__ = ['profile']
profile = TestProfile()
shader_tests = collections.defaultdict(list)
# Find and add all shader tests.
basepath = os.path.normpath(os.path.join(TESTS_DIR, '..'))
gen_basepath = os.path.relpath(os.path.join(GENERATED_TESTS_DIR, '..'), basepath)
for basedir in [TESTS_DIR, GENERATED_TESTS_DIR]:
isgenerated = basedir == GENERATED_TESTS_DIR
for dirpath, _, filenames in os.walk(basedir):
groupname = grouptools.from_path(os.path.relpath(dirpath, basedir))
for filename in filenames:
testname, ext = os.path.splitext(filename)
if ext == '.shader_test':
dirname = os.path.relpath(dirpath, basepath)
filepath = os.path.join(dirname, filename)
if isgenerated:
installpath = os.path.relpath(filepath, gen_basepath)
else:
installpath = None
if OPTIONS.process_isolation:
test = ShaderTest.new(filepath, installpath)
else:
shader_tests[groupname].append((filepath, installpath))
continue
else:
continue
group = grouptools.join(groupname, testname)
assert group not in profile.test_list, group
profile.test_list[group] = test
# Because we need to handle duplicate group names in TESTS and GENERATED_TESTS
# this dictionary is constructed, then added to the actual test dictionary.
for group, files in six.iteritems(shader_tests):
assert group not in profile.test_list, 'duplicate group: {}'.format(group)
# We'll end up with a list of tuples, split that into two lists
files, installedfiles = list(zip(*files))
files = list(files)
installedfiles = list(installedfiles)
# If there is only one file in the directory use a normal shader_test.
# Otherwise use a MultiShaderTest
if len(files) == 1:
group = grouptools.join(
group, os.path.basename(os.path.splitext(files[0])[0]))
profile.test_list[group] = ShaderTest.new(files[0], installedfiles[0])
else:
if all(i is None for i in installedfiles):
installedfiles = None
else:
for i, n in enumerate(installedfiles):
if n is None:
installedfiles[i] = files[i]
profile.test_list[group] = MultiShaderTest.new(files, installedfiles)
|