AbstractExtendedMockitoRule: fix session leak if setup fails am: 47952cc7bb

Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/modules-utils/+/3509796

Change-Id: I3262787b502fb5f2faa6ba6ad1fd754be29425d0
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java b/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
index 2242ca0..f391f36 100644
--- a/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
+++ b/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
@@ -146,9 +146,9 @@
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
-                createMockitoSession(base, description);
                 Throwable error = null;
                 try {
+                    createMockitoSession(base, description);
                     // TODO(b/296937563): need to add unit tests that make sure the session is
                     // always closed
                     base.evaluate();
diff --git a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
index 26d0cc3..e91c28f 100644
--- a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
+++ b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
@@ -40,6 +40,7 @@
 import org.junit.runners.model.Statement;
 import org.mockito.InOrder;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.MockitoFramework;
 import org.mockito.MockitoSession;
 import org.mockito.exceptions.misusing.UnnecessaryStubbingException;
@@ -601,6 +602,19 @@
     }
 
     @Test
+    public void testMockitoSessionFinished_whenStaticMockFixturesSetupFailed() throws Throwable {
+        RuntimeException exception = new RuntimeException("D'OH!");
+        doThrow(exception).when(mStaticMockFixture1).setUpMockBehaviors();
+
+        assertThrows(Exception.class,
+                () -> mBuilder.addStaticMockFixtures(mSupplier1)
+                        .build().apply(mStatement, mDescription).evaluate());
+
+        // Assert that the previous session was closed.
+        Mockito.mockitoSession().startMocking().finishMocking();
+    }
+
+    @Test
     public void testGetClearInlineMethodsAtTheEnd() throws Throwable {
         assertWithMessage("getClearInlineMethodsAtTheEnd() by default")
                 .that(mBuilder.build().getClearInlineMethodsAtTheEnd(mDescription)).isTrue();
@@ -834,4 +848,4 @@
     @MockStatic(AnotherStaticClassMockedBySubClass.class)
     private static final class SubClass extends SuperClass{
     }
-}
\ No newline at end of file
+}