|
1 | 1 | package io.flutter.embedding.android;
|
2 | 2 |
|
3 | 3 | import static org.junit.Assert.assertEquals;
|
| 4 | +import static org.junit.Assert.assertTrue; |
| 5 | +import static org.mockito.Mockito.mock; |
| 6 | +import static org.mockito.Mockito.when; |
4 | 7 |
|
| 8 | +import android.content.Context; |
5 | 9 | import android.content.Intent;
|
6 | 10 | import androidx.annotation.NonNull;
|
| 11 | +import androidx.annotation.Nullable; |
7 | 12 | import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode;
|
| 13 | +import io.flutter.embedding.engine.FlutterEngine; |
| 14 | +import io.flutter.embedding.engine.FlutterJNI; |
| 15 | +import io.flutter.embedding.engine.loader.FlutterLoader; |
| 16 | +import io.flutter.plugins.GeneratedPluginRegistrant; |
| 17 | +import java.util.List; |
| 18 | +import org.junit.After; |
| 19 | +import org.junit.Before; |
8 | 20 | import org.junit.Test;
|
9 | 21 | import org.junit.runner.RunWith;
|
| 22 | +import org.robolectric.Robolectric; |
10 | 23 | import org.robolectric.RobolectricTestRunner;
|
11 | 24 | import org.robolectric.annotation.Config;
|
12 | 25 |
|
13 | 26 | @Config(manifest = Config.NONE)
|
14 | 27 | @RunWith(RobolectricTestRunner.class)
|
15 | 28 | public class FlutterFragmentActivityTest {
|
| 29 | + @Before |
| 30 | + public void setUp() { |
| 31 | + GeneratedPluginRegistrant.clearRegisteredEngines(); |
| 32 | + } |
| 33 | + |
| 34 | + @After |
| 35 | + public void tearDown() { |
| 36 | + GeneratedPluginRegistrant.clearRegisteredEngines(); |
| 37 | + } |
16 | 38 |
|
17 | 39 | @Test
|
18 | 40 | public void createFlutterFragment__defaultRenderModeSurface() {
|
@@ -44,6 +66,39 @@ protected RenderMode getRenderMode() {
|
44 | 66 | assertEquals(activity.createFlutterFragment().getRenderMode(), RenderMode.texture);
|
45 | 67 | }
|
46 | 68 |
|
| 69 | + @Test |
| 70 | + public void itRegistersPluginsAtConfigurationTime() { |
| 71 | + FlutterFragmentActivity activity = |
| 72 | + Robolectric.buildActivity(FlutterFragmentActivityWithProvidedEngine.class).get(); |
| 73 | + assertTrue(GeneratedPluginRegistrant.getRegisteredEngines().isEmpty()); |
| 74 | + |
| 75 | + // Calling onCreate on the FlutterFragmentActivity will create a FlutterFragment and |
| 76 | + // commit it to the fragment manager. This attaches the fragment to the FlutterFragmentActivity |
| 77 | + // creating and configuring the engine. |
| 78 | + activity.onCreate(null); |
| 79 | + |
| 80 | + List<FlutterEngine> registeredEngines = GeneratedPluginRegistrant.getRegisteredEngines(); |
| 81 | + assertEquals(1, registeredEngines.size()); |
| 82 | + assertEquals(activity.getFlutterEngine(), registeredEngines.get(0)); |
| 83 | + } |
| 84 | + |
| 85 | + static class FlutterFragmentActivityWithProvidedEngine extends FlutterFragmentActivity { |
| 86 | + @Override |
| 87 | + protected FlutterFragment createFlutterFragment() { |
| 88 | + return FlutterFragment.createDefault(); |
| 89 | + } |
| 90 | + |
| 91 | + @Nullable |
| 92 | + @Override |
| 93 | + public FlutterEngine provideFlutterEngine(@NonNull Context context) { |
| 94 | + FlutterJNI flutterJNI = mock(FlutterJNI.class); |
| 95 | + when(flutterJNI.isAttached()).thenReturn(true); |
| 96 | + |
| 97 | + return new FlutterEngine( |
| 98 | + context, mock(FlutterLoader.class), flutterJNI, new String[] {}, false); |
| 99 | + } |
| 100 | + } |
| 101 | + |
47 | 102 | private static class FakeFlutterFragmentActivity extends FlutterFragmentActivity {
|
48 | 103 | @Override
|
49 | 104 | public Intent getIntent() {
|
|
0 commit comments