Index: services/shape_detection/android/junit/src/org/chromium/shape_detection/FaceDetectionImplTest.java |
diff --git a/services/shape_detection/android/junit/src/org/chromium/shape_detection/FaceDetectionImplTest.java b/services/shape_detection/android/junit/src/org/chromium/shape_detection/FaceDetectionImplTest.java |
deleted file mode 100644 |
index ae2725ae300d852c73c98109fe473b2d1fb77705..0000000000000000000000000000000000000000 |
--- a/services/shape_detection/android/junit/src/org/chromium/shape_detection/FaceDetectionImplTest.java |
+++ /dev/null |
@@ -1,222 +0,0 @@ |
-// Copyright 2017 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.shape_detection; |
- |
-import static org.junit.Assert.assertEquals; |
-import static org.junit.Assert.assertTrue; |
- |
-import android.graphics.Bitmap; |
-import android.graphics.PointF; |
-import android.media.FaceDetector; |
-import android.media.FaceDetector.Face; |
- |
-import org.junit.Before; |
-import org.junit.Test; |
-import org.junit.runner.RunWith; |
-import org.mockito.ArgumentCaptor; |
-import org.mockito.Mockito; |
-import org.mockito.MockitoAnnotations; |
-import org.mockito.invocation.InvocationOnMock; |
-import org.mockito.stubbing.Answer; |
-import org.robolectric.ParameterizedRobolectricTestRunner; |
-import org.robolectric.ParameterizedRobolectricTestRunner.Parameters; |
-import org.robolectric.annotation.Config; |
-import org.robolectric.shadows.ShadowLog; |
- |
-import org.chromium.base.ThreadUtils; |
-import org.chromium.base.test.util.Feature; |
-import org.chromium.mojo.system.SharedBufferHandle; |
-import org.chromium.mojo.system.SharedBufferHandle.MapFlags; |
-import org.chromium.shape_detection.mojom.FaceDetection; |
-import org.chromium.shape_detection.mojom.FaceDetectionResult; |
-import org.chromium.shape_detection.mojom.FaceDetectorOptions; |
- |
-import java.nio.ByteBuffer; |
-import java.util.Arrays; |
-import java.util.Collection; |
- |
-/** |
- * Test suite for Java Face Detection. |
- */ |
-@RunWith(ParameterizedRobolectricTestRunner.class) |
-@Config(sdk = 21, manifest = Config.NONE) |
-public class FaceDetectionImplTest { |
- private static final int VALID_WIDTH = 1; |
- private static final int VALID_HEIGHT = 1; |
- private static final int INVALID_WIDTH = 0; |
- private static final long NUM_BYTES = VALID_WIDTH * VALID_HEIGHT * 4; |
- |
- @Parameters |
- public static Collection<Object[]> data() { |
- return Arrays.asList(new Object[][] {{true}, {false}}); |
- } |
- |
- // Class under test. |
- private final FaceDetectionImpl mFaceDetectionImpl; |
- |
- public FaceDetectionImplTest(boolean fastMode) { |
- FaceDetectorOptions options = new FaceDetectorOptions(); |
- options.fastMode = fastMode; |
- options.maxDetectedFaces = 1; |
- mFaceDetectionImpl = new FaceDetectionImpl(options); |
- } |
- |
- @Before |
- public void setUp() { |
- ShadowLog.stream = System.out; |
- MockitoAnnotations.initMocks(this); |
- } |
- |
- /** |
- * Verify construction works. |
- */ |
- @Test |
- @Feature({"ShapeDetection"}) |
- public void testConstruction() { |
- assertTrue("Should be on UI thread", ThreadUtils.runningOnUiThread()); |
- } |
- |
- /** |
- * Verify detection fails if the SharedBufferHandle is invalid. |
- */ |
- @Test |
- @Feature({"ShapeDetection"}) |
- public void testDetectionFailsWithInvalidHandle() { |
- assertTrue("Should be on UI thread", ThreadUtils.runningOnUiThread()); |
- |
- SharedBufferHandle sharedBuffer = Mockito.mock(SharedBufferHandle.class); |
- Mockito.when(sharedBuffer.isValid()).thenReturn(false); |
- |
- FaceDetection.DetectResponse callback = Mockito.mock(FaceDetection.DetectResponse.class); |
- ArgumentCaptor<FaceDetectionResult[]> argument = |
- ArgumentCaptor.forClass(FaceDetectionResult[].class); |
- |
- mFaceDetectionImpl.detect(sharedBuffer, VALID_WIDTH, VALID_HEIGHT, callback); |
- |
- Mockito.verify(sharedBuffer, Mockito.times(1)).isValid(); |
- Mockito.verify(callback, Mockito.times(1)).call(argument.capture()); |
- assertEquals("result", 0, argument.getValue().length); |
- } |
- |
- /** |
- * Verify detection fails if the sent dimensions are ugly. |
- */ |
- @Test |
- @Feature({"ShapeDetection"}) |
- public void testDetectionFailsWithInvalidDimensions() { |
- assertTrue("Should be on UI thread", ThreadUtils.runningOnUiThread()); |
- |
- SharedBufferHandle sharedBuffer = Mockito.mock(SharedBufferHandle.class); |
- Mockito.when(sharedBuffer.isValid()).thenReturn(true); |
- |
- FaceDetection.DetectResponse callback = Mockito.mock(FaceDetection.DetectResponse.class); |
- ArgumentCaptor<FaceDetectionResult[]> argument = |
- ArgumentCaptor.forClass(FaceDetectionResult[].class); |
- |
- mFaceDetectionImpl.detect(sharedBuffer, INVALID_WIDTH, VALID_HEIGHT, callback); |
- |
- Mockito.verify(sharedBuffer, Mockito.times(1)).isValid(); |
- Mockito.verify(callback, Mockito.times(1)).call(argument.capture()); |
- assertEquals("result", 0, argument.getValue().length); |
- } |
- |
- /** |
- * Verify detection fails if SharedBufferHandle fails to map(). |
- */ |
- @Test |
- @Feature({"ShapeDetection"}) |
- public void testDetectionFailsWithWronglyMappedBuffer() { |
- assertTrue("Should be on UI thread", ThreadUtils.runningOnUiThread()); |
- |
- SharedBufferHandle sharedBuffer = Mockito.mock(SharedBufferHandle.class); |
- Mockito.when(sharedBuffer.isValid()).thenReturn(true); |
- Mockito.when(sharedBuffer.map( |
- Mockito.eq(0L), Mockito.eq(NUM_BYTES), Mockito.any(MapFlags.class))) |
- .thenReturn(ByteBuffer.allocate(0)); |
- |
- FaceDetection.DetectResponse callback = Mockito.mock(FaceDetection.DetectResponse.class); |
- ArgumentCaptor<FaceDetectionResult[]> argument = |
- ArgumentCaptor.forClass(FaceDetectionResult[].class); |
- |
- mFaceDetectionImpl.detect(sharedBuffer, VALID_WIDTH, VALID_HEIGHT, callback); |
- |
- Mockito.verify(sharedBuffer, Mockito.times(1)).isValid(); |
- Mockito.verify(sharedBuffer, Mockito.times(1)) |
- .map(Mockito.eq(0L), Mockito.eq(NUM_BYTES), Mockito.any(MapFlags.class)); |
- Mockito.verify(callback, Mockito.times(1)).call(argument.capture()); |
- assertEquals("result", 0, argument.getValue().length); |
- } |
- |
- /** |
- * Verify detection works. |
- */ |
- @Test |
- @Feature({"ShapeDetection"}) |
- public void testDetection() { |
- assertTrue("Should be on UI thread", ThreadUtils.runningOnUiThread()); |
- |
- SharedBufferHandle sharedBuffer = Mockito.mock(SharedBufferHandle.class); |
- Mockito.when(sharedBuffer.isValid()).thenReturn(true); |
- Mockito.when(sharedBuffer.map( |
- Mockito.eq(0L), Mockito.eq(NUM_BYTES), Mockito.any(MapFlags.class))) |
- .thenReturn(ByteBuffer.allocate((int) NUM_BYTES)); |
- |
- FaceDetection.DetectResponse callback = Mockito.mock(FaceDetection.DetectResponse.class); |
- ArgumentCaptor<FaceDetectionResult[]> argument = |
- ArgumentCaptor.forClass(FaceDetectionResult[].class); |
- |
- // We have to add a |faceDetector| mock that inside returns a |face| mock. To spice things |
- // up, some methods, findFaces() and getMidPoint(), modify parameters so we need doAnswer(). |
- final float eyesDistance = 1.0f; |
- final float faceCenterX = 2.0f; |
- final float faceCenterY = 3.0f; |
- |
- Face face = Mockito.mock(Face.class); |
- Mockito.when(face.eyesDistance()).thenReturn(eyesDistance); |
- Mockito.doAnswer(new Answer<Void>() { |
- @Override |
- public Void answer(InvocationOnMock invocation) { |
- Object[] args = invocation.getArguments(); |
- PointF midPoint = (PointF) args[0]; |
- midPoint.set(faceCenterX, faceCenterY); |
- return null; |
- } |
- }) |
- .when(face) |
- .getMidPoint(Mockito.any(PointF.class)); |
- |
- FaceDetector faceDetector = Mockito.mock(FaceDetector.class); |
- FaceDetectionImpl.setFaceDetector(faceDetector); |
- Mockito.doAnswer(new Answer<Integer>() { |
- @Override |
- public Integer answer(InvocationOnMock invocation) throws Throwable { |
- Object[] args = invocation.getArguments(); |
- Face[] faceArray = (Face[]) args[1]; |
- faceArray[0] = face; |
- return 1; |
- } |
- }) |
- .when(faceDetector) |
- .findFaces(Mockito.any(Bitmap.class), Mockito.any()); |
- |
- mFaceDetectionImpl.detect(sharedBuffer, VALID_WIDTH, VALID_HEIGHT, callback); |
- |
- Mockito.verify(sharedBuffer, Mockito.times(1)).isValid(); |
- Mockito.verify(sharedBuffer, Mockito.times(1)) |
- .map(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(MapFlags.class)); |
- |
- Mockito.verify(faceDetector, Mockito.times(1)) |
- .findFaces(Mockito.any(Bitmap.class), Mockito.any()); |
- |
- // Detection happens asynchronously: give some timeout. |
- Mockito.verify(callback, Mockito.timeout(3000 /* milliseconds */).times(1)) |
- .call(argument.capture()); |
- assertEquals("result", 1, argument.getValue().length); |
- assertEquals("width", 2 * eyesDistance, argument.getValue()[0].boundingBox.width, 0.1); |
- assertEquals("height", 2 * eyesDistance, argument.getValue()[0].boundingBox.height, 0.1); |
- assertEquals("x", faceCenterX - eyesDistance, argument.getValue()[0].boundingBox.x, 0.1); |
- assertEquals("y", faceCenterY - eyesDistance, argument.getValue()[0].boundingBox.y, 0.1); |
- } |
-} |