From 62da784caab80ad04d97e391c83c4fe5061532cb Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Thu, 7 Sep 2017 17:57:11 +0200 Subject: [PATCH] Fix TextureView tests if not hardware accelerated --- .../src/androidTest/AndroidManifest.xml | 4 +- .../otaliastudios/cameraview/PreviewTest.java | 44 ++++++++++++------- .../cameraview/TextureViewPreviewTest.java | 24 ++++++++++ 3 files changed, 55 insertions(+), 17 deletions(-) diff --git a/cameraview/src/androidTest/AndroidManifest.xml b/cameraview/src/androidTest/AndroidManifest.xml index 36b84bf2..1795db1e 100644 --- a/cameraview/src/androidTest/AndroidManifest.xml +++ b/cameraview/src/androidTest/AndroidManifest.xml @@ -5,7 +5,9 @@ - + \ No newline at end of file diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java index de19c4b4..0bad986d 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java @@ -26,14 +26,15 @@ public abstract class PreviewTest extends BaseTest { @Rule public ActivityTestRule rule = new ActivityTestRule<>(TestActivity.class); - private Preview preview; + protected Preview preview; + protected Size surfaceSize; private Preview.SurfaceCallback callback; - private Size surfaceSize; + private Task availability; @Before public void setUp() { - final Task task = new Task<>(); - task.listen(); + availability = new Task<>(); + availability.listen(); ui(new Runnable() { @Override @@ -45,16 +46,29 @@ public abstract class PreviewTest extends BaseTest { doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { - task.end(true); + availability.end(true); return null; } }).when(callback).onSurfaceAvailable(); preview = createPreview(a, a.getContentView(), callback); } }); + } + + // Wait for surface to be available. + protected void ensureAvailable() { + assertNotNull(availability.await(2, TimeUnit.SECONDS)); + } - Boolean available = task.await(2, TimeUnit.SECONDS); - assertNotNull(available); + // Trigger a destroy. + protected void ensureDestroyed() { + ui(new Runnable() { + @Override + public void run() { + rule.getActivity().getContentView().removeView(preview.getView()); + } + }); + waitUi(); } @After @@ -62,14 +76,14 @@ public abstract class PreviewTest extends BaseTest { preview = null; callback = null; surfaceSize = null; + availability = null; } @Test public void testDefaults() { + ensureAvailable(); assertTrue(preview.isReady()); - ViewGroup parent = rule.getActivity().getContentView(); assertNotNull(preview.getView()); - assertEquals(parent.getChildAt(0), preview.getView()); assertNotNull(preview.getOutputClass()); } @@ -82,6 +96,7 @@ public abstract class PreviewTest extends BaseTest { @Test public void testSurfaceAvailable() { + ensureAvailable(); verify(callback, times(1)).onSurfaceAvailable(); assertEquals(surfaceSize.getWidth(), preview.getSurfaceSize().getWidth()); assertEquals(surfaceSize.getHeight(), preview.getSurfaceSize().getHeight()); @@ -89,19 +104,16 @@ public abstract class PreviewTest extends BaseTest { @Test public void testSurfaceDestroyed() { - // Trigger a destroy. - ui(new Runnable() { - @Override - public void run() { - rule.getActivity().getContentView().removeView(preview.getView()); - } - }); + ensureAvailable(); + ensureDestroyed(); assertEquals(0, preview.getSurfaceSize().getWidth()); assertEquals(0, preview.getSurfaceSize().getHeight()); } @Test public void testCropCenter() throws Exception { + ensureAvailable(); + // This is given by the activity, it's the fixed size. float view = getViewAspectRatio(); diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java index 5d0d1f31..39391063 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java @@ -16,4 +16,28 @@ public class TextureViewPreviewTest extends PreviewTest { protected Preview createPreview(Context context, ViewGroup parent, Preview.SurfaceCallback callback) { return new TextureViewPreview(context, parent, callback); } + + @Override + protected void ensureAvailable() { + if (isHardwareAccelerated()) { + super.ensureAvailable(); + } else { + preview.onSurfaceAvailable( + surfaceSize.getWidth(), + surfaceSize.getHeight()); + } + } + + @Override + protected void ensureDestroyed() { + super.ensureDestroyed(); + if (!isHardwareAccelerated()) { + // Ensure it is called. + preview.onSurfaceDestroyed(); + } + } + + private boolean isHardwareAccelerated() { + return preview.getView().isHardwareAccelerated(); + } }