aboutsummaryrefslogtreecommitdiff
path: root/glslc/src/resource_parse_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'glslc/src/resource_parse_test.cc')
-rw-r--r--glslc/src/resource_parse_test.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/glslc/src/resource_parse_test.cc b/glslc/src/resource_parse_test.cc
new file mode 100644
index 0000000..42c877b
--- /dev/null
+++ b/glslc/src/resource_parse_test.cc
@@ -0,0 +1,75 @@
+// Copyright 2017 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.
+
+#include "resource_parse.h"
+
+#include <gmock/gmock.h>
+
+namespace {
+
+using glslc::ParseResourceSettings;
+using glslc::ResourceSetting;
+using testing::Eq;
+
+struct ResourceSettingsCase {
+ std::string input;
+ bool success;
+ std::vector<ResourceSetting> settings;
+ std::string message;
+};
+
+using ParseResourceSettingsTest = ::testing::TestWithParam<ResourceSettingsCase>;
+
+TEST_P(ParseResourceSettingsTest, Sample) {
+ std::vector<ResourceSetting> settings;
+ std::string err;
+ const bool succeeded = ParseResourceSettings(GetParam().input, &settings, &err);
+ EXPECT_THAT(succeeded, Eq(GetParam().success));
+ EXPECT_THAT(settings, Eq(GetParam().settings));
+ EXPECT_THAT(err, Eq(GetParam().message));
+}
+
+INSTANTIATE_TEST_CASE_P(ParseResources, ParseResourceSettingsTest,
+ ::testing::ValuesIn(std::vector<ResourceSettingsCase>{
+ {"", true, {}, ""},
+ {" \t \t \n ", true, {}, ""},
+ {" blorp blam", false, {}, "invalid resource limit: blorp"},
+ {"MaxLightsxyz", false, {}, "invalid resource limit: MaxLightsxyz"},
+ {"MaxLights", false, {}, "missing value after limit: MaxLights"},
+ {"MaxLights x", false, {}, "invalid integer: x"},
+ {"MaxLights 99x", false, {}, "invalid integer: 99x"},
+ {"MaxLights 12 blam", false, {}, "invalid resource limit: blam"},
+ {"MaxLights 12", true, {{shaderc_limit_max_lights, 12}}, ""},
+ // Test negative number
+ {"MinProgramTexelOffset -9", true, {{shaderc_limit_min_program_texel_offset, -9}}, ""},
+ // Test leading, intervening, and trailing whitespace
+ {" \tMaxLights \n 12 \t ", true, {{shaderc_limit_max_lights, 12}}, ""},
+ // Test more than one limit setting.
+ {"MinProgramTexelOffset -10 MaxLights 4", true, {{shaderc_limit_min_program_texel_offset, -10}, {shaderc_limit_max_lights, 4}}, ""},
+ // Check ignore cases.
+ {"nonInductiveForLoops", false, {}, "missing value after limit: nonInductiveForLoops"},
+ {"nonInductiveForLoops 1", true, {}, ""},
+ {"whileLoops 1", true, {}, ""},
+ {"doWhileLoops 1", true, {}, ""},
+ {"generalUniformIndexing 1", true, {}, ""},
+ {"generalAttributeMatrixVectorIndexing 1", true, {}, ""},
+ {"generalVaryingIndexing 1", true, {}, ""},
+ {"generalSamplerIndexing 1", true, {}, ""},
+ {"generalVariableIndexing 1", true, {}, ""},
+ {"generalConstantMatrixVectorIndexing 1", true, {}, ""},
+ // Check an ignore case with a regular case
+ {"whileLoops 1 MaxLights 99", true, {{shaderc_limit_max_lights, 99}}, ""},
+ }), );
+
+} // anonymous namespace