Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/shaderc
Path: blob/main/glslc/test/working_directory.py
1560 views
1
# Copyright 2015 The Shaderc Authors. All rights reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License");
4
# you may not use this file except in compliance with the License.
5
# You may obtain a copy of the License at
6
#
7
# http://www.apache.org/licenses/LICENSE-2.0
8
#
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS,
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
# See the License for the specific language governing permissions and
13
# limitations under the License.
14
15
import os.path
16
17
import expect
18
from environment import File, Directory
19
from glslc_test_framework import inside_glslc_testsuite
20
from placeholder import FileShader
21
22
MINIMAL_SHADER = '#version 140\nvoid main() {}'
23
24
# @inside_glslc_testsuite('WorkDir')
25
class TestWorkDirNoArg(expect.ErrorMessage):
26
"""Tests -working-directory. Behavior cribbed from Clang."""
27
28
glslc_args = ['-working-directory']
29
expected_error = [
30
"glslc: error: argument to '-working-directory' is missing "
31
'(expected 1 value)\n',
32
'glslc: error: no input files\n']
33
34
35
# @inside_glslc_testsuite('WorkDir')
36
class TestWorkDirEqNoArg(expect.ErrorMessage):
37
"""Tests -working-directory=<empty>. Behavior cribbed from Clang."""
38
39
glslc_args = ['-working-directory=']
40
expected_error = ['glslc: error: no input files\n']
41
42
43
EMPTY_SHADER_IN_SUBDIR = Directory(
44
'subdir', [File('shader.vert', MINIMAL_SHADER)])
45
46
# @inside_glslc_testsuite('WorkDir')
47
class TestWorkDirEqNoArgCompileFile(expect.ValidNamedObjectFile):
48
"""Tests -working-directory=<empty> when compiling input file."""
49
50
environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])
51
glslc_args = ['-c', '-working-directory=', 'subdir/shader.vert']
52
# Output file should be generated into subdir/.
53
expected_object_filenames = ('subdir/shader.vert.spv',)
54
55
56
# @inside_glslc_testsuite('WorkDir')
57
class TestMultipleWorkDir(expect.ValidNamedObjectFile):
58
"""Tests that if there are multiple -working-directory=<dir> specified,
59
only the last one takes effect."""
60
61
environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])
62
glslc_args = ['-c', '-working-directory=i-dont-exist',
63
'-working-directory', 'i-think/me-neither',
64
'-working-directory=subdir', 'shader.vert']
65
# Output file should be generated into subdir/.
66
expected_object_filenames = ('subdir/shader.vert.spv',)
67
68
69
# @inside_glslc_testsuite('WorkDir')
70
class TestWorkDirPosition(expect.ValidNamedObjectFile):
71
"""Tests that -working-directory=<dir> affects all files before and after
72
it on the command line."""
73
74
environment = Directory('subdir', [
75
File('shader.vert', MINIMAL_SHADER),
76
File('cool.frag', MINIMAL_SHADER),
77
File('bla.vert', MINIMAL_SHADER)
78
])
79
glslc_args = ['-c', 'shader.vert', 'bla.vert',
80
'-working-directory=subdir', 'cool.frag']
81
# Output file should be generated into subdir/.
82
expected_object_filenames = (
83
'subdir/shader.vert.spv', 'subdir/cool.frag.spv', 'subdir/bla.vert.spv')
84
85
86
# @inside_glslc_testsuite('WorkDir')
87
class TestWorkDirDeepDir(expect.ValidNamedObjectFile):
88
"""Tests that -working-directory=<dir> works with directory hierarchies."""
89
90
environment = Directory('subdir', [
91
Directory('subsubdir', [
92
File('one.vert', MINIMAL_SHADER),
93
File('two.frag', MINIMAL_SHADER)
94
]),
95
File('zero.vert', MINIMAL_SHADER)
96
])
97
glslc_args = ['-c', 'zero.vert', 'subsubdir/one.vert',
98
'subsubdir/two.frag', '-working-directory=subdir']
99
# Output file should be generated into subdir/.
100
expected_object_filenames = (
101
'subdir/zero.vert.spv', 'subdir/subsubdir/one.vert.spv',
102
'subdir/subsubdir/two.frag.spv')
103
104
105
# @inside_glslc_testsuite('WorkDir')
106
class TestWorkDirCompileFile(expect.ValidNamedObjectFile):
107
"""Tests -working-directory=<dir> when compiling input file."""
108
109
environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])
110
glslc_args = ['-c', '-working-directory=subdir', 'shader.vert']
111
# Output file should be generated into subdir/.
112
expected_object_filenames = ('subdir/shader.vert.spv',)
113
114
115
# @inside_glslc_testsuite('WorkDir')
116
class TestWorkDirCompileFileOutput(expect.ValidNamedObjectFile):
117
"""Tests -working-directory=<dir> when compiling input file and specifying
118
output filename."""
119
120
environment = Directory('.', [
121
Directory('subdir', [
122
Directory('bin', []),
123
File('shader.vert', MINIMAL_SHADER)
124
])
125
])
126
glslc_args = ['-c', '-o', 'bin/spv', '-working-directory=subdir',
127
'shader.vert']
128
# Output file should be generated into subdir/bin/.
129
expected_object_filenames = ('subdir/bin/spv',)
130
131
132
# @inside_glslc_testsuite('WorkDir')
133
class TestWorkDirArgNoEq(expect.ValidNamedObjectFile):
134
"""Tests -working-directory <dir>."""
135
136
environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])
137
glslc_args = ['-working-directory', 'subdir', 'shader.vert']
138
expected_object_filenames = ('a.spv',)
139
140
141
# @inside_glslc_testsuite('WorkDir')
142
class TestWorkDirEqInArg(expect.ValidNamedObjectFile):
143
"""Tests -working-directory=<dir-with-equal-sign-inside>."""
144
145
environment = Directory('.', [
146
Directory('=subdir', [File('shader.vert', MINIMAL_SHADER)]),
147
])
148
glslc_args = ['-working-directory==subdir', 'shader.vert']
149
expected_object_filenames = ('a.spv',)
150
151
152
# @inside_glslc_testsuite('WorkDir')
153
class TestWorkDirCompileFileAbsolutePath(expect.ValidObjectFile):
154
"""Tests -working-directory=<dir> when compiling input file with absolute
155
path."""
156
157
shader = FileShader(MINIMAL_SHADER, '.vert')
158
glslc_args = ['-c', '-working-directory=subdir', shader]
159
160
161
# The -working-directory flag should not affect the placement of the link file.
162
# The following tests ensure that.
163
164
class WorkDirDoesntAffectLinkedFile(expect.ValidNamedObjectFile):
165
"""A base class for tests asserting that -working-directory has no impact
166
on the location of the output link file.
167
"""
168
environment = Directory('.', [
169
Directory('subdir', [
170
File('shader.vert', MINIMAL_SHADER),
171
# Try to fake glslc into putting the linked file here, though it
172
# shouldn't (because -working-directory doesn't impact -o).
173
Directory('bin', [])]),
174
File('shader.vert', "fake file, doesn't compile."),
175
Directory('bin', [])])
176
177
178
# @inside_glslc_testsuite('WorkDir')
179
class TestWorkDirLinkFileDefaultLocation(WorkDirDoesntAffectLinkedFile):
180
"""Tests that -working-directory doesn't impact the default link-file
181
location.
182
"""
183
glslc_args = ['-working-directory=subdir', 'shader.vert']
184
expected_object_filenames = ('a.spv',)
185
186
187
# @inside_glslc_testsuite('WorkDir')
188
class TestWorkDirLinkFileExplicit(WorkDirDoesntAffectLinkedFile):
189
"""Tests that -working-directory doesn't impact the named link-file
190
location.
191
"""
192
glslc_args = ['-o', 'b.spv', '-working-directory=subdir', 'shader.vert']
193
expected_object_filenames = ('b.spv',)
194
195
196
# @inside_glslc_testsuite('WorkDir')
197
class TestWorkDirLinkFileInSubdir(WorkDirDoesntAffectLinkedFile):
198
"""Tests that -working-directory doesn't impact the link-file sent into an
199
existing subdirectory.
200
"""
201
glslc_args = ['-o', 'bin/spv', '-working-directory=subdir', 'shader.vert']
202
expected_object_filenames = ('bin/spv',)
203
204
205
# @inside_glslc_testsuite('WorkDir')
206
class TestWorkDirLinkFileInvalidPath(expect.ErrorMessage):
207
"""Tests that -working-directory doesn't impact the error generated for an
208
invalid -o path.
209
"""
210
211
environment = Directory('.', [
212
Directory('subdir', [
213
File('shader.vert', MINIMAL_SHADER),
214
Directory('missing', [])]), # Present here, but missing in parent.
215
File('shader.vert', "fake file, doesn't compile.")])
216
217
glslc_args = [
218
'-o', 'missing/spv', '-working-directory=subdir', 'shader.vert']
219
220
expected_error = ['glslc: error: cannot open output file: ',
221
"'missing/spv': No such file or directory\n"]
222
223