blob: 2c6d9d9177e9840710e7f0c18cecb1f063c458e4 [file] [log] [blame]
// Copyright 2013 The Flutter 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 io.flutter.plugins.camera;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
import android.hardware.camera2.params.MeteringRectangle;
import android.util.Size;
import io.flutter.embedding.engine.systemchannels.PlatformChannel;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockedStatic;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class CameraRegionUtils_convertPointToMeteringRectangleTest {
private MockedStatic<CameraRegionUtils.MeteringRectangleFactory> mockedMeteringRectangleFactory;
private Size mockCameraBoundaries;
@Before
public void setUp() {
this.mockCameraBoundaries = mock(Size.class);
when(this.mockCameraBoundaries.getWidth()).thenReturn(100);
when(this.mockCameraBoundaries.getHeight()).thenReturn(100);
mockedMeteringRectangleFactory = mockStatic(CameraRegionUtils.MeteringRectangleFactory.class);
mockedMeteringRectangleFactory
.when(
() ->
CameraRegionUtils.MeteringRectangleFactory.create(
anyInt(), anyInt(), anyInt(), anyInt(), anyInt()))
.thenAnswer(
new Answer<MeteringRectangle>() {
@Override
public MeteringRectangle answer(InvocationOnMock createInvocation) throws Throwable {
MeteringRectangle mockMeteringRectangle = mock(MeteringRectangle.class);
when(mockMeteringRectangle.getX()).thenReturn(createInvocation.getArgument(0));
when(mockMeteringRectangle.getY()).thenReturn(createInvocation.getArgument(1));
when(mockMeteringRectangle.getWidth()).thenReturn(createInvocation.getArgument(2));
when(mockMeteringRectangle.getHeight()).thenReturn(createInvocation.getArgument(3));
when(mockMeteringRectangle.getMeteringWeight())
.thenReturn(createInvocation.getArgument(4));
when(mockMeteringRectangle.equals(any()))
.thenAnswer(
new Answer<Boolean>() {
@Override
public Boolean answer(InvocationOnMock equalsInvocation)
throws Throwable {
MeteringRectangle otherMockMeteringRectangle =
equalsInvocation.getArgument(0);
return mockMeteringRectangle.getX() == otherMockMeteringRectangle.getX()
&& mockMeteringRectangle.getY() == otherMockMeteringRectangle.getY()
&& mockMeteringRectangle.getWidth()
== otherMockMeteringRectangle.getWidth()
&& mockMeteringRectangle.getHeight()
== otherMockMeteringRectangle.getHeight()
&& mockMeteringRectangle.getMeteringWeight()
== otherMockMeteringRectangle.getMeteringWeight();
}
});
return mockMeteringRectangle;
}
});
}
@After
public void tearDown() {
mockedMeteringRectangleFactory.close();
}
@Test
public void convertPointToMeteringRectangle_shouldReturnValidMeteringRectangleForCenterCoord() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0.5, 0.5, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(45, 45, 10, 10, 1).equals(r));
}
@Test
public void convertPointToMeteringRectangle_shouldReturnValidMeteringRectangleForTopLeftCoord() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0, 0, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(0, 0, 10, 10, 1).equals(r));
}
@Test
public void convertPointToMeteringRectangle_ShouldReturnValidMeteringRectangleForTopRightCoord() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 0, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(89, 0, 10, 10, 1).equals(r));
}
@Test
public void
convertPointToMeteringRectangle_shouldReturnValidMeteringRectangleForBottomLeftCoord() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0, 1, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(0, 89, 10, 10, 1).equals(r));
}
@Test
public void
convertPointToMeteringRectangle_shouldReturnValidMeteringRectangleForBottomRightCoord() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 1, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(89, 89, 10, 10, 1).equals(r));
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowForXUpperBound() {
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1.5, 0, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowForXLowerBound() {
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, -0.5, 0, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowForYUpperBound() {
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0, 1.5, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowForYLowerBound() {
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0, -0.5, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
@Test()
public void
convertPointToMeteringRectangle_shouldRotateMeteringRectangleAccordingToUiOrientationForPortraitUp() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 1, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(89, 0, 10, 10, 1).equals(r));
}
@Test()
public void
convertPointToMeteringRectangle_shouldRotateMeteringRectangleAccordingToUiOrientationForPortraitDown() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 1, PlatformChannel.DeviceOrientation.PORTRAIT_DOWN);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(0, 89, 10, 10, 1).equals(r));
}
@Test()
public void
convertPointToMeteringRectangle_shouldRotateMeteringRectangleAccordingToUiOrientationForLandscapeLeft() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 1, PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(89, 89, 10, 10, 1).equals(r));
}
@Test()
public void
convertPointToMeteringRectangle_shouldRotateMeteringRectangleAccordingToUiOrientationForLandscapeRight() {
MeteringRectangle r =
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 1, 1, PlatformChannel.DeviceOrientation.LANDSCAPE_RIGHT);
assertTrue(CameraRegionUtils.MeteringRectangleFactory.create(0, 0, 10, 10, 1).equals(r));
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowFor0WidthBoundary() {
Size mockCameraBoundaries = mock(Size.class);
when(mockCameraBoundaries.getWidth()).thenReturn(0);
when(mockCameraBoundaries.getHeight()).thenReturn(50);
CameraRegionUtils.convertPointToMeteringRectangle(
mockCameraBoundaries, 0, -0.5, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
@Test(expected = AssertionError.class)
public void convertPointToMeteringRectangle_shouldThrowFor0HeightBoundary() {
Size mockCameraBoundaries = mock(Size.class);
when(mockCameraBoundaries.getWidth()).thenReturn(50);
when(mockCameraBoundaries.getHeight()).thenReturn(0);
CameraRegionUtils.convertPointToMeteringRectangle(
this.mockCameraBoundaries, 0, -0.5, PlatformChannel.DeviceOrientation.PORTRAIT_UP);
}
}