pull/695/head
Mattia Iavarone 6 years ago
parent f2593d4061
commit b2fd6f3f8a
  1. 4
      .github/workflows/build.yml
  2. 99
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java

@ -39,8 +39,8 @@ jobs:
strategy: strategy:
matrix: matrix:
# TODO 28 fails in MarkerLayoutTest.testOnEvent() - weird FrameLayout.onMeasure crash # TODO 28 fails in MarkerLayoutTest.testOnEvent() - weird FrameLayout.onMeasure crash
# 22, 23, 24, 25, 27, 28 # 22, 23, 24, 25, 27, 28? 26? 29?
EMULATOR_API: [26, 29] EMULATOR_API: [29]
EMULATOR_ARCH: [x86_64] EMULATOR_ARCH: [x86_64]
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1

@ -18,22 +18,17 @@ import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.annotation.UiThreadTest;
import androidx.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import static org.mockito.ArgumentMatchers.anyFloat; 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.reset;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; 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 * 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) @SdkExclude(minSdkVersion = 28, maxSdkVersion = 28)
@TargetApi(17) @TargetApi(17)
@ -60,58 +55,74 @@ public class MarkerLayoutTest extends BaseTest {
} }
@Test @Test
@UiThreadTest
public void testOnMarker_callsOnAttach() { public void testOnMarker_callsOnAttach() {
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); uiSync(new Runnable() {
Mockito.verify(autoFocusMarker, times(1)).onAttach( @Override
Mockito.any(Context.class), public void run() {
Mockito.eq(markerLayout)); markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker);
Mockito.verify(autoFocusMarker, times(1)).onAttach(
Mockito.any(Context.class),
Mockito.eq(markerLayout));
}
});
} }
@Test @Test
@UiThreadTest
public void testOnMarker_addsView() { public void testOnMarker_addsView() {
Assert.assertEquals(markerLayout.getChildCount(), 0); uiSync(new Runnable() {
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); @Override
Assert.assertEquals(markerLayout.getChildCount(), 1); public void run() {
Assert.assertEquals(markerLayout.getChildCount(), 0);
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker);
Assert.assertEquals(markerLayout.getChildCount(), 1);
}
});
} }
@Test @Test
@UiThreadTest
public void testOnMarker_removesView() { public void testOnMarker_removesView() {
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); uiSync(new Runnable() {
Assert.assertEquals(markerLayout.getChildCount(), 1); @Override
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); public void run() {
Assert.assertEquals(markerLayout.getChildCount(), 1); markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker);
markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, null); Assert.assertEquals(markerLayout.getChildCount(), 1);
Assert.assertEquals(markerLayout.getChildCount(), 0); markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker);
Assert.assertEquals(markerLayout.getChildCount(), 1);
Mockito.verify(autoFocusMarker, times(2)).onAttach( markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, null);
Mockito.any(Context.class), Assert.assertEquals(markerLayout.getChildCount(), 0);
Mockito.eq(markerLayout));
Mockito.verify(autoFocusMarker, times(2)).onAttach(
Mockito.any(Context.class),
Mockito.eq(markerLayout));
}
});
} }
@Test @Test
@UiThreadTest
public void testOnEvent() { public void testOnEvent() {
final View mockView = spy(new View(getContext())); uiSync(new Runnable() {
// 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 @Override
public View onAttach(@NonNull Context context, @NonNull ViewGroup container) { public void run() {
return mockView; 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());
} }
} }

Loading…
Cancel
Save