Move DisplayDataSizeTest to AndroidJunitTest
**Root cause** - When DisplayDataSizeTest was created, it was ignored already due to b/214161063. That means the test never passed in the beginning. - The default display's type in Robolectric is TYPE_UNKNOWN. However, in the constructor of DisplayDensityUtils, we check all the display that is not TYPE_INTERNAL can't be a default display. Hence the test failed. - Even if we shadow the DisplayInfo to have TYPE_INTERNAL for default display, the test still failed, because whenever we tried to get the default display density we always get 0, and doens't have other diplay density values. Hence we can't test increasing the display size in Robolectric Test. Note: the solution here is a workaround for waiting AsyncTask to finish. If we ever change the implementation in DisplayDensityUtils to not use AsyncTask, we'll need to update the test. Bug: 279082331 Test: atest DisplaySizeDataTest --iterations 20 Change-Id: I3ccee5e7ba4d9399a8b715d84a9d53e106f88762
This commit is contained in:
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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 com.android.settings.accessibility;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/**
|
||||
* Tests for {@link DisplaySizeData}.
|
||||
*/
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class DisplaySizeDataTest {
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private DisplaySizeData mDisplaySizeData;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mDisplaySizeData = new DisplaySizeData(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void commit_success() {
|
||||
final int progress = 4;
|
||||
|
||||
mDisplaySizeData.commit(progress);
|
||||
final float density = mContext.getResources().getDisplayMetrics().density;
|
||||
|
||||
assertThat(density).isEqualTo(mDisplaySizeData.getValues().get(progress));
|
||||
}
|
||||
}
|
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* 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 com.android.settings.accessibility;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assume;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class DisplaySizeDataTest {
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private DisplaySizeData mDisplaySizeData;
|
||||
private int mInitialIndex;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mDisplaySizeData = new DisplaySizeData(mContext);
|
||||
mInitialIndex = mDisplaySizeData.getInitialIndex();
|
||||
}
|
||||
|
||||
@After
|
||||
public void cleanUp() throws InterruptedException {
|
||||
mDisplaySizeData.commit(mInitialIndex);
|
||||
waitForDisplayChangesSynchronously();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void commit_success() throws InterruptedException {
|
||||
final int progress = mDisplaySizeData.getValues().size() - 1;
|
||||
Assume.assumeTrue("We need more default display size to make the test effective",
|
||||
mInitialIndex != progress && progress > 0);
|
||||
|
||||
mDisplaySizeData.commit(progress);
|
||||
waitForDisplayChangesSynchronously();
|
||||
|
||||
final int density = mContext.getResources().getDisplayMetrics().densityDpi;
|
||||
assertThat(density).isEqualTo(mDisplaySizeData.getValues().get(progress));
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for the display change propagated synchronously.
|
||||
* <p/>
|
||||
* Note: Currently, DisplayDensityUtils uses AsyncTask to change the display density
|
||||
* asynchronously. If in the future we stop using the deprecated AsyncTask, we will need to
|
||||
* update the wait mechanism in the test.
|
||||
*/
|
||||
private void waitForDisplayChangesSynchronously() throws InterruptedException {
|
||||
// The default AsyncTask.execute run tasks in serial order.
|
||||
// Posting a new runnable and wait for it to finish means the previous tasks are all done.
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
AsyncTask.execute(latch::countDown);
|
||||
latch.await(5, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user