diff --git a/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java b/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java index 87db8cf09f..3fb32814f5 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java @@ -2,6 +2,7 @@ package io.flutter.embedding.engine.systemchannels; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import io.flutter.Log; import io.flutter.embedding.engine.FlutterJNI; import io.flutter.embedding.engine.dart.DartExecutor; @@ -23,7 +24,8 @@ public class AccessibilityChannel { @NonNull public final FlutterJNI flutterJNI; @Nullable private AccessibilityMessageHandler handler; - private final BasicMessageChannel.MessageHandler parsingMessageHandler = + @VisibleForTesting + final BasicMessageChannel.MessageHandler parsingMessageHandler = new BasicMessageChannel.MessageHandler() { @Override public void onMessage( @@ -31,6 +33,7 @@ public class AccessibilityChannel { // If there is no handler to respond to this message then we don't need to // parse it. Return. if (handler == null) { + reply.reply(null); return; } diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/FlutterTestSuite.java b/engine/src/flutter/shell/platform/android/test/io/flutter/FlutterTestSuite.java index 7f42093a2f..8f7dbb53cf 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/FlutterTestSuite.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/FlutterTestSuite.java @@ -26,6 +26,7 @@ import io.flutter.embedding.engine.loader.FlutterLoaderTest; import io.flutter.embedding.engine.mutatorsstack.FlutterMutatorViewTest; import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistryTest; import io.flutter.embedding.engine.renderer.FlutterRendererTest; +import io.flutter.embedding.engine.systemchannels.AccessibilityChannelTest; import io.flutter.embedding.engine.systemchannels.DeferredComponentChannelTest; import io.flutter.embedding.engine.systemchannels.KeyEventChannelTest; import io.flutter.embedding.engine.systemchannels.PlatformChannelTest; @@ -56,6 +57,7 @@ import test.io.flutter.embedding.engine.PluginComponentTest; @RunWith(Suite.class) @SuiteClasses({ AccessibilityBridgeTest.class, + AccessibilityChannelTest.class, ApplicationInfoLoaderTest.class, BinaryCodecTest.class, DartExecutorTest.class, diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/systemchannels/AccessibilityChannelTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/systemchannels/AccessibilityChannelTest.java new file mode 100644 index 0000000000..adf121a99f --- /dev/null +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/systemchannels/AccessibilityChannelTest.java @@ -0,0 +1,33 @@ +package io.flutter.embedding.engine.systemchannels; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.annotation.TargetApi; +import io.flutter.embedding.engine.FlutterJNI; +import io.flutter.embedding.engine.dart.DartExecutor; +import io.flutter.plugin.common.BasicMessageChannel; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +@Config( + manifest = Config.NONE, + shadows = {}) +@RunWith(RobolectricTestRunner.class) +@TargetApi(24) +public class AccessibilityChannelTest { + @Test + public void repliesWhenNoAccessibilityHandler() throws JSONException { + AccessibilityChannel accessibilityChannel = + new AccessibilityChannel(mock(DartExecutor.class), mock(FlutterJNI.class)); + JSONObject arguments = new JSONObject(); + arguments.put("type", "announce"); + BasicMessageChannel.Reply reply = mock(BasicMessageChannel.Reply.class); + accessibilityChannel.parsingMessageHandler.onMessage(arguments, reply); + verify(reply).reply(null); + } +}