From 2df7f826eb20cfce7c4b27fdcb7758247c7c713f Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sun, 15 Dec 2019 23:21:16 +0100 Subject: [PATCH] Tests --- .../otaliastudios/cameraview/frame/Frame.java | 7 ++- .../cameraview/frame/FrameManager.java | 10 +++- .../cameraview/frame/FrameTest.java | 49 ++++++++++--------- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/frame/Frame.java b/cameraview/src/main/java/com/otaliastudios/cameraview/frame/Frame.java index f623c28d..1694cb3e 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/frame/Frame.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/frame/Frame.java @@ -1,7 +1,6 @@ package com.otaliastudios.cameraview.frame; import android.annotation.SuppressLint; -import android.media.Image; import com.otaliastudios.cameraview.CameraLogger; import com.otaliastudios.cameraview.controls.Engine; @@ -27,9 +26,9 @@ public class Frame { private Size mSize = null; private int mFormat = -1; - Frame(@NonNull FrameManager manager, @NonNull Class dataClass) { + Frame(@NonNull FrameManager manager) { mManager = manager; - mDataClass = dataClass; + mDataClass = manager.getFrameDataClass(); } void setContent(@NonNull Object data, long time, int rotation, @NonNull Size size, int format) { @@ -73,7 +72,7 @@ public class Frame { @NonNull public Frame freeze() { ensureHasContent(); - Frame other = new Frame(mManager, mDataClass); + Frame other = new Frame(mManager); //noinspection unchecked Object data = mManager.cloneFrameData(getData()); other.setContent(data, mTime, mRotation, mSize, mFormat); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/frame/FrameManager.java b/cameraview/src/main/java/com/otaliastudios/cameraview/frame/FrameManager.java index 9f42b36c..65c095fe 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/frame/FrameManager.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/frame/FrameManager.java @@ -66,6 +66,14 @@ public abstract class FrameManager { return mFrameBytes; } + /** + * Returns the frame data class. + * @return frame data class + */ + public final Class getFrameDataClass() { + return mFrameDataClass; + } + /** * Allocates a {@link #mPoolSize} number of buffers. Should be called once * the preview size and the image format value are known. @@ -123,7 +131,7 @@ public abstract class FrameManager { LOG.v("getFrame for time:", time, "RECYCLING."); } else { LOG.v("getFrame for time:", time, "CREATING."); - frame = new Frame(this, mFrameDataClass); + frame = new Frame(this); } frame.setContent(data, time, rotation, mFrameSize, mFrameFormat); return frame; diff --git a/cameraview/src/test/java/com/otaliastudios/cameraview/frame/FrameTest.java b/cameraview/src/test/java/com/otaliastudios/cameraview/frame/FrameTest.java index 053d09d3..b8a60dd6 100644 --- a/cameraview/src/test/java/com/otaliastudios/cameraview/frame/FrameTest.java +++ b/cameraview/src/test/java/com/otaliastudios/cameraview/frame/FrameTest.java @@ -3,32 +3,37 @@ package com.otaliastudios.cameraview.frame; import android.graphics.ImageFormat; +import androidx.annotation.NonNull; + import com.otaliastudios.cameraview.size.Size; import org.junit.After; import org.junit.Before; import org.junit.Test; -import static junit.framework.Assert.assertNotNull; -import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; public class FrameTest { - private FrameManager manager; + private FrameManager manager; @Before public void setUp() { - //noinspection unchecked - manager = mock(FrameManager.class); + manager = spy(new FrameManager(1, String.class) { + @Override + protected void onFrameDataReleased(@NonNull String data, boolean recycled) { } + + @NonNull + @Override + protected String onCloneFrameData(@NonNull String data) { + return data; + } + }); } @After @@ -39,23 +44,23 @@ public class FrameTest { @Test public void testEquals() { // Only time should count. - Frame f1 = new Frame(manager, byte[].class); + Frame f1 = new Frame(manager); long time = 1000; - f1.setContent(new byte[3], time, 90, new Size(5, 5), ImageFormat.NV21); - Frame f2 = new Frame(manager, byte[].class); - f2.setContent(new byte[2], time, 0, new Size(10, 10), ImageFormat.NV21); + f1.setContent("foo", time, 90, new Size(5, 5), ImageFormat.NV21); + Frame f2 = new Frame(manager); + f2.setContent("bar", time, 0, new Size(10, 10), ImageFormat.NV21); assertEquals(f1, f2); - f2.setContent(new byte[2], time + 1, 0, new Size(10, 10), ImageFormat.NV21); + f2.setContent("foo", time + 1, 0, new Size(10, 10), ImageFormat.NV21); assertNotEquals(f1, f2); } @Test public void testReleaseThrows() { - final Frame frame = new Frame(manager, byte[].class); - frame.setContent(new byte[2], 1000, 90, new Size(10, 10), ImageFormat.NV21); + final Frame frame = new Frame(manager); + frame.setContent("foo", 1000, 90, new Size(10, 10), ImageFormat.NV21); frame.release(); - verify(manager, times(1)).onFrameReleased(eq(frame), any(byte[].class)); + verify(manager, times(1)).onFrameReleased(frame, "foo"); assertThrows(new Runnable() { public void run() { frame.getTime(); }}); assertThrows(new Runnable() { public void run() { frame.getFormat(); }}); @@ -75,8 +80,8 @@ public class FrameTest { @Test public void testFreeze() { - Frame frame = new Frame(manager, byte[].class); - byte[] data = new byte[]{0, 1, 5, 0, 7, 3, 4, 5}; + Frame frame = new Frame(manager); + String data = "test data"; long time = 1000; int rotation = 90; Size size = new Size(10, 10); @@ -84,14 +89,14 @@ public class FrameTest { frame.setContent(data, time, rotation, size, format); Frame frozen = frame.freeze(); - assertArrayEquals(data, (byte[]) frozen.getData()); + assertEquals(data, frozen.getData()); assertEquals(time, frozen.getTime()); assertEquals(rotation, frozen.getRotation()); assertEquals(size, frozen.getSize()); // Mutate the first, ensure that frozen is not affected - frame.setContent(new byte[]{3, 2, 1}, 50, 180, new Size(1, 1), ImageFormat.JPEG); - assertArrayEquals(data, (byte[]) frozen.getData()); + frame.setContent("new data", 50, 180, new Size(1, 1), ImageFormat.JPEG); + assertEquals(data, frozen.getData()); assertEquals(time, frozen.getTime()); assertEquals(rotation, frozen.getRotation()); assertEquals(size, frozen.getSize());