blob: 456f0eba9ae049c2c79bd4472ff1b795efca0d63 [file] [log] [blame]
Andrew Woloszyne549e7b2015-07-16 11:07:40 -04001# 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
15import expect
16import os.path
17from glslc_test_framework import inside_glslc_testsuite
18from placeholder import FileShader, StdinShader, TempFileName
19
20
21@inside_glslc_testsuite('File')
22class SimpleFileCompiled(expect.ValidObjectFile):
23 """Tests whether or not a simple glsl file compiles."""
24
25 shader = FileShader('#version 310 es\nvoid main() {}', '.frag')
26 glslc_args = ['-c', shader]
27
28
29@inside_glslc_testsuite('File')
30class NotSpecifyingOutputName(expect.SuccessfulReturn,
31 expect.CorrectObjectFilePreamble):
32 """Tests that when there is no -o and -E/-S/-c specified, output as a.spv."""
33
34 shader = FileShader('void main() {}', '.frag')
35 glslc_args = [shader]
36
37 def check_output_a_spv(self, status):
38 output_name = os.path.join(status.directory, 'a.spv')
39 return self.verify_object_file_preamble(output_name)
40
41
42@inside_glslc_testsuite('Parameters')
43class HelpParameters(
44 expect.ReturnCodeIsZero, expect.StdoutMatch, expect.StderrMatch):
45 """Tests the --help flag outputs correctly and does not produce and error."""
46
47 glslc_args = ['--help']
48
49 expected_stdout = '''Usage: glslc [options] file...
50
51An input file of - represents standard input.
52
53Options:
54 -c Only run preprocess, compile, and assemble steps.
55 -Dmacro[=defn] Add an implicit macro definition.
56 -E Outputs only the results of the preprocessing step.
57 Output defaults to standard out.
58 -fshader-stage=<stage>
59 Treat subsequent input files as having stage <stage>.
60 Valid stages are vertex, fragment, tesscontrol, tesseval,
61 geometry, and compute.
62 -g Generate source-level debug information.
63 Currently this option has no effect.
64 --help Display available options.
65 -I <value> Add directory to include search path.
66 -o <file> Write output to <file>.
67 A file name of '-' represents standard output.
68 -std=<value> Version and profile for input files. Possible values
69 are concatenations of version and profile, e.g. 310es,
70 450core, etc.
71 -S Only run preprocess and compilation steps.
72 -w Suppresses all warning messages.
73 -Werror Treat all warnings as errors.
74 -x <language> Treat subsequent input files as having type <language>.
75 The only supported language is glsl.
76'''
77
78 expected_stderr = ''
79
80
81@inside_glslc_testsuite('Parameters')
82class HelpIsNotTooWide(expect.StdoutNoWiderThan80Columns):
83 """Tests that --help output is not too wide."""
84
85 glslc_args = ['--help']
86
87
88@inside_glslc_testsuite('Parameters')
89class UnknownSingleLetterArgument(expect.ErrorMessage):
90 """Tests that an unknown argument triggers an error message."""
91
92 glslc_args = ['-a']
93 expected_error = ["glslc: error: unknown argument: '-a'\n"]
94
95
96@inside_glslc_testsuite('Parameters')
97class UnknownMultiLetterArgument(expect.ErrorMessage):
98 """Tests that an unknown argument triggers an error message."""
99
100 glslc_args = ['-zzz']
101 expected_error = ["glslc: error: unknown argument: '-zzz'\n"]
102
103
104@inside_glslc_testsuite('Parameters')
105class UnsupportedOption(expect.ErrorMessage):
106 """Tests that an unsupported option triggers an error message."""
107
108 glslc_args = ['--unsupported-option']
109 expected_error = [
110 "glslc: error: unsupported option: '--unsupported-option'\n"]
111
112
113@inside_glslc_testsuite('File')
114class FileNotFound(expect.ErrorMessage):
115 """Tests the error message if a file cannot be found."""
116
117 blabla_file = TempFileName('blabla.frag')
118 glslc_args = [blabla_file]
119 expected_error = [
120 "glslc: error: cannot open input file: '", blabla_file,
121 "': No such file or directory\n"]
122
123
124@inside_glslc_testsuite('Unsupported')
125class LinkingNotSupported(expect.ErrorMessage):
126 """Tests the error message generated by linking not supported yet."""
127
128 shader1 = FileShader('void main() {}', '.vert')
129 shader2 = FileShader('void main() {}', '.frag')
130 glslc_args = [shader1, shader2]
131 expected_error = [
132 'glslc: error: linking multiple files is not supported yet. ',
133 'Use -c to compile files individually.\n']
134
135
136@inside_glslc_testsuite('Unsupported')
137class MultipleStdinUnsupported(expect.ErrorMessage):
138 """Tests the error message generated by having more than one - input."""
139
140 glslc_args = ['-c', '-fshader-stage=vertex', '-', '-']
141 expected_error = [
142 'glslc: error: specifying standard input "-" as input more'
143 ' than once is not allowed.\n']
144
145
146@inside_glslc_testsuite('Parameters')
147class StdinWithoutShaderStage(expect.StdoutMatch, expect.StderrMatch):
148 """Tests that you must use -fshader-stage when specifying - as input."""
149 shader = StdinShader(
150 """
151 int a() {
152 }
153 void main() {
154 int x = a();
155 }
156 """)
157 glslc_args = [shader]
158
159 expected_stdout = ''
160 expected_stderr = [
161 "glslc: error: '-': -fshader-stage required when input is from "
162 'standard input "-"\n']