| 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);
|
| - }
|
| -}
|
|
|