From 575f256fce30bcdd024c8897fee6887de9b9bc70 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Wed, 17 Jul 2019 22:23:41 -0300 Subject: [PATCH] MarkerParserTest and improve MarkerLayoutTest --- .../cameraview/markers/MarkerLayoutTest.java | 46 ++++++++++- .../cameraview/markers/MarkerParserTest.java | 79 +++++++++++++++++++ 2 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerParserTest.java 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 a1dd8367..193c28b3 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerLayoutTest.java @@ -3,6 +3,9 @@ package com.otaliastudios.cameraview.markers; import android.annotation.TargetApi; import android.content.Context; +import android.graphics.PointF; +import android.view.View; +import android.view.ViewGroup; import com.otaliastudios.cameraview.BaseTest; import com.otaliastudios.cameraview.TestActivity; @@ -13,9 +16,20 @@ import org.junit.Rule; 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; + @TargetApi(17) public class MarkerLayoutTest extends BaseTest { @@ -32,9 +46,9 @@ public class MarkerLayoutTest extends BaseTest { @Override public void run() { TestActivity a = rule.getActivity(); - markerLayout = Mockito.spy(new MarkerLayout(a)); + markerLayout = spy(new MarkerLayout(a)); a.inflate(markerLayout); - autoFocusMarker = Mockito.spy(new DefaultAutoFocusMarker()); + autoFocusMarker = spy(new DefaultAutoFocusMarker()); } }); } @@ -43,7 +57,7 @@ public class MarkerLayoutTest extends BaseTest { @UiThreadTest public void testOnMarker_callsOnAttach() { markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, autoFocusMarker); - Mockito.verify(autoFocusMarker, Mockito.times(1)).onAttach( + Mockito.verify(autoFocusMarker, times(1)).onAttach( Mockito.any(Context.class), Mockito.eq(markerLayout)); } @@ -66,8 +80,32 @@ public class MarkerLayoutTest extends BaseTest { markerLayout.onMarker(MarkerLayout.TYPE_AUTOFOCUS, null); Assert.assertEquals(markerLayout.getChildCount(), 0); - Mockito.verify(autoFocusMarker, Mockito.times(2)).onAttach( + 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) { } + + @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()); + } } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerParserTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerParserTest.java new file mode 100644 index 00000000..30f71c95 --- /dev/null +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/markers/MarkerParserTest.java @@ -0,0 +1,79 @@ +package com.otaliastudios.cameraview.markers; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.PointF; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StyleableRes; +import androidx.arch.core.util.Function; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; + +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.R; +import com.otaliastudios.cameraview.size.Size; +import com.otaliastudios.cameraview.size.SizeSelectorParser; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +import static junit.framework.TestCase.assertNotNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class MarkerParserTest extends BaseTest { + + @Test + public void testNullConstructor() { + TypedArray array = mock(TypedArray.class); + when(array.hasValue(R.styleable.CameraView_cameraAutoFocusMarker)).thenReturn(false); + when(array.getString(R.styleable.CameraView_cameraAutoFocusMarker)).thenReturn(null); + MarkerParser parser = new MarkerParser(array); + assertNull(parser.getAutoFocusMarker()); + } + @Test + public void testConstructor() { + TypedArray array = mock(TypedArray.class); + when(array.hasValue(R.styleable.CameraView_cameraAutoFocusMarker)).thenReturn(true); + when(array.getString(R.styleable.CameraView_cameraAutoFocusMarker)).thenReturn(Marker.class.getName()); + MarkerParser parser = new MarkerParser(array); + assertNotNull(parser.getAutoFocusMarker()); + assertTrue(parser.getAutoFocusMarker() instanceof Marker); + } + + public static class Marker implements AutoFocusMarker { + + public Marker() { } + + @Nullable + @Override + public View onAttach(@NonNull Context context, @NonNull ViewGroup container) { + return null; + } + + @Override + public void onAutoFocusStart(@NonNull AutoFocusTrigger trigger, @NonNull PointF point) { } + + @Override + public void onAutoFocusEnd(@NonNull AutoFocusTrigger trigger, boolean successful, @NonNull PointF point) { } + } +}