diff options
| author | 2023-03-21 15:24:17 +0000 | |
|---|---|---|
| committer | 2023-03-21 15:24:17 +0000 | |
| commit | 44a24897d27a1373f39e93d0496cdc5dbba8b586 (patch) | |
| tree | 273cbfde62b6bfe461d86e4b35f29786533ec461 | |
| parent | e87bf3f9dede21e14873efedc48920b00468007f (diff) | |
| parent | 9e284bfc374f53b7d34826900fe7d7a3809ef712 (diff) | |
Merge "Introduce unit tests for non-public VirtualDisplayConfig APIs" into udc-dev
| -rw-r--r-- | core/java/android/hardware/display/VirtualDisplayConfig.java | 3 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/hardware/display/VirtualDisplayConfigTest.java | 118 |
2 files changed, 119 insertions, 2 deletions
diff --git a/core/java/android/hardware/display/VirtualDisplayConfig.java b/core/java/android/hardware/display/VirtualDisplayConfig.java index 3fffb3ca2c7b..03d6d91d1e78 100644 --- a/core/java/android/hardware/display/VirtualDisplayConfig.java +++ b/core/java/android/hardware/display/VirtualDisplayConfig.java @@ -161,9 +161,8 @@ public final class VirtualDisplayConfig implements Parcelable { } /** - * Returns the recording session associated with this VirtualDisplay. Only used for + * Returns the recording session associated with this {@link VirtualDisplay}. Only used for * recording via {@link MediaProjection}. - * * @hide */ @Nullable diff --git a/core/tests/coretests/src/android/hardware/display/VirtualDisplayConfigTest.java b/core/tests/coretests/src/android/hardware/display/VirtualDisplayConfigTest.java new file mode 100644 index 000000000000..4e5906427af4 --- /dev/null +++ b/core/tests/coretests/src/android/hardware/display/VirtualDisplayConfigTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.display; + +import static com.google.common.truth.Truth.assertThat; + +import android.graphics.SurfaceTexture; +import android.os.Binder; +import android.os.IBinder; +import android.os.Parcel; +import android.util.DisplayMetrics; +import android.view.ContentRecordingSession; +import android.view.Surface; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.SmallTest; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Set; + +/** + * Tests for non-public APIs in {@link VirtualDisplayConfig}. + * See also related CTS tests. + * + * Run with: + * atest FrameworksCoreTests:VirtualDisplayConfigTest + */ +@SmallTest +@RunWith(AndroidJUnit4.class) +public class VirtualDisplayConfigTest { + + private static final String NAME = "VirtualDisplayConfigTest"; + private static final int WIDTH = 720; + private static final int HEIGHT = 480; + private static final int DENSITY = DisplayMetrics.DENSITY_MEDIUM; + private static final float REQUESTED_REFRESH_RATE = 30.0f; + private static final int FLAGS = DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC + | DisplayManager.VIRTUAL_DISPLAY_FLAG_SECURE; + + // Values for hidden APIs. + private static final int DISPLAY_ID_TO_MIRROR = 10; + private static final IBinder WINDOW_TOKEN = new Binder("DisplayContentWindowToken"); + private static final ContentRecordingSession CONTENT_RECORDING_SESSION = + ContentRecordingSession.createTaskSession(WINDOW_TOKEN); + + private final Surface mSurface = new Surface(new SurfaceTexture(/*texName=*/1)); + + @Test + public void testParcelAndUnparcel_matches() { + final VirtualDisplayConfig originalConfig = buildGenericVirtualDisplay(NAME); + + validateConstantFields(originalConfig); + assertThat(originalConfig.getName()).isEqualTo(NAME); + + + final Parcel parcel = Parcel.obtain(); + originalConfig.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + final VirtualDisplayConfig recreatedConfig = + VirtualDisplayConfig.CREATOR.createFromParcel(parcel); + + validateConstantFields(recreatedConfig); + assertThat(recreatedConfig.getName()).isEqualTo(NAME); + } + + @Test + public void testEquals_matches() { + assertThat(buildGenericVirtualDisplay(NAME)).isEqualTo(buildGenericVirtualDisplay(NAME)); + } + + @Test + public void testEquals_different() { + assertThat(buildGenericVirtualDisplay(NAME + "2")).isNotEqualTo( + buildGenericVirtualDisplay(NAME)); + } + + private VirtualDisplayConfig buildGenericVirtualDisplay(String name) { + return new VirtualDisplayConfig.Builder(name, WIDTH, HEIGHT, DENSITY) + .setFlags(FLAGS) + .setSurface(mSurface) + .setDisplayCategories(Set.of("C1", "C2")) + .addDisplayCategory("C3") + .setRequestedRefreshRate(REQUESTED_REFRESH_RATE) + .setDisplayIdToMirror(DISPLAY_ID_TO_MIRROR) + .setWindowManagerMirroringEnabled(true) + .setContentRecordingSession(CONTENT_RECORDING_SESSION) + .build(); + } + + private void validateConstantFields(VirtualDisplayConfig config) { + assertThat(config.getWidth()).isEqualTo(WIDTH); + assertThat(config.getHeight()).isEqualTo(HEIGHT); + assertThat(config.getDensityDpi()).isEqualTo(DENSITY); + assertThat(config.getFlags()).isEqualTo(FLAGS); + assertThat(config.getSurface()).isNotNull(); + assertThat(config.getDisplayCategories()).containsExactly("C1", "C2", "C3"); + assertThat(config.getRequestedRefreshRate()).isEqualTo(REQUESTED_REFRESH_RATE); + assertThat(config.getDisplayIdToMirror()).isEqualTo(DISPLAY_ID_TO_MIRROR); + assertThat(config.isWindowManagerMirroringEnabled()).isTrue(); + assertThat(config.getContentRecordingSession()).isEqualTo(CONTENT_RECORDING_SESSION); + } +} |