aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-02-22 17:20:11 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-23 15:30:37 +0000
commit2b1e468dabd2ac7bea7ec17740275f4f4aad30c3 (patch)
tree6cd847e75b45c9f02f2c3f299ca81664434c0f85 /tests
parent69d4992e69d7b142450d0ccb587b7b26be7cf1ea (diff)
skslc switch support
BUG=skia: Change-Id: Ida7f9e80139aa1e4f43804cafbcac640e47fab25 Reviewed-on: https://skia-review.googlesource.com/8771 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/SkSLErrorTest.cpp30
-rw-r--r--tests/SkSLGLSLTest.cpp87
2 files changed, 116 insertions, 1 deletions
diff --git a/tests/SkSLErrorTest.cpp b/tests/SkSLErrorTest.cpp
index 301281c28e..bde5e70795 100644
--- a/tests/SkSLErrorTest.cpp
+++ b/tests/SkSLErrorTest.cpp
@@ -337,6 +337,10 @@ DEF_TEST(SkSLUseWithoutInitialize, r) {
test_failure(r,
"void main() { bool x; if (true && (false || x)) return; }",
"error: 1: 'x' has not been assigned\n1 error\n");
+ test_failure(r,
+ "void main() { int x; switch (3) { case 0: x = 0; case 1: x = 1; }"
+ "sk_FragColor = vec4(x); }",
+ "error: 1: 'x' has not been assigned\n1 error\n");
}
DEF_TEST(SkSLUnreachable, r) {
@@ -366,13 +370,16 @@ DEF_TEST(SkSLNoReturn, r) {
DEF_TEST(SkSLBreakOutsideLoop, r) {
test_failure(r,
"void foo() { while(true) {} if (true) break; }",
- "error: 1: break statement must be inside a loop\n1 error\n");
+ "error: 1: break statement must be inside a loop or switch\n1 error\n");
}
DEF_TEST(SkSLContinueOutsideLoop, r) {
test_failure(r,
"void foo() { for(;;); continue; }",
"error: 1: continue statement must be inside a loop\n1 error\n");
+ test_failure(r,
+ "void foo() { switch (1) { default: continue; } }",
+ "error: 1: continue statement must be inside a loop\n1 error\n");
}
DEF_TEST(SkSLStaticIfError, r) {
@@ -430,4 +437,25 @@ DEF_TEST(SkSLUnsupportedGLSLIdentifiers, r) {
"error: 1: unknown identifier 'gl_FragColor'\n1 error\n");
}
+DEF_TEST(SkSLWrongSwitchTypes, r) {
+ test_failure(r,
+ "void main() { switch (vec2(1)) { case 1: break; } }",
+ "error: 1: expected 'int', but found 'vec2'\n1 error\n");
+ test_failure(r,
+ "void main() { switch (1) { case vec2(1): break; } }",
+ "error: 1: expected 'int', but found 'vec2'\n1 error\n");
+}
+
+DEF_TEST(SkSLNonConstantCase, r) {
+ test_failure(r,
+ "void main() { int x = 1; switch (1) { case x: break; } }",
+ "error: 1: case value must be a constant\n1 error\n");
+}
+
+DEF_TEST(SkSLDuplicateCase, r) {
+ test_failure(r,
+ "void main() { switch (1) { case 0: case 1: case 0: break; } }",
+ "error: 1: duplicate case value\n1 error\n");
+}
+
#endif
diff --git a/tests/SkSLGLSLTest.cpp b/tests/SkSLGLSLTest.cpp
index a0fdb98dcf..53e5c6badf 100644
--- a/tests/SkSLGLSLTest.cpp
+++ b/tests/SkSLGLSLTest.cpp
@@ -777,4 +777,91 @@ DEF_TEST(SkSLGeometry, r) {
SkSL::Program::kGeometry_Kind);
}
+DEF_TEST(SkSLSwitch, r) {
+ test(r,
+ "void main() {"
+ " float x;"
+ " switch (1) {"
+ " case 0:"
+ " x = 0.0;"
+ " break;"
+ " case 1:"
+ " x = 1.0;"
+ " break;"
+ " default:"
+ " x = 2.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " float x;\n"
+ " switch (1) {\n"
+ " case 0:\n"
+ " x = 0.0;\n"
+ " break;\n"
+ " case 1:\n"
+ " x = 1.0;\n"
+ " break;\n"
+ " default:\n"
+ " x = 2.0;\n"
+ " }\n"
+ " sk_FragColor = vec4(x);\n"
+ "}\n");
+ test(r,
+ "void main() {"
+ " float x;"
+ " switch (2) {"
+ " case 0:"
+ " x = 0.0;"
+ " case 1:"
+ " x = 1.0;"
+ " default:"
+ " x = 2.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " float x;\n"
+ " switch (2) {\n"
+ " case 0:\n"
+ " x = 0.0;\n"
+ " case 1:\n"
+ " x = 1.0;\n"
+ " default:\n"
+ " x = 2.0;\n"
+ " }\n"
+ " sk_FragColor = vec4(2.0);\n"
+ "}\n");
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (3) {"
+ " case 0:"
+ " x = 0.0;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " float x = 0.0;\n"
+ " switch (3) {\n"
+ " case 0:\n"
+ " x = 0.0;\n"
+ " case 1:\n"
+ " x = 1.0;\n"
+ " }\n"
+ " sk_FragColor = vec4(x);\n"
+ "}\n");
+}
+
#endif