From af19769831f1c4c3b90c85aa9f8851cd8bbf86d5 Mon Sep 17 00:00:00 2001 From: Ethan Nicholas Date: Mon, 27 Feb 2017 13:26:45 -0500 Subject: Re-land of skslc switch support This reverts commit 7d975fc200bbbea991ec4c04c08f3a5ea7b847af. BUG=skia: Change-Id: I57521f7a291a35cfed58d623ea4f8da29582d2c5 Reviewed-on: https://skia-review.googlesource.com/8993 Reviewed-by: Ethan Nicholas Commit-Queue: Ethan Nicholas --- tests/SkSLErrorTest.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'tests/SkSLErrorTest.cpp') 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 -- cgit v1.2.3