Path: blob/main/glslc/test/working_directory.py
1560 views
# Copyright 2015 The Shaderc Authors. All rights reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License");3# you may not use this file except in compliance with the License.4# You may obtain a copy of the License at5#6# http://www.apache.org/licenses/LICENSE-2.07#8# Unless required by applicable law or agreed to in writing, software9# distributed under the License is distributed on an "AS IS" BASIS,10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.11# See the License for the specific language governing permissions and12# limitations under the License.1314import os.path1516import expect17from environment import File, Directory18from glslc_test_framework import inside_glslc_testsuite19from placeholder import FileShader2021MINIMAL_SHADER = '#version 140\nvoid main() {}'2223# @inside_glslc_testsuite('WorkDir')24class TestWorkDirNoArg(expect.ErrorMessage):25"""Tests -working-directory. Behavior cribbed from Clang."""2627glslc_args = ['-working-directory']28expected_error = [29"glslc: error: argument to '-working-directory' is missing "30'(expected 1 value)\n',31'glslc: error: no input files\n']323334# @inside_glslc_testsuite('WorkDir')35class TestWorkDirEqNoArg(expect.ErrorMessage):36"""Tests -working-directory=<empty>. Behavior cribbed from Clang."""3738glslc_args = ['-working-directory=']39expected_error = ['glslc: error: no input files\n']404142EMPTY_SHADER_IN_SUBDIR = Directory(43'subdir', [File('shader.vert', MINIMAL_SHADER)])4445# @inside_glslc_testsuite('WorkDir')46class TestWorkDirEqNoArgCompileFile(expect.ValidNamedObjectFile):47"""Tests -working-directory=<empty> when compiling input file."""4849environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])50glslc_args = ['-c', '-working-directory=', 'subdir/shader.vert']51# Output file should be generated into subdir/.52expected_object_filenames = ('subdir/shader.vert.spv',)535455# @inside_glslc_testsuite('WorkDir')56class TestMultipleWorkDir(expect.ValidNamedObjectFile):57"""Tests that if there are multiple -working-directory=<dir> specified,58only the last one takes effect."""5960environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])61glslc_args = ['-c', '-working-directory=i-dont-exist',62'-working-directory', 'i-think/me-neither',63'-working-directory=subdir', 'shader.vert']64# Output file should be generated into subdir/.65expected_object_filenames = ('subdir/shader.vert.spv',)666768# @inside_glslc_testsuite('WorkDir')69class TestWorkDirPosition(expect.ValidNamedObjectFile):70"""Tests that -working-directory=<dir> affects all files before and after71it on the command line."""7273environment = Directory('subdir', [74File('shader.vert', MINIMAL_SHADER),75File('cool.frag', MINIMAL_SHADER),76File('bla.vert', MINIMAL_SHADER)77])78glslc_args = ['-c', 'shader.vert', 'bla.vert',79'-working-directory=subdir', 'cool.frag']80# Output file should be generated into subdir/.81expected_object_filenames = (82'subdir/shader.vert.spv', 'subdir/cool.frag.spv', 'subdir/bla.vert.spv')838485# @inside_glslc_testsuite('WorkDir')86class TestWorkDirDeepDir(expect.ValidNamedObjectFile):87"""Tests that -working-directory=<dir> works with directory hierarchies."""8889environment = Directory('subdir', [90Directory('subsubdir', [91File('one.vert', MINIMAL_SHADER),92File('two.frag', MINIMAL_SHADER)93]),94File('zero.vert', MINIMAL_SHADER)95])96glslc_args = ['-c', 'zero.vert', 'subsubdir/one.vert',97'subsubdir/two.frag', '-working-directory=subdir']98# Output file should be generated into subdir/.99expected_object_filenames = (100'subdir/zero.vert.spv', 'subdir/subsubdir/one.vert.spv',101'subdir/subsubdir/two.frag.spv')102103104# @inside_glslc_testsuite('WorkDir')105class TestWorkDirCompileFile(expect.ValidNamedObjectFile):106"""Tests -working-directory=<dir> when compiling input file."""107108environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])109glslc_args = ['-c', '-working-directory=subdir', 'shader.vert']110# Output file should be generated into subdir/.111expected_object_filenames = ('subdir/shader.vert.spv',)112113114# @inside_glslc_testsuite('WorkDir')115class TestWorkDirCompileFileOutput(expect.ValidNamedObjectFile):116"""Tests -working-directory=<dir> when compiling input file and specifying117output filename."""118119environment = Directory('.', [120Directory('subdir', [121Directory('bin', []),122File('shader.vert', MINIMAL_SHADER)123])124])125glslc_args = ['-c', '-o', 'bin/spv', '-working-directory=subdir',126'shader.vert']127# Output file should be generated into subdir/bin/.128expected_object_filenames = ('subdir/bin/spv',)129130131# @inside_glslc_testsuite('WorkDir')132class TestWorkDirArgNoEq(expect.ValidNamedObjectFile):133"""Tests -working-directory <dir>."""134135environment = Directory('.', [EMPTY_SHADER_IN_SUBDIR])136glslc_args = ['-working-directory', 'subdir', 'shader.vert']137expected_object_filenames = ('a.spv',)138139140# @inside_glslc_testsuite('WorkDir')141class TestWorkDirEqInArg(expect.ValidNamedObjectFile):142"""Tests -working-directory=<dir-with-equal-sign-inside>."""143144environment = Directory('.', [145Directory('=subdir', [File('shader.vert', MINIMAL_SHADER)]),146])147glslc_args = ['-working-directory==subdir', 'shader.vert']148expected_object_filenames = ('a.spv',)149150151# @inside_glslc_testsuite('WorkDir')152class TestWorkDirCompileFileAbsolutePath(expect.ValidObjectFile):153"""Tests -working-directory=<dir> when compiling input file with absolute154path."""155156shader = FileShader(MINIMAL_SHADER, '.vert')157glslc_args = ['-c', '-working-directory=subdir', shader]158159160# The -working-directory flag should not affect the placement of the link file.161# The following tests ensure that.162163class WorkDirDoesntAffectLinkedFile(expect.ValidNamedObjectFile):164"""A base class for tests asserting that -working-directory has no impact165on the location of the output link file.166"""167environment = Directory('.', [168Directory('subdir', [169File('shader.vert', MINIMAL_SHADER),170# Try to fake glslc into putting the linked file here, though it171# shouldn't (because -working-directory doesn't impact -o).172Directory('bin', [])]),173File('shader.vert', "fake file, doesn't compile."),174Directory('bin', [])])175176177# @inside_glslc_testsuite('WorkDir')178class TestWorkDirLinkFileDefaultLocation(WorkDirDoesntAffectLinkedFile):179"""Tests that -working-directory doesn't impact the default link-file180location.181"""182glslc_args = ['-working-directory=subdir', 'shader.vert']183expected_object_filenames = ('a.spv',)184185186# @inside_glslc_testsuite('WorkDir')187class TestWorkDirLinkFileExplicit(WorkDirDoesntAffectLinkedFile):188"""Tests that -working-directory doesn't impact the named link-file189location.190"""191glslc_args = ['-o', 'b.spv', '-working-directory=subdir', 'shader.vert']192expected_object_filenames = ('b.spv',)193194195# @inside_glslc_testsuite('WorkDir')196class TestWorkDirLinkFileInSubdir(WorkDirDoesntAffectLinkedFile):197"""Tests that -working-directory doesn't impact the link-file sent into an198existing subdirectory.199"""200glslc_args = ['-o', 'bin/spv', '-working-directory=subdir', 'shader.vert']201expected_object_filenames = ('bin/spv',)202203204# @inside_glslc_testsuite('WorkDir')205class TestWorkDirLinkFileInvalidPath(expect.ErrorMessage):206"""Tests that -working-directory doesn't impact the error generated for an207invalid -o path.208"""209210environment = Directory('.', [211Directory('subdir', [212File('shader.vert', MINIMAL_SHADER),213Directory('missing', [])]), # Present here, but missing in parent.214File('shader.vert', "fake file, doesn't compile.")])215216glslc_args = [217'-o', 'missing/spv', '-working-directory=subdir', 'shader.vert']218219expected_error = ['glslc: error: cannot open output file: ',220"'missing/spv': No such file or directory\n"]221222223