Fix TextureView tests if not hardware accelerated

pull/22/head
Mattia Iavarone 8 years ago
parent fd8831a73f
commit 62da784caa
  1. 4
      cameraview/src/androidTest/AndroidManifest.xml
  2. 44
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
  3. 24
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java

@ -5,7 +5,9 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<application> <application>
<activity android:name=".TestActivity"/> <activity
android:hardwareAccelerated="true"
android:name=".TestActivity"/>
</application> </application>
</manifest> </manifest>

@ -26,14 +26,15 @@ public abstract class PreviewTest extends BaseTest {
@Rule @Rule
public ActivityTestRule<TestActivity> rule = new ActivityTestRule<>(TestActivity.class); public ActivityTestRule<TestActivity> rule = new ActivityTestRule<>(TestActivity.class);
private Preview preview; protected Preview preview;
protected Size surfaceSize;
private Preview.SurfaceCallback callback; private Preview.SurfaceCallback callback;
private Size surfaceSize; private Task<Boolean> availability;
@Before @Before
public void setUp() { public void setUp() {
final Task<Boolean> task = new Task<>(); availability = new Task<>();
task.listen(); availability.listen();
ui(new Runnable() { ui(new Runnable() {
@Override @Override
@ -45,16 +46,29 @@ public abstract class PreviewTest extends BaseTest {
doAnswer(new Answer() { doAnswer(new Answer() {
@Override @Override
public Object answer(InvocationOnMock invocation) throws Throwable { public Object answer(InvocationOnMock invocation) throws Throwable {
task.end(true); availability.end(true);
return null; return null;
} }
}).when(callback).onSurfaceAvailable(); }).when(callback).onSurfaceAvailable();
preview = createPreview(a, a.getContentView(), callback); 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); // Trigger a destroy.
assertNotNull(available); protected void ensureDestroyed() {
ui(new Runnable() {
@Override
public void run() {
rule.getActivity().getContentView().removeView(preview.getView());
}
});
waitUi();
} }
@After @After
@ -62,14 +76,14 @@ public abstract class PreviewTest extends BaseTest {
preview = null; preview = null;
callback = null; callback = null;
surfaceSize = null; surfaceSize = null;
availability = null;
} }
@Test @Test
public void testDefaults() { public void testDefaults() {
ensureAvailable();
assertTrue(preview.isReady()); assertTrue(preview.isReady());
ViewGroup parent = rule.getActivity().getContentView();
assertNotNull(preview.getView()); assertNotNull(preview.getView());
assertEquals(parent.getChildAt(0), preview.getView());
assertNotNull(preview.getOutputClass()); assertNotNull(preview.getOutputClass());
} }
@ -82,6 +96,7 @@ public abstract class PreviewTest extends BaseTest {
@Test @Test
public void testSurfaceAvailable() { public void testSurfaceAvailable() {
ensureAvailable();
verify(callback, times(1)).onSurfaceAvailable(); verify(callback, times(1)).onSurfaceAvailable();
assertEquals(surfaceSize.getWidth(), preview.getSurfaceSize().getWidth()); assertEquals(surfaceSize.getWidth(), preview.getSurfaceSize().getWidth());
assertEquals(surfaceSize.getHeight(), preview.getSurfaceSize().getHeight()); assertEquals(surfaceSize.getHeight(), preview.getSurfaceSize().getHeight());
@ -89,19 +104,16 @@ public abstract class PreviewTest extends BaseTest {
@Test @Test
public void testSurfaceDestroyed() { public void testSurfaceDestroyed() {
// Trigger a destroy. ensureAvailable();
ui(new Runnable() { ensureDestroyed();
@Override
public void run() {
rule.getActivity().getContentView().removeView(preview.getView());
}
});
assertEquals(0, preview.getSurfaceSize().getWidth()); assertEquals(0, preview.getSurfaceSize().getWidth());
assertEquals(0, preview.getSurfaceSize().getHeight()); assertEquals(0, preview.getSurfaceSize().getHeight());
} }
@Test @Test
public void testCropCenter() throws Exception { public void testCropCenter() throws Exception {
ensureAvailable();
// This is given by the activity, it's the fixed size. // This is given by the activity, it's the fixed size.
float view = getViewAspectRatio(); float view = getViewAspectRatio();

@ -16,4 +16,28 @@ public class TextureViewPreviewTest extends PreviewTest {
protected Preview createPreview(Context context, ViewGroup parent, Preview.SurfaceCallback callback) { protected Preview createPreview(Context context, ViewGroup parent, Preview.SurfaceCallback callback) {
return new TextureViewPreview(context, parent, 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();
}
} }

Loading…
Cancel
Save