#include <gtest/gtest.h>
#include "TestFixture.h"
namespace glslangtest {
namespace {
using StructNameTest = GlslangTest<::testing::Test>;
TEST_F(StructNameTest, StructNameAsStructMember)
{
const std::string inputFname = GlobalTestSettings.testRoot + "/struct_name_as_struct_member.frag";
std::string input;
tryLoadFile(inputFname, "input", &input);
EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result = compileAndLink("struct_name_as_struct_member.frag", input, "", controls,
glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected TYPE_NAME, expecting IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("compilation errors"), std::string::npos);
}
TEST_F(StructNameTest, StructParameterAfterNonStruct)
{
const std::string inputFname = GlobalTestSettings.testRoot + "/struct_parameter_after_non_struct.frag";
std::string input;
tryLoadFile(inputFname, "input", &input);
EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result = compileAndLink("struct_parameter_after_non_struct.frag", input, "", controls,
glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("compilation errors"), std::string::npos);
}
TEST_F(StructNameTest, StructMemberDeclaratorLists)
{
const std::string inputFname = GlobalTestSettings.testRoot + "/struct_member_declarator_lists.frag";
std::string input;
tryLoadFile(inputFname, "input", &input);
EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result = compileAndLink("struct_member_declarator_lists.frag", input, "", controls,
glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected TYPE_NAME, expecting IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("syntax error, unexpected TYPE_NAME, expecting IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("compilation errors"), std::string::npos);
}
TEST_F(StructNameTest, StructFunctionParameters)
{
const std::string inputFname = GlobalTestSettings.testRoot + "/struct_function_parameters.frag";
std::string input;
tryLoadFile(inputFname, "input", &input);
EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result = compileAndLink("struct_function_parameters.frag", input, "", controls,
glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("compilation errors"), std::string::npos);
}
TEST_F(StructNameTest, StructConstructionPatterns)
{
const std::string inputFname = GlobalTestSettings.testRoot + "/struct_construction_patterns.frag";
std::string input;
tryLoadFile(inputFname, "input", &input);
EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result = compileAndLink("struct_construction_patterns.frag", input, "", controls,
glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("syntax error, unexpected IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.linkingError.find("syntax error, unexpected TYPE_NAME, expecting IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("syntax error, unexpected TYPE_NAME, expecting IDENTIFIER"), std::string::npos);
EXPECT_EQ(result.shaderResults[0].output.find("compilation errors"), std::string::npos);
}
}
}