Start adding unit tests of SkRuntimeEffect
- Change SkRuntimeEffect::Make so *it* can fail, and returns
[Effect, ErrorText].
- Initial tests just test for expected failure conditions.
Next steps are to add tests for effects that should work,
and to validate results on CPU and GPU.
Change-Id: Ibac8c3046104577434034263e9e4a4b177e89129
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/261095
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/tests/SkRuntimeEffectTest.cpp b/tests/SkRuntimeEffectTest.cpp
new file mode 100644
index 0000000..c6a521c
--- /dev/null
+++ b/tests/SkRuntimeEffectTest.cpp
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/core/SkRuntimeEffect.h"
+#include "tests/Test.h"
+
+DEF_TEST(SkRuntimeEffectInvalidPrograms, r) {
+ auto test = [r](const char* src, const char* expected) {
+ auto [effect, errorText] = SkRuntimeEffect::Make(SkString(src));
+ REPORTER_ASSERT(r, !effect);
+ REPORTER_ASSERT(r, errorText.contains(expected),
+ "Expected error message to contain \"%s\". Actual message: \"%s\"",
+ expected, errorText.c_str());
+ };
+
+ // Features that are only allowed in .fp files (key, in uniform, ctype, when, tracked).
+ // Ensure that these fail, and the error messages contain the relevant keyword.
+ test("layout(key) in bool Input;"
+ "void main(float x, float y, inout half4 color) {}",
+ "key");
+
+ test("in uniform float Input;"
+ "void main(float x, float y, inout half4 color) {}",
+ "in uniform");
+
+ test("layout(ctype=SkRect) float4 Input;"
+ "void main(float x, float y, inout half4 color) {}",
+ "ctype");
+
+ test("in bool Flag; layout(when=Flag) uniform float Input;"
+ "void main(float x, float y, inout half4 color) {}",
+ "when");
+
+ test("layout(tracked) uniform float Input;"
+ "void main(float x, float y, inout half4 color) {}",
+ "tracked");
+}