Skip to content

Add missing 'throw' to ImageFilter.shader's validation check#180923

Merged
auto-submit[bot] merged 3 commits into
flutter:masterfrom
b-luk:fragment-shader-test-imagefilter-error
Jan 14, 2026
Merged

Add missing 'throw' to ImageFilter.shader's validation check#180923
auto-submit[bot] merged 3 commits into
flutter:masterfrom
b-luk:fragment-shader-test-imagefilter-error

Conversation

@b-luk

@b-luk b-luk commented Jan 13, 2026

Copy link
Copy Markdown
Contributor

An error StringBuffer was created and populated, but was left unused. This PR throws it.

This fixes and re-enables fragment_shader_test.dart's ImageFilter error test. The test is re-enabled as an impeller-only test because ImageFilter.shader requires impeller.

Fixes #180763

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@b-luk b-luk requested a review from gaaclarke January 13, 2026 19:30
@github-actions github-actions Bot added the engine flutter/engine related. See also e: labels. label Jan 13, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly fixes an issue where an error message was being constructed but not thrown during ImageFilter.shader validation. The re-enabling of the corresponding test case is also appropriate. I've added one suggestion to improve the readability and correctness of the re-enabled test.

Comment on lines 495 to 520
const shaders = <String>[
'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();

Object? error;
try {
ImageFilter.shader(shader);
} catch (err) {
error = err;
}
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'));
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For better readability and to make the test cases more explicit, you could refactor this to use a list of records instead of two separate lists for shaders and error flags. This also addresses a likely typo in the errors list for 'missing_texture.frag.iplr'.

      const 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),
      ];

      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<StateError>());
        final String 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'));
        }
      }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good suggestion. The existing test did in fact have a typo and used "samplerError: false" for the missing_texture case. I applied the suggestion.

@gaaclarke gaaclarke left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm, thanks @b-luk !

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 13, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 13, 2026
@auto-submit

auto-submit Bot commented Jan 13, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/180923, because - The status or check suite Linux linux_unopt has failed. Please fix the issues identified (or deflake) before re-applying this label.

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 13, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 14, 2026
@auto-submit

auto-submit Bot commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/180923, because - The status or check suite Linux linux_web_engine_tests has failed. Please fix the issues identified (or deflake) before re-applying this label.

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 14, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Jan 14, 2026
Merged via the queue into flutter:master with commit 72b2728 Jan 14, 2026
181 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 14, 2026
patrickBillingsley pushed a commit to patrickBillingsley/flutter that referenced this pull request Jan 14, 2026
…#180923)

An error StringBuffer was created and populated, but was left unused.
This PR `throw`s it.

This fixes and re-enables fragment_shader_test.dart's ImageFilter error
test. The test is re-enabled as an impeller-only test because
ImageFilter.shader requires impeller.

Fixes flutter#180763

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
@b-luk b-luk deleted the fragment-shader-test-imagefilter-error branch January 14, 2026 22:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

engine flutter/engine related. See also e: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

reenable 'ImageFilter.shader errors if shader does not have correct uniform layout' test

2 participants