366 lines
10 KiB
Python
366 lines
10 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
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDNoArg(expect.ErrorMessage):
|
|
"""Tests -D without macroname."""
|
|
|
|
glslc_args = ['-D']
|
|
expected_error = [
|
|
"glslc: error: argument to '-D' is missing\n",
|
|
'glslc: error: no input files\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDXeqY(expect.ValidObjectFile):
|
|
"""Tests -DX=Y."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){X=vec4(1.);}', '.vert')
|
|
glslc_args = ['-c', '-DX=gl_Position', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDXeq(expect.ValidObjectFile):
|
|
"""Tests -DX=."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){X}', '.vert')
|
|
glslc_args = ['-c', '-DX=', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDX(expect.ValidObjectFile):
|
|
"""Tests -DX."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){X}', '.vert')
|
|
glslc_args = ['-c', '-DX', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDeq(expect.ErrorMessage):
|
|
"""Tests -D=.
|
|
|
|
This is actually allowed by clang, though the resulting #define
|
|
causes a preprocessing error.
|
|
"""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){}', '.vert')
|
|
glslc_args = ['-c', '-D=', shader]
|
|
# TODO(antiagainst): figure out what should we report as the line number
|
|
# for errors in predefined macros and fix here.
|
|
expected_error = [
|
|
"<command line>:2: error: '#define' : must be followed by macro name\n",
|
|
'1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestMultipleDashCapD(expect.ValidObjectFile):
|
|
"""Tests multiple -D occurrences."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){X Y a=Z;}', '.vert')
|
|
glslc_args = ['-c', '-DX', '-DY=int', '-DZ=(1+2)', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestMultipleDashCapDOfSameName(expect.ValidObjectFile):
|
|
"""Tests multiple -D occurrences with same macro name."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){X Y a=Z;}', '.vert')
|
|
glslc_args = ['-c', '-DX=main', '-DY=int', '-DZ=(1+2)', '-DX', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDGL_(expect.ErrorMessage):
|
|
"""Tests that we cannot -D macros beginning with GL_."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){}', '.vert')
|
|
glslc_args = ['-DGL_ES=1', shader]
|
|
expected_error = [
|
|
"glslc: error: names beginning with 'GL_' cannot be "
|
|
'defined: -DGL_ES=1\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDReservedMacro(expect.WarningMessage):
|
|
"""Tests that we cannot -D GLSL's predefined macros."""
|
|
|
|
shader = FileShader('#version 150\nvoid main(){}', '.vert')
|
|
# Consecutive underscores are banned anywhere in the name.
|
|
glslc_args = [
|
|
'-D__LINE__=1', '-Dmid__dle', '-Dend__', '-D_single_is_valid_', shader]
|
|
|
|
w = 'glslc: warning: names containing consecutive underscores are reserved: '
|
|
expected_warning = [w, '-D__LINE__=1\n', w, '-Dmid__dle\n', w, '-Dend__\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithVersion(expect.ErrorMessage):
|
|
"""Tests -D works well when #version is present."""
|
|
|
|
shader = FileShader(
|
|
"""#version 310 es
|
|
void main(){X}
|
|
void foo(){Y}""", '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', shader]
|
|
|
|
expected_error = [
|
|
shader, ":3: error: 'return' : void function cannot return a value\n",
|
|
'1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithCommentBeforeVersion(expect.ErrorMessage):
|
|
"""Tests -D works well with #version preceded by comments."""
|
|
|
|
shader = FileShader(
|
|
"""// comment 1
|
|
/*
|
|
* comment 2
|
|
*/
|
|
#version 450 core
|
|
void main(){X}
|
|
void foo(){Y}""", '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', shader]
|
|
|
|
expected_error = [
|
|
shader, ":7: error: 'return' : void function cannot return a value\n",
|
|
'1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithCommentAfterVersion(expect.ErrorMessage):
|
|
"""Tests -D works well with #version followed by comments."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
|
|
#version 150 core /*
|
|
comment
|
|
*/
|
|
void main(){X}
|
|
void foo(){Y}""", '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', shader]
|
|
|
|
expected_error = [
|
|
shader, ":7: error: 'return' : void function cannot return a value\n",
|
|
'1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashStd(expect.ErrorMessageSubstr):
|
|
"""Tests -D works well with -std."""
|
|
|
|
shader = FileShader('void main(){X}\nvoid foo(){Y}', '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', '-std=310es', shader]
|
|
|
|
expected_error_substr = [
|
|
shader, ":2: error: 'return' : void function cannot return a value\n",
|
|
'1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashStdAndVersion(expect.ErrorMessage):
|
|
"""Tests -D works well with both -std and #version."""
|
|
|
|
shader = FileShader(
|
|
"""#version 310 es
|
|
void main(){X}
|
|
void foo(){Y}""", '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', '-std=450core', shader]
|
|
|
|
expected_error = [
|
|
shader, ': warning: (version, profile) forced to be (450, ',
|
|
'core), while in source code it is (310, es)\n',
|
|
shader, ":3: error: 'return' : void function cannot return a value\n",
|
|
'1 warning and 1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashStdAndVersionAndComments(expect.ErrorMessage):
|
|
"""Tests -D works well with -std, #version, and comments around it."""
|
|
|
|
shader = FileShader(
|
|
"""// comment before
|
|
|
|
#version 310 es /* comment after
|
|
*/
|
|
|
|
void main(){X}
|
|
void foo(){Y}""", '.vert')
|
|
glslc_args = ['-DX=', '-DY=return 3;', '-std=450core', shader]
|
|
|
|
expected_error = [
|
|
shader, ': warning: (version, profile) forced to be (450, core), while '
|
|
'in source code it is (310, es)\n',
|
|
shader, ":7: error: 'return' : void function cannot return a value\n",
|
|
'1 warning and 1 error generated.\n']
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashE(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E outputs expanded -D macros."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
void main(){Y}
|
|
""", '.vert')
|
|
glslc_args = ['-DY=return 3;', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
void main() { return 3; }
|
|
"""]
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashEIfDef(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes -DX #ifdefs correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
#ifdef X
|
|
void f() { }
|
|
#else
|
|
void f() { int x; }
|
|
#endif
|
|
void main(){ return 3; }
|
|
""", '.vert')
|
|
glslc_args = ['-DX', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
|
|
void f() { }
|
|
|
|
|
|
|
|
void main() { return 3; }
|
|
"""]
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashEIfNDef(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes -DX #ifndefs correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
#ifndef X
|
|
void f() { }
|
|
#else
|
|
void f() { int x; }
|
|
#endif
|
|
void main(){ return 3; }
|
|
""", '.vert')
|
|
glslc_args = ['-DX', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
|
|
|
|
|
|
void f() { int x; }
|
|
|
|
void main() { return 3; }
|
|
"""]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashEEqIfDef(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes -DX= #ifdefs correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
#ifdef X
|
|
void f() { }
|
|
#else
|
|
void f() { int x; }
|
|
#endif
|
|
void main() { return 3; }
|
|
""", '.vert')
|
|
glslc_args = ['-DX=', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
|
|
void f() { }
|
|
|
|
|
|
|
|
void main() { return 3; }
|
|
"""]
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashEEqIfNDef(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes -DX= #ifndefs correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
#ifndef X
|
|
void f() { }
|
|
#else
|
|
void f() { int x; }
|
|
#endif
|
|
void main(){ return 3; }
|
|
""", '.vert')
|
|
glslc_args = ['-DX=', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
|
|
|
|
|
|
void f() { int x; }
|
|
|
|
void main() { return 3; }
|
|
"""]
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashEFunctionMacro(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes -D function macros correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
void main(){ return FOO(3); }
|
|
""", '.vert')
|
|
glslc_args = ['-DFOO(x)=(2*x+1)*x*x', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
void main() { return(2 * 3 + 1) * 3 * 3; }
|
|
"""]
|
|
|
|
@inside_glslc_testsuite('OptionCapD')
|
|
class TestDashCapDWithDashENestedMacro(expect.ReturnCodeIsZero,
|
|
expect.StdoutMatch):
|
|
"""Tests -E processes referencing -D options correctly."""
|
|
|
|
shader = FileShader(
|
|
"""
|
|
void main() { return X; }
|
|
""", '.vert')
|
|
glslc_args = ['-DY=4', '-DX=Y', '-E', '-std=450core', shader]
|
|
|
|
expected_stdout = [
|
|
"""
|
|
void main() { return 4; }
|
|
"""]
|