blob: b89aad0f6773f23cdcdba52d7c0d9fe58757b25e [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.features.noisereduction;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.hardware.camera2.CaptureRequest;
import android.os.Build.VERSION;
import io.flutter.plugins.camera.CameraProperties;
import io.flutter.plugins.camera.utils.TestUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class NoiseReductionFeatureTest {
@Before
public void before() {
// Make sure the VERSION.SDK_INT field returns 23, to allow using all available
// noise reduction modes in tests.
TestUtils.setFinalStatic(VERSION.class, "SDK_INT", 23);
}
@After
public void after() {
// Make sure we reset the VERSION.SDK_INT field to it's original value.
TestUtils.setFinalStatic(VERSION.class, "SDK_INT", 0);
}
@Test
public void getDebugName_shouldReturnTheNameOfTheFeature() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
assertEquals("NoiseReductionFeature", noiseReductionFeature.getDebugName());
}
@Test
public void getValue_shouldReturnFastIfNotSet() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
assertEquals(NoiseReductionMode.fast, noiseReductionFeature.getValue());
}
@Test
public void getValue_shouldEchoTheSetValue() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
NoiseReductionMode expectedValue = NoiseReductionMode.fast;
noiseReductionFeature.setValue(expectedValue);
NoiseReductionMode actualValue = noiseReductionFeature.getValue();
assertEquals(expectedValue, actualValue);
}
@Test
public void checkIsSupported_shouldReturnFalseWhenAvailableNoiseReductionModesIsNull() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
when(mockCameraProperties.getAvailableNoiseReductionModes()).thenReturn(null);
assertFalse(noiseReductionFeature.checkIsSupported());
}
@Test
public void
checkIsSupported_shouldReturnFalseWhenAvailableNoiseReductionModesReturnsAnEmptyArray() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
when(mockCameraProperties.getAvailableNoiseReductionModes()).thenReturn(new int[] {});
assertFalse(noiseReductionFeature.checkIsSupported());
}
@Test
public void
checkIsSupported_shouldReturnTrueWhenAvailableNoiseReductionModesReturnsAtLeastOneItem() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
when(mockCameraProperties.getAvailableNoiseReductionModes()).thenReturn(new int[] {1});
assertTrue(noiseReductionFeature.checkIsSupported());
}
@Test
public void updateBuilder_shouldReturnWhenCheckIsSupportedIsFalse() {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
when(mockCameraProperties.getAvailableNoiseReductionModes()).thenReturn(new int[] {});
noiseReductionFeature.updateBuilder(mockBuilder);
verify(mockBuilder, never()).set(any(), any());
}
@Test
public void updateBuilder_shouldSetNoiseReductionModeOffWhenOff() {
testUpdateBuilderWith(NoiseReductionMode.off, CaptureRequest.NOISE_REDUCTION_MODE_OFF);
}
@Test
public void updateBuilder_shouldSetNoiseReductionModeFastWhenFast() {
testUpdateBuilderWith(NoiseReductionMode.fast, CaptureRequest.NOISE_REDUCTION_MODE_FAST);
}
@Test
public void updateBuilder_shouldSetNoiseReductionModeHighQualityWhenHighQuality() {
testUpdateBuilderWith(
NoiseReductionMode.highQuality, CaptureRequest.NOISE_REDUCTION_MODE_HIGH_QUALITY);
}
@Test
public void updateBuilder_shouldSetNoiseReductionModeMinimalWhenMinimal() {
testUpdateBuilderWith(NoiseReductionMode.minimal, CaptureRequest.NOISE_REDUCTION_MODE_MINIMAL);
}
@Test
public void updateBuilder_shouldSetNoiseReductionModeZeroShutterLagWhenZeroShutterLag() {
testUpdateBuilderWith(
NoiseReductionMode.zeroShutterLag, CaptureRequest.NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG);
}
private static void testUpdateBuilderWith(NoiseReductionMode mode, int expectedResult) {
CameraProperties mockCameraProperties = mock(CameraProperties.class);
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
NoiseReductionFeature noiseReductionFeature = new NoiseReductionFeature(mockCameraProperties);
when(mockCameraProperties.getAvailableNoiseReductionModes()).thenReturn(new int[] {1});
noiseReductionFeature.setValue(mode);
noiseReductionFeature.updateBuilder(mockBuilder);
verify(mockBuilder, times(1)).set(CaptureRequest.NOISE_REDUCTION_MODE, expectedResult);
}
}