diff --git a/engine/src/flutter/lib/ui/painting.dart b/engine/src/flutter/lib/ui/painting.dart index 73e38072498..d25b09d2518 100644 --- a/engine/src/flutter/lib/ui/painting.dart +++ b/engine/src/flutter/lib/ui/painting.dart @@ -4400,6 +4400,7 @@ abstract class ImageFilter { if (invalidSampler) { buffer.write('The shader is missing a sampler uniform.\n'); } + throw StateError(buffer.toString()); } return _FragmentShaderImageFilter(shader); } diff --git a/engine/src/flutter/testing/dart/fragment_shader_test.dart b/engine/src/flutter/testing/dart/fragment_shader_test.dart index d0d8053499e..e0d7d6c72b5 100644 --- a/engine/src/flutter/testing/dart/fragment_shader_test.dart +++ b/engine/src/flutter/testing/dart/fragment_shader_test.dart @@ -489,39 +489,36 @@ void main() async { shader.dispose(); }); - test('ImageFilter.shader errors if shader does not have correct uniform layout', () async { - // TODO(gaaclarke): This test was disabled for a long time and has been - // atrophied. Fix it or remove it. - print('Atrophied test is disabled.'); - return; - // ignore: dead_code - const shaders = [ - 'no_uniforms.frag.iplr', - 'missing_size.frag.iplr', - 'missing_texture.frag.iplr', - ]; - const errors = <(bool, bool)>[(true, true), (true, false), (false, false)]; - for (var i = 0; i < 3; i++) { - final String fileName = shaders[i]; - final FragmentProgram program = await FragmentProgram.fromAsset(fileName); - final FragmentShader shader = program.fragmentShader(); + _runImpellerTest( + 'ImageFilter.shader errors if shader does not have correct uniform layout', + () async { + const List<({String file, bool floatError, bool samplerError})> testCases = [ + (file: 'no_uniforms.frag.iplr', floatError: true, samplerError: true), + (file: 'missing_size.frag.iplr', floatError: true, samplerError: false), + (file: 'missing_texture.frag.iplr', floatError: false, samplerError: true), + ]; - Object? error; - try { - ImageFilter.shader(shader); - } catch (err) { - error = err; + for (final testCase in testCases) { + final FragmentProgram program = await FragmentProgram.fromAsset(testCase.file); + final FragmentShader shader = program.fragmentShader(); + + Object? error; + try { + ImageFilter.shader(shader); + } catch (err) { + error = err; + } + expect(error, isA()); + final errorMessage = error.toString(); + if (testCase.floatError) { + expect(errorMessage, contains('shader has fewer than two float')); + } + if (testCase.samplerError) { + expect(errorMessage, contains('shader is missing a sampler uniform')); + } } - expect(error is StateError, true); - final (bool floatError, bool samplerError) = errors[i]; - if (floatError) { - expect(error.toString(), contains('shader has fewer than two float')); - } - if (samplerError) { - expect(error.toString(), contains('shader is missing a sampler uniform')); - } - } - }); + }, + ); _runImpellerTest('Shader Compiler appropriately pads vec3 uniform arrays', () async { // TODO(gaaclarke): This test was disabled for a long time and has been