349 lines
8.2 KiB
Python
349 lines
8.2 KiB
Python
# Copyright 2015 The Shaderc Authors. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import expect
|
|
from glslc_test_framework import inside_glslc_testsuite
|
|
from placeholder import FileShader, StdinShader
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapENoDefs(expect.StdoutMatch):
|
|
"""Tests -E without any defines."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){}', '.vert')
|
|
expected_stdout = '#version 140\nvoid main() { }\n'
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEGlslFileAccepted(expect.StdoutMatch):
|
|
"""Tests -E if we provide a .glsl file without an explicit stage."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){}', '.glsl')
|
|
expected_stdout = '#version 140\nvoid main() { }\n'
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapESingleDefine(expect.StdoutMatch):
|
|
"""Tests -E with command-line define."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){ int a = X; }', '.vert')
|
|
expected_stdout = '#version 140\nvoid main() { int a = 4; }\n'
|
|
glslc_args = ['-DX=4', '-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEExpansion(expect.StdoutMatch):
|
|
"""Tests -E with macro expansion."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#define X 4
|
|
void main() {
|
|
int a = X;
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_stdout = '''#version 140
|
|
|
|
void main() {
|
|
int a = 4;
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEFunctionMacro(expect.StdoutMatch):
|
|
"""Tests -E with function-style macro expansion."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#define X(A) 4+A
|
|
void main() {
|
|
int a = X(1);
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_stdout = '''#version 140
|
|
|
|
void main() {
|
|
int a = 4 + 1;
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEPragma(expect.StdoutMatch):
|
|
"""Tests -E to make sure pragmas get retained."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#pragma optimize(off)
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_stdout = '''#version 140
|
|
#pragma optimize(off)
|
|
void main() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEExtension(expect.StdoutMatch):
|
|
"""Tests -E to make sure extensions get retained."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#extension foo: require
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_stdout = '''#version 140
|
|
#extension foo : require
|
|
void main() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapELine(expect.StdoutMatch):
|
|
"""Tests -E to make sure line numbers get retained."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#define X 4
|
|
#line X
|
|
|
|
#line 2 3
|
|
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_stdout = '''#version 140
|
|
|
|
#line 4
|
|
|
|
#line 2 3
|
|
|
|
void main() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEError(expect.ErrorMessage):
|
|
"""Tests -E to make sure #errors get retained."""
|
|
|
|
shader = FileShader('''#version 140
|
|
#if 1
|
|
#error This is an error
|
|
#endif
|
|
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
|
|
expected_error = [
|
|
shader, ':3: error: \'#error\' : This is an error\n',
|
|
'1 error generated.\n']
|
|
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEStdin(expect.StdoutMatch):
|
|
"""Tests to make sure -E works with stdin."""
|
|
|
|
shader = StdinShader('''#version 140
|
|
void main() {
|
|
}
|
|
''')
|
|
|
|
expected_stdout = '''#version 140
|
|
void main() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', '-fshader-stage=vertex', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEStdinDoesNotRequireShaderStage(expect.StdoutMatch):
|
|
"""Tests to make sure -E works with stdin even when no shader-stage
|
|
is specified."""
|
|
|
|
shader = StdinShader('''#version 140
|
|
void main() {
|
|
}
|
|
''')
|
|
|
|
expected_stdout = '''#version 140
|
|
void main() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEMultipleFiles(expect.StdoutMatch):
|
|
"""Tests to make sure -E works with multiple files."""
|
|
|
|
shader = StdinShader('''#version 140
|
|
void main() {
|
|
}
|
|
''')
|
|
shader2 = FileShader('''#version 140
|
|
void function() {
|
|
}
|
|
''', '.vert')
|
|
expected_stdout = '''#version 140
|
|
void main() {
|
|
}
|
|
#version 140
|
|
void function() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', '-fshader-stage=vertex', shader, shader2]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEMultipleFilesWithoutStage(expect.StdoutMatch):
|
|
"""Tests to make sure -E works with multiple files even if we do not
|
|
specify a stage."""
|
|
|
|
shader = StdinShader('''#version 140
|
|
void main() {
|
|
}
|
|
''')
|
|
shader2 = FileShader('''#version 140
|
|
void function() {
|
|
}
|
|
''', '.glsl')
|
|
expected_stdout = '''#version 140
|
|
void main() {
|
|
}
|
|
#version 140
|
|
void function() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', shader, shader2]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEOutputFile(expect.SuccessfulReturn, expect.ValidFileContents):
|
|
"""Tests to make sure -E works with output files."""
|
|
|
|
shader = FileShader('''#version 140
|
|
void function() {
|
|
}
|
|
''', '.vert')
|
|
expected_file_contents = '''#version 140
|
|
void function() {
|
|
}
|
|
'''
|
|
target_filename = 'foo'
|
|
glslc_args = ['-E', shader, '-ofoo']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEWithS(expect.StdoutMatch):
|
|
"""Tests -E in the presence of -S."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){}', '.vert')
|
|
expected_stdout = '#version 140\nvoid main() { }\n'
|
|
glslc_args = ['-E', '-S', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestMultipileDashCapE(expect.StdoutMatch):
|
|
"""Tests that using -E multiple times works."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){}', '.vert')
|
|
expected_stdout = '#version 140\nvoid main() { }\n'
|
|
glslc_args = ['-E', '-E', shader, '-E']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEAfterFile(expect.StdoutMatch):
|
|
"""Tests that using -E after the filename also works."""
|
|
|
|
shader = FileShader('#version 140\nvoid main(){}', '.vert')
|
|
expected_stdout = '#version 140\nvoid main() { }\n'
|
|
glslc_args = [shader, '-E']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEWithDashC(expect.StdoutMatch):
|
|
"""Tests to make sure -E works in the presence of -c."""
|
|
|
|
shader = FileShader('''#version 140
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
shader2 = FileShader('''#version 140
|
|
void function() {
|
|
}
|
|
''', '.vert')
|
|
expected_stdout = '''#version 140
|
|
void main() {
|
|
}
|
|
#version 140
|
|
void function() {
|
|
}
|
|
'''
|
|
glslc_args = ['-E', '-c', shader, shader2]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEWithPPErrors(expect.ErrorMessage):
|
|
"""Tests to make sure -E outputs error messages for preprocessing errors."""
|
|
|
|
shader = FileShader('''#version 310 es
|
|
#extension s enable // missing :
|
|
#defin A // Bad define
|
|
#if X // In glsl X must be defined for X to work.
|
|
// Lack of endif.
|
|
void main() {
|
|
}
|
|
''', '.vert')
|
|
expected_error = [
|
|
shader, ':2: error: \'#extension\' : \':\' missing after extension',
|
|
' name\n',
|
|
shader, ':3: error: \'#\' : invalid directive: defin\n',
|
|
shader, ':4: error: \'preprocessor evaluation\' : undefined macro in',
|
|
' expression not allowed in es profile X\n',
|
|
shader, ':8: error: \'\' : missing #endif\n',
|
|
'4 errors generated.\n']
|
|
glslc_args = ['-E', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapE')
|
|
class TestDashCapEStdinErrors(expect.ErrorMessage):
|
|
"""Tests that -E outputs error messages correctly for stdin input."""
|
|
|
|
shader = StdinShader('''#version 310 es
|
|
#extension s enable // missing :
|
|
void main() {
|
|
}
|
|
''')
|
|
expected_error = [
|
|
'<stdin>:2: error: \'#extension\' : \':\' missing after extension',
|
|
' name\n',
|
|
'1 error generated.\n']
|
|
glslc_args = ['-E', shader]
|