aboutsummaryrefslogtreecommitdiff
path: root/src/amberscript/parser_shader_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/amberscript/parser_shader_test.cc')
-rw-r--r--src/amberscript/parser_shader_test.cc139
1 files changed, 137 insertions, 2 deletions
diff --git a/src/amberscript/parser_shader_test.cc b/src/amberscript/parser_shader_test.cc
index 4858568..657cc67 100644
--- a/src/amberscript/parser_shader_test.cc
+++ b/src/amberscript/parser_shader_test.cc
@@ -119,7 +119,7 @@ TEST_F(AmberScriptParserTest, ShaderPassThroughExtraParameters) {
Parser parser;
Result r = parser.Parse(in);
ASSERT_FALSE(r.IsSuccess());
- EXPECT_EQ("1: extra parameters after SHADER PASSTHROUGH", r.Error());
+ EXPECT_EQ("1: extra parameters after SHADER PASSTHROUGH: INVALID", r.Error());
}
TEST_F(AmberScriptParserTest, Shader) {
@@ -232,7 +232,104 @@ END)";
Parser parser;
Result r = parser.Parse(in);
ASSERT_FALSE(r.IsSuccess());
- EXPECT_EQ("2: extra parameters after SHADER command", r.Error());
+ EXPECT_EQ("2: extra parameters after SHADER command: INVALID", r.Error());
+}
+
+TEST_F(AmberScriptParserTest, ShaderTargetEnv) {
+ std::string in = R"(#!amber
+SHADER geometry shader_name GLSL TARGET_ENV spv1.4
+void main() {
+ gl_FragColor = vec3(2, 3, 4);
+}
+END)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+
+ ASSERT_TRUE(r.IsSuccess()) << r.Error();
+
+ auto script = parser.GetScript();
+ const auto& shaders = script->GetShaders();
+ ASSERT_EQ(1U, shaders.size());
+
+ const auto* shader = shaders[0].get();
+ EXPECT_EQ("spv1.4", shader->GetTargetEnv());
+}
+
+TEST_F(AmberScriptParserTest, ShaderTargetEnvMissingEnv) {
+ std::string in = R"(#!amber
+SHADER geometry shader_name GLSL TARGET_ENV
+void main() {
+ gl_FragColor = vec3(2, 3, 4);
+}
+END)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_FALSE(r.IsSuccess());
+ EXPECT_EQ("3: expected target environment after TARGET_ENV", r.Error());
+}
+
+TEST_F(AmberScriptParserTest, ShaderTargetEnvInvalidEnv) {
+ std::string in = R"(#!amber
+SHADER geometry shader_name GLSL TARGET_ENV 12345
+void main() {
+ gl_FragColor = vec3(2, 3, 4);
+}
+END)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_FALSE(r.IsSuccess());
+ EXPECT_EQ("2: expected target environment after TARGET_ENV", r.Error());
+}
+
+TEST_F(AmberScriptParserTest, ShaderVirtualFile) {
+ std::string in = R"(#!amber
+VIRTUAL_FILE my_shader.hlsl
+My shader source
+END
+
+SHADER vertex my_shader HLSL VIRTUAL_FILE my_shader.hlsl
+)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_EQ(r.Error(), "");
+
+ auto script = parser.GetScript();
+ auto shader = script->GetShader("my_shader");
+ ASSERT_TRUE(shader != nullptr);
+ auto source = shader->GetData();
+ ASSERT_EQ("My shader source\n", shader->GetData());
+}
+
+TEST_F(AmberScriptParserTest, VirtualFileDuplicatePath) {
+ std::string in = R"(#!amber
+VIRTUAL_FILE my.file
+Blah
+END
+
+VIRTUAL_FILE my.file
+Blah
+END
+)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_EQ(r.Error(), "8: Virtual file 'my.file' already declared");
+}
+
+TEST_F(AmberScriptParserTest, VirtualFileEmptyPath) {
+ std::string in = R"(#!amber
+VIRTUAL_FILE ""
+Blah
+END
+)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_EQ(r.Error(), "4: Virtual file path was empty");
}
struct ShaderTypeData {
@@ -315,6 +412,7 @@ TEST_P(AmberScriptParserShaderFormatTest, ShaderFormats) {
EXPECT_EQ(test_data.format, shader->GetFormat());
EXPECT_EQ(shader_result, shader->GetData());
}
+
INSTANTIATE_TEST_SUITE_P(
AmberScriptParserTestsShaderFormat,
AmberScriptParserShaderFormatTest,
@@ -363,5 +461,42 @@ END
ASSERT_TRUE(r.IsSuccess());
}
+TEST_F(AmberScriptParserTest, ShaderDefaultFilePath) {
+ std::string in = R"(#!amber
+SHADER fragment shader_name GLSL
+void main() {
+ gl_FragColor = vec3(2, 3, 4);
+}
+END)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_TRUE(r.IsSuccess()) << r.Error();
+
+ auto script = parser.GetScript();
+ auto shader = script->GetShader("shader_name");
+ EXPECT_EQ("embedded-shaders/shader_name", shader->GetFilePath());
+}
+
+TEST_F(AmberScriptParserTest, ShaderVirtualFilePath) {
+ std::string in = R"(#!amber
+VIRTUAL_FILE my_fragment_shader
+void main() {
+ gl_FragColor = vec3(2, 3, 4);
+}
+END
+
+SHADER fragment shader_name GLSL VIRTUAL_FILE my_fragment_shader
+)";
+
+ Parser parser;
+ Result r = parser.Parse(in);
+ ASSERT_TRUE(r.IsSuccess()) << r.Error();
+
+ auto script = parser.GetScript();
+ auto shader = script->GetShader("shader_name");
+ EXPECT_EQ("my_fragment_shader", shader->GetFilePath());
+}
+
} // namespace amberscript
} // namespace amber