From b2fd6f3f8a54fdcaa0f50aedda42e152e51b87e4 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sat, 7 Dec 2019 16:56:39 +0100 Subject: [PATCH] Test 29 --- .github/workflows/build.yml | 4 +- .../cameraview/markers/MarkerLayoutTest.java | 99 ++++++++++--------- 2 files changed, 57 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a0d35d5..edd8d6b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,8 +39,8 @@ jobs: strategy: matrix: # TODO 28 fails in MarkerLayoutTest.testOnEvent() - weird FrameLayout.onMeasure crash - # 22, 23, 24, 25, 27, 28 - EMULATOR_API: [26, 29] + # 22, 23, 24, 25, 27, 28? 26? 29? + EMULATOR_API: [29] EMULATOR_ARCH: [x86_64] steps: - uses: actions/checkout@v1 diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java index 2a94bc00..067e9cdb 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java @@ -18,22 +18,17 @@ import org.junit.Test; import org.mockito.Mockito; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.test.annotation.UiThreadTest; import androidx.test.rule.ActivityTestRule; import static org.mockito.ArgumentMatchers.anyFloat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; /** * Not clear why, but for some reason on API 28 the UiThreadTests here crash for an internal NPE - * in FrameLayout.onMeasure. + * in FrameLayout.onMeasure. Trying with uiSync. */ @SdkExclude(minSdkVersion = 28, maxSdkVersion = 28) @TargetApi(17) @@ -60,58 +55,74 @@ public class MarkerLayoutTest extends BaseTest { } @Test - @UiThreadTest public void testOnMarker_callsOnAttach() { - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); - Mockito.verify(autoFocusMarker, times(1)).onAttach( - Mockito.any(Context.class), - Mockito.eq(markerLayout)); + uiSync(new Runnable() { + @Override + public void run() { + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); + Mockito.verify(autoFocusMarker, times(1)).onAttach( + Mockito.any(Context.class), + Mockito.eq(markerLayout)); + } + }); } @Test - @UiThreadTest public void testOnMarker_addsView() { - Assert.assertEquals(markerLayout.getChildCount(), 0); - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); - Assert.assertEquals(markerLayout.getChildCount(), 1); + uiSync(new Runnable() { + @Override + public void run() { + Assert.assertEquals(markerLayout.getChildCount(), 0); + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); + Assert.assertEquals(markerLayout.getChildCount(), 1); + } + }); } @Test - @UiThreadTest public void testOnMarker_removesView() { - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); - Assert.assertEquals(markerLayout.getChildCount(), 1); - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); - Assert.assertEquals(markerLayout.getChildCount(), 1); - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, null); - Assert.assertEquals(markerLayout.getChildCount(), 0); - - Mockito.verify(autoFocusMarker, times(2)).onAttach( - Mockito.any(Context.class), - Mockito.eq(markerLayout)); + uiSync(new Runnable() { + @Override + public void run() { + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); + Assert.assertEquals(markerLayout.getChildCount(), 1); + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); + Assert.assertEquals(markerLayout.getChildCount(), 1); + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, null); + Assert.assertEquals(markerLayout.getChildCount(), 0); + + Mockito.verify(autoFocusMarker, times(2)).onAttach( + Mockito.any(Context.class), + Mockito.eq(markerLayout)); + } + }); } @Test - @UiThreadTest public void testOnEvent() { - final View mockView = spy(new View(getContext())); - // These fail, however it's not really needed. - // when(mockView.getWidth()).thenReturn(50); - // when(mockView.getHeight()).thenReturn(50); - AutoFocusMarker mockMarker = new AutoFocusMarker() { - public void onAutoFocusStart(@NonNull AutoFocusTrigger trigger, @NonNull PointF point) { } - public void onAutoFocusEnd(@NonNull AutoFocusTrigger trigger, boolean successful, @NonNull PointF point) { } - + uiSync(new Runnable() { @Override - public View onAttach(@NonNull Context context, @NonNull ViewGroup container) { - return mockView; + public void run() { + final View mockView = spy(new View(getContext())); + // These fail, however it's not really needed. + // when(mockView.getWidth()).thenReturn(50); + // when(mockView.getHeight()).thenReturn(50); + AutoFocusMarker mockMarker = new AutoFocusMarker() { + public void onAutoFocusStart(@NonNull AutoFocusTrigger trigger, @NonNull PointF point) { } + public void onAutoFocusEnd(@NonNull AutoFocusTrigger trigger, boolean successful, @NonNull PointF point) { } + + @Override + public View onAttach(@NonNull Context context, @NonNull ViewGroup container) { + return mockView; + } + }; + markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, mockMarker); + reset(mockView); + markerLayout.onEvent(MarkerLayout.TYPE_AUTOFOCUS, new PointF[]{new PointF(0, 0)}); + verify(mockView, times(1)).clearAnimation(); + verify(mockView, times(1)).setTranslationX(anyFloat()); + verify(mockView, times(1)).setTranslationY(anyFloat()); } - }; - markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, mockMarker); - reset(mockView); - markerLayout.onEvent(MarkerLayout.TYPE_AUTOFOCUS, new PointF[]{new PointF(0, 0)}); - verify(mockView, times(1)).clearAnimation(); - verify(mockView, times(1)).setTranslationX(anyFloat()); - verify(mockView, times(1)).setTranslationY(anyFloat()); + }); } }