parent
3e6bfbdea0
commit
d8c674c4a9
@ -0,0 +1,201 @@ |
||||
package com.otaliastudios.cameraview.overlay; |
||||
|
||||
|
||||
import android.content.res.Resources; |
||||
import android.content.res.TypedArray; |
||||
import android.content.res.XmlResourceParser; |
||||
import android.graphics.Canvas; |
||||
import android.util.AttributeSet; |
||||
import android.util.Xml; |
||||
import android.view.Gravity; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
import android.widget.FrameLayout; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.test.annotation.UiThreadTest; |
||||
import androidx.test.ext.junit.runners.AndroidJUnit4; |
||||
import androidx.test.filters.SmallTest; |
||||
|
||||
import com.otaliastudios.cameraview.BaseTest; |
||||
import com.otaliastudios.cameraview.R; |
||||
|
||||
import org.junit.After; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.mockito.ArgumentCaptor; |
||||
import org.mockito.ArgumentMatcher; |
||||
import org.mockito.invocation.InvocationOnMock; |
||||
import org.mockito.stubbing.Answer; |
||||
import org.w3c.dom.Attr; |
||||
import org.xmlpull.v1.XmlPullParser; |
||||
import org.xmlpull.v1.XmlPullParserException; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.junit.Assert.assertFalse; |
||||
import static org.junit.Assert.assertNotEquals; |
||||
import static org.junit.Assert.assertNotNull; |
||||
import static org.junit.Assert.assertTrue; |
||||
import static org.mockito.ArgumentMatchers.any; |
||||
import static org.mockito.ArgumentMatchers.anyFloat; |
||||
import static org.mockito.ArgumentMatchers.anyLong; |
||||
import static org.mockito.ArgumentMatchers.argThat; |
||||
import static org.mockito.ArgumentMatchers.eq; |
||||
import static org.mockito.ArgumentMatchers.notNull; |
||||
import static org.mockito.Mockito.doNothing; |
||||
import static org.mockito.Mockito.mock; |
||||
import static org.mockito.Mockito.never; |
||||
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; |
||||
|
||||
@RunWith(AndroidJUnit4.class) |
||||
@SmallTest |
||||
public class OverlayLayoutTest extends BaseTest { |
||||
|
||||
private OverlayLayout overlayLayout; |
||||
|
||||
@Before |
||||
public void setUp() { |
||||
overlayLayout = spy(new OverlayLayout(context())); |
||||
} |
||||
|
||||
@After |
||||
public void tearDown() { |
||||
overlayLayout = null; |
||||
} |
||||
|
||||
@Test |
||||
public void testIsOverlay_LayoutParams() { |
||||
ViewGroup.LayoutParams params; |
||||
|
||||
params = new ViewGroup.LayoutParams(10, 10); |
||||
assertFalse(overlayLayout.isOverlay(params)); |
||||
|
||||
params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER); |
||||
assertTrue(overlayLayout.isOverlay(params)); |
||||
|
||||
// Remove the isOverlay flag.
|
||||
((OverlayLayout.LayoutParams) params).isOverlay = false; |
||||
assertFalse(overlayLayout.isOverlay(params)); |
||||
} |
||||
|
||||
@Test |
||||
public void testIsOverlay_attributeSet() throws Exception { |
||||
int layout1 = com.otaliastudios.cameraview.test.R.layout.overlay; |
||||
int layout2 = com.otaliastudios.cameraview.test.R.layout.not_overlay; |
||||
|
||||
AttributeSet set1 = getAttributeSet(layout1); |
||||
assertTrue(overlayLayout.isOverlay(set1)); |
||||
|
||||
AttributeSet set2 = getAttributeSet(layout2); |
||||
assertFalse(overlayLayout.isOverlay(set2)); |
||||
} |
||||
|
||||
@NonNull |
||||
private AttributeSet getAttributeSet(int layout) throws Exception { |
||||
// Get the attribute set in the correct state: use a parser and move to START_TAG
|
||||
XmlResourceParser parser = context().getResources().getLayout(layout); |
||||
//noinspection StatementWithEmptyBody
|
||||
while (parser.next() != XmlResourceParser.START_TAG) {} |
||||
return Xml.asAttributeSet(parser); |
||||
} |
||||
|
||||
@Test |
||||
public void testLayoutParams_drawsOn() { |
||||
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER); |
||||
|
||||
assertFalse(params.drawsOn(Overlay.Target.PREVIEW)); |
||||
assertFalse(params.drawsOn(Overlay.Target.PICTURE_SNAPSHOT)); |
||||
assertFalse(params.drawsOn(Overlay.Target.VIDEO_SNAPSHOT)); |
||||
|
||||
params.drawOnPreview = true; |
||||
assertTrue(params.drawsOn(Overlay.Target.PREVIEW)); |
||||
params.drawOnPictureSnapshot = true; |
||||
assertTrue(params.drawsOn(Overlay.Target.PICTURE_SNAPSHOT)); |
||||
params.drawOnVideoSnapshot = true; |
||||
assertTrue(params.drawsOn(Overlay.Target.VIDEO_SNAPSHOT)); |
||||
} |
||||
|
||||
@Test |
||||
public void testLayoutParams_toString() { |
||||
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER); |
||||
String string = params.toString(); |
||||
assertTrue(string.contains("drawOnPreview")); |
||||
assertTrue(string.contains("drawOnPictureSnapshot")); |
||||
assertTrue(string.contains("drawOnVideoSnapshot")); |
||||
} |
||||
|
||||
@Test |
||||
public void testDrawChild() { |
||||
Canvas canvas = new Canvas(); |
||||
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER); |
||||
View child = new View(context()); |
||||
child.setLayoutParams(params); |
||||
when(overlayLayout.doDrawChild(canvas, child, 0)).thenReturn(true); |
||||
|
||||
overlayLayout.currentTarget = Overlay.Target.PREVIEW; |
||||
assertFalse(overlayLayout.drawChild(canvas, child, 0)); |
||||
params.drawOnPreview = true; |
||||
assertTrue(overlayLayout.drawChild(canvas, child, 0)); |
||||
|
||||
overlayLayout.currentTarget = Overlay.Target.PICTURE_SNAPSHOT; |
||||
assertFalse(overlayLayout.drawChild(canvas, child, 0)); |
||||
params.drawOnPictureSnapshot = true; |
||||
assertTrue(overlayLayout.drawChild(canvas, child, 0)); |
||||
|
||||
overlayLayout.currentTarget = Overlay.Target.VIDEO_SNAPSHOT; |
||||
assertFalse(overlayLayout.drawChild(canvas, child, 0)); |
||||
params.drawOnVideoSnapshot = true; |
||||
assertTrue(overlayLayout.drawChild(canvas, child, 0)); |
||||
} |
||||
|
||||
@UiThreadTest |
||||
@Test |
||||
public void testDraw() { |
||||
Canvas canvas = new Canvas(); |
||||
when(overlayLayout.drawsOn(Overlay.Target.PREVIEW)).thenReturn(false); |
||||
overlayLayout.draw(canvas); |
||||
verify(overlayLayout, never()).drawOn(Overlay.Target.PREVIEW, canvas); |
||||
|
||||
when(overlayLayout.drawsOn(Overlay.Target.PREVIEW)).thenReturn(true); |
||||
overlayLayout.draw(canvas); |
||||
verify(overlayLayout, times(1)).drawOn(Overlay.Target.PREVIEW, canvas); |
||||
} |
||||
|
||||
@UiThreadTest |
||||
@Test |
||||
public void testDrawOn() { |
||||
Canvas canvas = spy(new Canvas()); |
||||
View child = new View(context()); |
||||
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER); |
||||
params.drawOnPreview = true; |
||||
params.drawOnPictureSnapshot = true; |
||||
params.drawOnVideoSnapshot = true; |
||||
overlayLayout.addView(child, params); |
||||
|
||||
overlayLayout.drawOn(Overlay.Target.PREVIEW, canvas); |
||||
verify(canvas, never()).scale(anyFloat(), anyFloat()); |
||||
verify(overlayLayout, times(1)).doDrawChild(eq(canvas), eq(child), anyLong()); |
||||
reset(canvas); |
||||
reset(overlayLayout); |
||||
|
||||
overlayLayout.drawOn(Overlay.Target.PICTURE_SNAPSHOT, canvas); |
||||
verify(canvas, times(1)).scale(anyFloat(), anyFloat()); |
||||
verify(overlayLayout, times(1)).doDrawChild(eq(canvas), eq(child), anyLong()); |
||||
reset(canvas); |
||||
reset(overlayLayout); |
||||
|
||||
overlayLayout.drawOn(Overlay.Target.VIDEO_SNAPSHOT, canvas); |
||||
verify(canvas, times(1)).scale(anyFloat(), anyFloat()); |
||||
verify(overlayLayout, times(1)).doDrawChild(eq(canvas), eq(child), anyLong()); |
||||
reset(canvas); |
||||
reset(overlayLayout); |
||||
} |
||||
} |
Loading…
Reference in new issue