Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d35b01f

Browse files
authored
Eliminate android test log spam (#44982)
Set gradle to treat warnings as errors and suppress or fix all warnings in engine android tests. Fixes flutter/flutter/133070 After doing this work I was disappointed to realized that the only lint turned on was deprecration but this is still a step in the right direction. - Remove usages of deprecated junit.framework and replace with org.junit in KeyboardManagerTest, PlatformViewsControllerTest and SinglePresentationViewTest - Annotate deprecated usages of Registrar - Suppress warnings for getSystemWindowInsets and ensure roboletric config consistant with targetApi lint annotation, bump itDescribesTextFieldsWithTextAndHint to 28 because test actually fails on api 26 - Suppress warnings for DartExecutor.send - Suppress warnings for ClipboardManager.set/hasText - Suppress warnings for getWindowSystemUiVisibility, setMessageHandler, DartExecutor.send, InputMethodSubtype, and proof of concept migration from Roboletric.setupActivity - Suppress deprecation warnings, set minsdk on tests that were checking for sdk version - Suppress deprecation warnings in SpellCheckPluginTest - Suppress deprecation warnings in MouseCursorPluginTest, set minsdk config to match target api - Stop calling RuntimeEnvrionment.application and insted a call ApplicationProvider.getApplicationContext() in SingleViewPresentationTest - Start calling FlutterView(Context, FlutterSurfaceView) - Suppress deprecation warnings in PlatformPluginTest, getText, Robolectric.setup/buildActivity, system ui flags - Suppress deprecation warnings in PlayStoreDeferredComponentManagerTest - Suppress deprecation warnings in KeyboardChannelTest - Suppress deprecation warnings in SettingsChannelTest - Suppress deprecation warnings in ApplicationInfoLoaderTest - Stop calling RuntimeEnvrionment.application and insted a call ApplicationProvider.getApplicationContext() in FlutterEngineGroupCacheTest - Suppress deprecation warnings in FlutterAndroidComponentTest - Suppress deprecation warnings in FlutterFragmentTest, more robolectric setup activity calls - Suppress deprecation warnings in FlutterActivityAndFragmentDelegateTest - Shadow.directlyOn is incompatible with java 17+, refactor to use reflectors and direct following https://github.com/robolectric/robolectric/pull/6598/files as an example Unsure if SplashShadowResources is used anywhere - Enable warnings as errors - Formatting
1 parent 591bf9f commit d35b01f

20 files changed

+210
-51
lines changed

shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public class FlutterActivityAndFragmentDelegateTest {
6666
private FlutterEngine mockFlutterEngine;
6767
private FlutterActivityAndFragmentDelegate.Host mockHost;
6868

69+
@SuppressWarnings("deprecation")
70+
// Robolectric.setupActivity
71+
// TODO(reidbaker): https://github.com/flutter/flutter/issues/133151
6972
@Before
7073
public void setup() {
7174
FlutterInjector.reset();
@@ -402,6 +405,9 @@ public void itGivesHostAnOpportunityToConfigureFlutterSurfaceView() {
402405
verify(mockHost, times(1)).onFlutterSurfaceViewCreated(isNotNull());
403406
}
404407

408+
@SuppressWarnings("deprecation")
409+
// Robolectric.setupActivity
410+
// TODO(reidbaker): https://github.com/flutter/flutter/issues/133151
405411
@Test
406412
public void itGivesHostAnOpportunityToConfigureFlutterTextureView() {
407413
// ---- Test setup ----

shell/platform/android/test/io/flutter/embedding/android/FlutterAndroidComponentTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,9 @@ public Context getContext() {
265265
return ApplicationProvider.getApplicationContext();
266266
}
267267

268+
@SuppressWarnings("deprecation")
269+
// Robolectric.setupActivity
270+
// TODO(reidbaker): https://github.com/flutter/flutter/issues/133151
268271
@Nullable
269272
@Override
270273
public Activity getActivity() {

shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ public void itReturnsExclusiveAppComponent() {
283283
assertEquals(fragment.getExclusiveAppComponent(), delegate);
284284
}
285285

286+
@SuppressWarnings("deprecation")
287+
// Robolectric.setupActivity
288+
// TODO(reidbaker): https://github.com/flutter/flutter/issues/133151
286289
@Test
287290
public void itDelegatesOnBackPressedAutomaticallyWhenEnabled() {
288291
// We need to mock FlutterJNI to avoid triggering native code.
@@ -317,6 +320,9 @@ public void itDelegatesOnBackPressedAutomaticallyWhenEnabled() {
317320
verify(mockDelegate, times(1)).onBackPressed();
318321
}
319322

323+
@SuppressWarnings("deprecation")
324+
// Robolectric.setupActivity
325+
// TODO(reidbaker): https://github.com/flutter/flutter/issues/133151
320326
@Test
321327
public void itHandlesPopSystemNavigationAutomaticallyWhenEnabled() {
322328
// We need to mock FlutterJNI to avoid triggering native code.

shell/platform/android/test/io/flutter/embedding/android/KeyboardManagerTest.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.function.BiConsumer;
3030
import java.util.function.Consumer;
3131
import java.util.stream.Collectors;
32-
import junit.framework.Assert;
3332
import org.json.JSONException;
3433
import org.json.JSONObject;
3534
import org.junit.Before;
@@ -489,25 +488,25 @@ public void serializeAndDeserializeKeyData() {
489488
@Test
490489
public void basicCombingCharactersTest() {
491490
final KeyboardManager.CharacterCombiner combiner = new KeyboardManager.CharacterCombiner();
492-
Assert.assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
493-
Assert.assertEquals('A', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
494-
Assert.assertEquals('B', (int) combiner.applyCombiningCharacterToBaseCharacter('B'));
495-
Assert.assertEquals('B', (int) combiner.applyCombiningCharacterToBaseCharacter('B'));
496-
Assert.assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
497-
Assert.assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
498-
499-
Assert.assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
500-
Assert.assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
501-
Assert.assertEquals('À', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
502-
503-
Assert.assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
504-
Assert.assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
491+
assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
492+
assertEquals('B', (int) combiner.applyCombiningCharacterToBaseCharacter('B'));
493+
assertEquals('B', (int) combiner.applyCombiningCharacterToBaseCharacter('B'));
494+
assertEquals('A', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
495+
assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
496+
assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
497+
498+
assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
499+
assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
500+
assertEquals('À', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
501+
502+
assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
503+
assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
505504
// The 0 input should remove the combining state.
506-
Assert.assertEquals('A', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
505+
assertEquals('A', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
507506

508-
Assert.assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
509-
Assert.assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
510-
Assert.assertEquals('À', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
507+
assertEquals(0, (int) combiner.applyCombiningCharacterToBaseCharacter(0));
508+
assertEquals('`', (int) combiner.applyCombiningCharacterToBaseCharacter(DEAD_KEY));
509+
assertEquals('À', (int) combiner.applyCombiningCharacterToBaseCharacter('A'));
511510
}
512511

513512
@Test

shell/platform/android/test/io/flutter/embedding/android/SplashShadowResources.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.flutter.embedding.android;
22

3+
import static org.robolectric.util.reflector.Reflector.reflector;
4+
35
import android.content.res.Resources;
46
import android.graphics.Color;
57
import android.graphics.drawable.ColorDrawable;
@@ -8,22 +10,34 @@
810
import org.robolectric.annotation.Implementation;
911
import org.robolectric.annotation.Implements;
1012
import org.robolectric.annotation.RealObject;
11-
import org.robolectric.shadow.api.Shadow;
1213
import org.robolectric.shadows.ShadowResources;
14+
import org.robolectric.util.reflector.Direct;
15+
import org.robolectric.util.reflector.ForType;
1316

17+
@SuppressWarnings("deprecation")
18+
// getDrawableInt
1419
@Implements(Resources.class)
1520
public class SplashShadowResources extends ShadowResources {
1621
@RealObject private Resources resources;
1722

1823
public static final int SPLASH_DRAWABLE_ID = 191919;
1924
public static final int THEMED_SPLASH_DRAWABLE_ID = 212121;
2025

26+
@ForType(Resources.class)
27+
interface ResourcesReflector {
28+
@Direct
29+
Drawable getDrawable(int id, Resources.Theme theme);
30+
31+
@Direct
32+
Drawable getDrawable(int id);
33+
}
34+
2135
@Implementation
2236
protected Drawable getDrawable(int id) {
2337
if (id == SPLASH_DRAWABLE_ID) {
2438
return new ColorDrawable(Color.BLUE);
2539
}
26-
return Shadow.directlyOn(resources, Resources.class).getDrawable(id);
40+
return reflector(Resources.class, resources).getDrawable(id);
2741
}
2842

2943
@Implementation
@@ -37,6 +51,6 @@ protected Drawable getDrawable(int id, @Nullable Resources.Theme theme) {
3751
}
3852
return new ColorDrawable(Color.GRAY);
3953
}
40-
return Shadow.directlyOn(resources, Resources.class).getDrawable(id, theme);
54+
return reflector(Resources.class, resources).getDrawable(id, theme);
4155
}
4256
}

shell/platform/android/test/io/flutter/embedding/engine/FlutterEngineGroupCacheTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
import static org.mockito.Mockito.mock;
88
import static org.mockito.Mockito.when;
99

10+
import androidx.test.core.app.ApplicationProvider;
1011
import io.flutter.FlutterInjector;
1112
import io.flutter.embedding.engine.loader.FlutterLoader;
1213
import org.junit.Before;
1314
import org.junit.Test;
1415
import org.junit.runner.RunWith;
1516
import org.robolectric.RobolectricTestRunner;
16-
import org.robolectric.RuntimeEnvironment;
1717
import org.robolectric.annotation.Config;
1818

1919
@Config(manifest = Config.NONE)
@@ -75,8 +75,10 @@ public void itRemovesFlutterEngineGroups() {
7575
@Test
7676
public void itRemovesAllFlutterEngineGroups() {
7777
// --- Test Setup ---
78-
FlutterEngineGroup flutterEngineGroup1 = new FlutterEngineGroup(RuntimeEnvironment.application);
79-
FlutterEngineGroup flutterEngineGroup2 = new FlutterEngineGroup(RuntimeEnvironment.application);
78+
FlutterEngineGroup flutterEngineGroup1 =
79+
new FlutterEngineGroup(ApplicationProvider.getApplicationContext());
80+
FlutterEngineGroup flutterEngineGroup2 =
81+
new FlutterEngineGroup(ApplicationProvider.getApplicationContext());
8082
FlutterEngineGroupCache cache = new FlutterEngineGroupCache();
8183

8284
// --- Execute Test ---

shell/platform/android/test/io/flutter/embedding/engine/deferredcomponents/PlayStoreDeferredComponentManagerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public void installDeferredComponent(int loadingUnitId, String componentName) {
8383
}
8484
}
8585

86+
@SuppressWarnings("deprecation")
87+
// getApplicationInfo
8688
private Context createSpyContext(Bundle metadata) throws NameNotFoundException {
8789
Context spyContext = spy(ApplicationProvider.getApplicationContext());
8890
doReturn(spyContext).when(spyContext).createPackageContext(any(), anyInt());

shell/platform/android/test/io/flutter/embedding/engine/loader/ApplicationInfoLoaderTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public void itGeneratesCorrectApplicationInfoWithDefaultManifest() {
4848
assertNull(info.nativeLibraryDir);
4949
}
5050

51+
@SuppressWarnings("deprecation")
52+
// getApplicationInfo
5153
private Context generateMockContext(Bundle metadata, String networkPolicyXml) throws Exception {
5254
Context context = mock(Context.class);
5355
PackageManager packageManager = mock(PackageManager.class);

shell/platform/android/test/io/flutter/embedding/engine/plugins/shim/ShimPluginRegistryTest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import io.flutter.embedding.engine.plugins.PluginRegistry;
1616
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
1717
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
18-
import io.flutter.plugin.common.PluginRegistry.Registrar;
1918
import org.junit.Before;
2019
import org.junit.Test;
2120
import org.junit.runner.RunWith;
@@ -43,11 +42,15 @@ public void setup() {
4342
when(mockActivityPluginBinding.getActivity()).thenReturn(mockActivity);
4443
}
4544

45+
@SuppressWarnings("deprecation")
46+
// Test is intentionally verifying deprecated behavior.
4647
@Test
4748
public void itSuppliesOldAPIsViaTheNewFlutterPluginBinding() {
4849
ShimPluginRegistry registryUnderTest = new ShimPluginRegistry(mockFlutterEngine);
50+
// Fully qualifed name because imports can not have deprecation supression.
4951
// This is the consumption side of the old plugins.
50-
Registrar registrarUnderTest = registryUnderTest.registrarFor("test");
52+
io.flutter.plugin.common.PluginRegistry.Registrar registrarUnderTest =
53+
registryUnderTest.registrarFor("test");
5154

5255
ArgumentCaptor<FlutterPlugin> shimAggregateCaptor =
5356
ArgumentCaptor.forClass(FlutterPlugin.class);
@@ -65,11 +68,16 @@ public void itSuppliesOldAPIsViaTheNewFlutterPluginBinding() {
6568
verify(mockFlutterPluginBinding).getApplicationContext();
6669
}
6770

71+
@SuppressWarnings("deprecation")
72+
// Test is intentionally verifying deprecated behavior.
6873
@Test
6974
public void itSuppliesMultipleOldPlugins() {
7075
ShimPluginRegistry registryUnderTest = new ShimPluginRegistry(mockFlutterEngine);
71-
Registrar registrarUnderTest1 = registryUnderTest.registrarFor("test1");
72-
Registrar registrarUnderTest2 = registryUnderTest.registrarFor("test2");
76+
// Fully qualifed name because imports can not have deprecation supression.
77+
io.flutter.plugin.common.PluginRegistry.Registrar registrarUnderTest1 =
78+
registryUnderTest.registrarFor("test1");
79+
io.flutter.plugin.common.PluginRegistry.Registrar registrarUnderTest2 =
80+
registryUnderTest.registrarFor("test2");
7381

7482
ArgumentCaptor<FlutterPlugin> shimAggregateCaptor =
7583
ArgumentCaptor.forClass(FlutterPlugin.class);
@@ -86,10 +94,13 @@ public void itSuppliesMultipleOldPlugins() {
8694
verify(mockFlutterPluginBinding, times(2)).getApplicationContext();
8795
}
8896

97+
@SuppressWarnings("deprecation")
98+
// Test is intentionally verifying deprecated behavior.
8999
@Test
90100
public void itCanOnlySupplyActivityBindingWhenUpstreamActivityIsAttached() {
91101
ShimPluginRegistry registryUnderTest = new ShimPluginRegistry(mockFlutterEngine);
92-
Registrar registrarUnderTest = registryUnderTest.registrarFor("test");
102+
io.flutter.plugin.common.PluginRegistry.Registrar registrarUnderTest =
103+
registryUnderTest.registrarFor("test");
93104

94105
ArgumentCaptor<FlutterPlugin> shimAggregateCaptor =
95106
ArgumentCaptor.forClass(FlutterPlugin.class);

shell/platform/android/test/io/flutter/embedding/engine/systemchannels/KeyboardChannelTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ private static BinaryMessenger.BinaryReply sendToBinaryMessageHandler(
3232
return reply;
3333
}
3434

35+
@SuppressWarnings("deprecation")
36+
// setMessageHandler is deprecated.
3537
@Test
3638
public void respondsToGetKeyboardStateChannelMessage() {
3739
ArgumentCaptor<BinaryMessenger.BinaryMessageHandler> binaryMessageHandlerCaptor =

0 commit comments

Comments
 (0)