summaryrefslogtreecommitdiff
path: root/device-manager
diff options
context:
space:
mode:
authorJuan C Nuno <juancnuno@google.com>2022-06-15 15:20:52 -0700
committerJuan Nuno <juancnuno@google.com>2022-06-22 21:31:50 +0000
commitdaa267643f1bbcbcea6a2eaf94fc4e20a3cd7c8d (patch)
tree3451caf60ad3bac052ca852ea0dc2ed85b15bf5d /device-manager
parent1c228648d92f620abd12811f687d128bce582cef (diff)
downloadidea-daa267643f1bbcbcea6a2eaf94fc4e20a3cd7c8d.tar.gz
Add ABI list to the virtual details panel
Bug: 198459483 Test: VirtualDeviceDetailsPanelTest Change-Id: I9c79ce6389750ace6e6221e5d4c021fb1e9c7921
Diffstat (limited to 'device-manager')
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/InfoSection.java22
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilder.java27
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java6
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java44
-rw-r--r--device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilderTest.java32
-rw-r--r--device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanelTest.java152
6 files changed, 198 insertions, 85 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/InfoSection.java b/device-manager/src/com/android/tools/idea/devicemanager/InfoSection.java
index 6a92fe42400..049db53e2ae 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/InfoSection.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/InfoSection.java
@@ -18,16 +18,19 @@ package com.android.tools.idea.devicemanager;
import com.android.tools.idea.flags.StudioFlags;
import com.android.tools.idea.wearpairing.WearPairingManager;
import com.android.tools.idea.wearpairing.WearPairingManager.PhoneWearPair;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Streams;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBPanel;
import com.intellij.util.ui.JBUI.CurrentTheme.Label;
import java.awt.Component;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Formatter;
import java.util.List;
import java.util.Optional;
import java.util.OptionalInt;
+import java.util.stream.Collectors;
import java.util.stream.IntStream;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Group;
@@ -137,8 +140,25 @@ public class InfoSection extends JBPanel<InfoSection> {
label.setText(String.join(", ", values));
}
+ @VisibleForTesting
+ public final @NotNull Object getNames() {
+ return getText(myNameLabels);
+ }
+
+ @VisibleForTesting
+ public final @NotNull Object getValues() {
+ return getText(myValueLabels);
+ }
+
+ @VisibleForTesting
+ private static @NotNull Object getText(@NotNull Collection<@NotNull JLabel> labels) {
+ return labels.stream()
+ .map(JLabel::getText)
+ .collect(Collectors.toList());
+ }
+
@Override
- public @NotNull String toString() {
+ public final @NotNull String toString() {
Formatter formatter = new Formatter();
formatter.format("%s%n", myHeadingLabel.getText());
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilder.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilder.java
index 96ec61fc90d..cb850908a6b 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilder.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilder.java
@@ -31,7 +31,6 @@ import java.util.List;
import java.util.Objects;
import java.util.OptionalInt;
import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
import java.util.stream.Collectors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -41,6 +40,10 @@ final class AsyncVirtualDeviceDetailsBuilder {
private final @NotNull VirtualDevice myDevice;
private final @NotNull DeviceManagerAndroidDebugBridge myBridge;
+ AsyncVirtualDeviceDetailsBuilder(@Nullable Project project, @NotNull VirtualDevice device) {
+ this(project, device, new DeviceManagerAndroidDebugBridge());
+ }
+
@VisibleForTesting
AsyncVirtualDeviceDetailsBuilder(@Nullable Project project,
@NotNull VirtualDevice device,
@@ -50,7 +53,7 @@ final class AsyncVirtualDeviceDetailsBuilder {
myBridge = bridge;
}
- @NotNull Future<@NotNull Device> buildAsync() {
+ @NotNull ListenableFuture<@NotNull Device> buildAsync() {
Executor executor = AppExecutorUtil.getAppExecutorService();
// noinspection UnstableApiUsage
@@ -89,18 +92,20 @@ final class AsyncVirtualDeviceDetailsBuilder {
private @NotNull Device build(@Nullable IDevice device) {
AvdInfo avd = myDevice.getAvdInfo();
- return new VirtualDevice.Builder()
+ VirtualDevice.Builder builder = new VirtualDevice.Builder()
.setKey(myDevice.getKey())
- .setType(myDevice.getType())
.setName(myDevice.getName())
- .setOnline(myDevice.isOnline())
.setTarget(myDevice.getTarget())
.setCpuArchitecture(myDevice.getCpuArchitecture())
- .setAndroidVersion(myDevice.getAndroidVersion())
- .setSizeOnDisk(myDevice.getSizeOnDisk())
.setResolution(getResolution(avd))
- .setDensity(getProperty(avd, "hw.lcd.density").orElse(-1))
- .setAvdInfo(myDevice.getAvdInfo())
+ .setDensity(getProperty(avd, "hw.lcd.density").orElse(-1));
+
+ if (device != null) {
+ builder.addAllAbis(device.getAbis());
+ }
+
+ return builder
+ .setAvdInfo(avd)
.build();
}
@@ -129,4 +134,8 @@ final class AsyncVirtualDeviceDetailsBuilder {
return OptionalInt.empty();
}
}
+
+ @Nullable Project getProject() {
+ return myProject;
+ }
}
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java
index 762116dcad3..38e4d53d078 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java
@@ -22,6 +22,7 @@ import com.android.tools.idea.devicemanager.DeviceType;
import com.android.tools.idea.devicemanager.Key;
import com.android.tools.idea.devicemanager.Resolution;
import com.android.tools.idea.wearpairing.AndroidWearPairingBundle;
+import java.util.Collection;
import java.util.Objects;
import javax.swing.Icon;
import org.jetbrains.annotations.NotNull;
@@ -89,6 +90,11 @@ public final class VirtualDevice extends Device {
return this;
}
+ @NotNull Builder addAllAbis(@NotNull Collection<@NotNull String> abis) {
+ myAbis.addAll(abis);
+ return this;
+ }
+
@NotNull Builder setAvdInfo(@NotNull AvdInfo avdInfo) {
myAvdInfo = avdInfo;
return this;
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
index e1763516e8d..624bdbcf080 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
@@ -19,21 +19,30 @@ import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdInfo.AvdStatus;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.tools.idea.devicemanager.DetailsPanel;
+import com.android.tools.idea.devicemanager.Device;
+import com.android.tools.idea.devicemanager.DeviceManagerFutureCallback;
import com.android.tools.idea.devicemanager.InfoSection;
import com.android.tools.idea.devicemanager.PairedDevicesPanel;
import com.android.tools.idea.devicemanager.ScreenDiagram;
import com.android.tools.idea.flags.StudioFlags;
import com.android.tools.idea.wearpairing.WearPairingManager;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
import com.intellij.openapi.project.Project;
+import com.intellij.util.concurrency.EdtExecutorService;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.Function;
import javax.swing.JLabel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
final class VirtualDeviceDetailsPanel extends DetailsPanel {
private final @NotNull VirtualDevice myDevice;
+ private final @NotNull AsyncVirtualDeviceDetailsBuilder myBuilder;
+ private final @NotNull Function<@NotNull SummarySection, @NotNull FutureCallback<@NotNull Device>> myNewSummarySectionCallback;
+
private @Nullable InfoSection myPropertiesSection;
@VisibleForTesting
@@ -41,6 +50,7 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
@VisibleForTesting final @NotNull JLabel myApiLevelLabel;
@VisibleForTesting final @NotNull JLabel myResolutionLabel;
@VisibleForTesting final @NotNull JLabel myDpLabel;
+ @VisibleForTesting final @NotNull JLabel myAbiListLabel;
@VisibleForTesting @Nullable JLabel myErrorLabel;
@VisibleForTesting @Nullable JLabel mySnapshotLabel;
@@ -50,12 +60,23 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
myApiLevelLabel = addNameAndValueLabels("API level");
myResolutionLabel = addNameAndValueLabels("Resolution");
myDpLabel = addNameAndValueLabels("dp");
+ myAbiListLabel = addNameAndValueLabels("ABI list");
}
}
VirtualDeviceDetailsPanel(@NotNull VirtualDevice device, @Nullable Project project) {
+ this(device, new AsyncVirtualDeviceDetailsBuilder(project, device), VirtualDeviceDetailsPanel::newSummarySectionCallback);
+ }
+
+ @VisibleForTesting
+ VirtualDeviceDetailsPanel(@NotNull VirtualDevice device,
+ @NotNull AsyncVirtualDeviceDetailsBuilder builder,
+ @NotNull Function<@NotNull SummarySection, @NotNull FutureCallback<@NotNull Device>> newSummarySectionCallback) {
super(device.getName());
+
myDevice = device;
+ myBuilder = builder;
+ myNewSummarySectionCallback = newSummarySectionCallback;
myScreenDiagram = new ScreenDiagram(device);
initPropertiesSection();
@@ -67,19 +88,25 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
}
if (StudioFlags.PAIRED_DEVICES_TAB_ENABLED.get() && device.isPairable()) {
- myPairedDevicesPanel = new PairedDevicesPanel(device.getKey(), this, project);
+ myPairedDevicesPanel = new PairedDevicesPanel(device.getKey(), this, builder.getProject());
}
init();
}
+ @VisibleForTesting
+ static @NotNull FutureCallback<@NotNull Device> newSummarySectionCallback(@NotNull SummarySection section) {
+ return new DeviceManagerFutureCallback<>(VirtualDeviceDetailsPanel.class, device -> {
+ InfoSection.setText(section.myResolutionLabel, device.getResolution());
+ InfoSection.setText(section.myDpLabel, device.getDp());
+ InfoSection.setText(section.myAbiListLabel, device.getAbis());
+ });
+ }
+
@Override
protected void initSummarySection() {
SummarySection summarySection = new SummarySection();
-
InfoSection.setText(summarySection.myApiLevelLabel, myDevice.getAndroidVersion().getApiString());
- InfoSection.setText(summarySection.myResolutionLabel, myDevice.getResolution());
- InfoSection.setText(summarySection.myDpLabel, myDevice.getDp());
AvdInfo device = myDevice.getAvdInfo();
@@ -88,6 +115,7 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
InfoSection.setText(summarySection.myErrorLabel, device.getErrorMessage());
}
else {
+ // TODO Ensure this actually displays the snapshot to boot with
Object snapshot = device.getProperty(AvdManager.AVD_INI_SNAPSHOT_PRESENT);
if (snapshot != null) {
@@ -97,6 +125,8 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
}
summarySection.setLayout();
+ Futures.addCallback(myBuilder.buildAsync(), myNewSummarySectionCallback.apply(summarySection), EdtExecutorService.getInstance());
+
mySummarySection = summarySection;
}
@@ -132,4 +162,10 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
assert mySummarySection != null;
return (SummarySection)mySummarySection;
}
+
+ @VisibleForTesting
+ @NotNull InfoSection getPropertiesSection() {
+ assert myPropertiesSection != null;
+ return myPropertiesSection;
+ }
}
diff --git a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilderTest.java b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilderTest.java
index b6b1e370452..a11f88c2fbd 100644
--- a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilderTest.java
+++ b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/AsyncVirtualDeviceDetailsBuilderTest.java
@@ -23,6 +23,7 @@ import com.android.ddmlib.IDevice;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.tools.idea.devicemanager.Device;
import com.android.tools.idea.devicemanager.DeviceManagerAndroidDebugBridge;
+import com.android.tools.idea.devicemanager.Key;
import com.android.tools.idea.devicemanager.Resolution;
import com.android.tools.idea.devicemanager.TestDeviceManagerFutures;
import com.google.common.util.concurrent.Futures;
@@ -37,21 +38,18 @@ import org.mockito.Mockito;
@RunWith(JUnit4.class)
public final class AsyncVirtualDeviceDetailsBuilderTest {
private final @NotNull AvdInfo myAvd;
- private final @NotNull VirtualDevice myVirtualDevice;
-
private final @NotNull IDevice myDevice;
+
private final @NotNull AsyncVirtualDeviceDetailsBuilder myBuilder;
public AsyncVirtualDeviceDetailsBuilderTest() {
myAvd = Mockito.mock(AvdInfo.class);
- myVirtualDevice = TestVirtualDevices.pixel5Api31(myAvd);
-
myDevice = Mockito.mock(IDevice.class);
DeviceManagerAndroidDebugBridge bridge = Mockito.mock(DeviceManagerAndroidDebugBridge.class);
Mockito.when(bridge.getDevices(null)).thenReturn(Futures.immediateFuture(List.of(myDevice)));
- myBuilder = new AsyncVirtualDeviceDetailsBuilder(null, myVirtualDevice, bridge);
+ myBuilder = new AsyncVirtualDeviceDetailsBuilder(null, TestVirtualDevices.pixel5Api31(myAvd), bridge);
}
@Test
@@ -63,20 +61,36 @@ public final class AsyncVirtualDeviceDetailsBuilderTest {
Future<Device> future = myBuilder.buildAsync();
// Assert
- assertEquals(myVirtualDevice, TestDeviceManagerFutures.get(future));
+ Object device = new VirtualDevice.Builder()
+ .setKey(TestVirtualDevices.newKey("Pixel_5_API_31"))
+ .setName("Pixel 5 API 31")
+ .setTarget("Android 12.0 Google APIs")
+ .setCpuArchitecture("x86_64")
+ .setAvdInfo(myAvd)
+ .build();
+
+ assertEquals(device, TestDeviceManagerFutures.get(future));
}
@Test
public void buildAsync() throws Exception {
// Arrange
- AvdData avd = new AvdData("Pixel_5_API_31", TestVirtualDevices.newKey("Pixel_5_API_31").toString());
- Mockito.when(myDevice.getAvdData()).thenReturn(Futures.immediateFuture(avd));
+ Key key = TestVirtualDevices.newKey("Pixel_5_API_31");
+ Mockito.when(myDevice.getAvdData()).thenReturn(Futures.immediateFuture(new AvdData("Pixel_5_API_31", key.toString())));
// Act
Future<Device> future = myBuilder.buildAsync();
// Assert
- assertEquals(myVirtualDevice, TestDeviceManagerFutures.get(future));
+ Object device = new VirtualDevice.Builder()
+ .setKey(key)
+ .setName("Pixel 5 API 31")
+ .setTarget("Android 12.0 Google APIs")
+ .setCpuArchitecture("x86_64")
+ .setAvdInfo(myAvd)
+ .build();
+
+ assertEquals(device, TestDeviceManagerFutures.get(future));
}
@Test
diff --git a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanelTest.java b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanelTest.java
index ee52ee56622..edf51647a48 100644
--- a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanelTest.java
+++ b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanelTest.java
@@ -16,19 +16,22 @@
package com.android.tools.idea.devicemanager.virtualtab;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import com.android.sdklib.AndroidVersion;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdInfo.AvdStatus;
-import com.android.sdklib.internal.avd.AvdManager;
-import com.android.sdklib.repository.targets.SystemImage;
+import com.android.tools.idea.devicemanager.CountDownLatchAssert;
+import com.android.tools.idea.devicemanager.CountDownLatchFutureCallback;
+import com.android.tools.idea.devicemanager.Device;
+import com.android.tools.idea.devicemanager.InfoSection;
import com.android.tools.idea.devicemanager.Resolution;
import com.android.tools.idea.devicemanager.virtualtab.VirtualDeviceDetailsPanel.SummarySection;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
import java.nio.file.Paths;
-import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -36,73 +39,98 @@ import org.mockito.Mockito;
@RunWith(JUnit4.class)
public final class VirtualDeviceDetailsPanelTest {
+ private final @NotNull AvdInfo myAvd = Mockito.mock(AvdInfo.class);
+
@Test
- public void newVirtualDeviceDetailsPanel() {
- Map<String, String> properties = new HashMap<>();
- properties.put(AvdManager.AVD_INI_ANDROID_API, "30");
-
- AvdInfo avdInfo = new AvdInfo("Pixel_3_API_30",
- Paths.get("ini/file"),
- Paths.get("data/folder/path"),
- Mockito.mock(SystemImage.class),
- properties,
- AvdStatus.OK);
-
- VirtualDevice device = new VirtualDevice.Builder()
- .setKey(TestVirtualDevices.newKey("Pixel_3_API_30"))
- .setName("Pixel 3 API 30")
- .setTarget("Android 11.0 Google APIs")
+ public void initSummarySection() throws Exception {
+ // Arrange
+ Mockito.when(myAvd.getStatus()).thenReturn(AvdStatus.OK);
+ VirtualDevice virtualDevice = TestVirtualDevices.onlinePixel5Api31(myAvd);
+
+ Device device = new VirtualDevice.Builder()
+ .setKey(TestVirtualDevices.newKey("Pixel_5_API_31"))
+ .setName("Pixel 5 API 31")
+ .setTarget("Android 12.0 Google APIs")
.setCpuArchitecture("x86_64")
- .setAndroidVersion(new AndroidVersion(30))
- .setResolution(new Resolution(1080, 2160))
+ .setResolution(new Resolution(1080, 2340))
.setDensity(440)
- .setAvdInfo(avdInfo)
+ .addAllAbis(List.of("x86_64", "arm64-v8a"))
+ .setAvdInfo(myAvd)
.build();
- VirtualDeviceDetailsPanel panel = new VirtualDeviceDetailsPanel(device, null);
+ AsyncVirtualDeviceDetailsBuilder builder = mock(device);
+ CountDownLatch latch = new CountDownLatch(1);
+
+ // Act
+ VirtualDeviceDetailsPanel panel = new VirtualDeviceDetailsPanel(virtualDevice,
+ builder,
+ section -> newSummarySectionCallback(section, latch));
+
+ // Assert
+ CountDownLatchAssert.await(latch);
+
SummarySection section = panel.getSummarySection();
- assertEquals("30", section.myApiLevelLabel.getText());
- assertEquals("1080 × 2160", section.myResolutionLabel.getText());
- assertEquals("393 × 786", section.myDpLabel.getText());
- assertNull(section.myErrorLabel);
- assertNull(section.mySnapshotLabel);
+ assertEquals("31", section.myApiLevelLabel.getText());
+ assertEquals("1080 × 2340", section.myResolutionLabel.getText());
+ assertEquals("393 × 851", section.myDpLabel.getText());
+ assertEquals("x86_64, arm64-v8a", section.myAbiListLabel.getText());
+ }
+
+ private static @NotNull FutureCallback<@NotNull Device> newSummarySectionCallback(@NotNull SummarySection section,
+ @NotNull CountDownLatch latch) {
+ return new CountDownLatchFutureCallback<>(VirtualDeviceDetailsPanel.newSummarySectionCallback(section), latch);
}
@Test
- public void newVirtualDeviceDetailsPanelError() {
- Map<String, String> properties = new HashMap<>();
- properties.put(AvdManager.AVD_INI_ANDROID_API, "30");
- properties.put(AvdManager.AVD_INI_TAG_ID, "google_apis_playstore");
- properties.put(AvdManager.AVD_INI_TAG_DISPLAY, "Google Play");
- properties.put(AvdManager.AVD_INI_ABI_TYPE, "x86");
-
- AvdInfo avdInfo = new AvdInfo("Pixel_3_API_30",
- Paths.get("ini/file"),
- Paths.get("data/folder/path"),
- Mockito.mock(SystemImage.class),
- properties,
- AvdStatus.ERROR_IMAGE_MISSING);
-
- VirtualDevice device = new VirtualDevice.Builder()
- .setKey(TestVirtualDevices.newKey("Pixel_3_API_30"))
- .setName("Pixel 3 API 30")
- .setTarget("Android 11.0 Google APIs")
- .setCpuArchitecture("x86_64")
- .setAndroidVersion(new AndroidVersion(30))
- .setResolution(new Resolution(1080, 2160))
- .setDensity(440)
- .setAvdInfo(avdInfo)
- .build();
+ public void initSummarySectionStatusDoesntEqualOk() {
+ // Arrange
+ Object configIni = Paths.get(System.getProperty("user.home"), ".android", "avd", "Pixel_5_API_31.avd", "config.ini");
- VirtualDeviceDetailsPanel panel = new VirtualDeviceDetailsPanel(device, null);
- SummarySection section = panel.getSummarySection();
+ Mockito.when(myAvd.getStatus()).thenReturn(AvdStatus.ERROR_PROPERTIES);
+ Mockito.when(myAvd.getErrorMessage()).thenReturn("Failed to parse properties from " + configIni);
+
+ VirtualDevice virtualDevice = TestVirtualDevices.pixel5Api31(myAvd);
+ AsyncVirtualDeviceDetailsBuilder builder = mock(virtualDevice);
+
+ // Act
+ VirtualDeviceDetailsPanel panel = new VirtualDeviceDetailsPanel(virtualDevice,
+ builder,
+ VirtualDeviceDetailsPanel::newSummarySectionCallback);
+
+ // Assert
+ assert panel.getSummarySection().myErrorLabel != null;
+ assertEquals("Failed to parse properties from " + configIni, panel.getSummarySection().myErrorLabel.getText());
+ }
+
+ @Test
+ public void initPropertiesSection() {
+ // Arrange
+ Mockito.when(myAvd.getStatus()).thenReturn(AvdStatus.OK);
+
+ Mockito.when(myAvd.getProperties()).thenReturn(Map.of("fastboot.chosenSnapshotFile", "",
+ "runtime.network.speed", "full",
+ "hw.accelerometer", "yes"));
+
+ VirtualDevice virtualDevice = TestVirtualDevices.pixel5Api31(myAvd);
+ AsyncVirtualDeviceDetailsBuilder builder = mock(virtualDevice);
+
+ // Act
+ VirtualDeviceDetailsPanel panel = new VirtualDeviceDetailsPanel(virtualDevice,
+ builder,
+ VirtualDeviceDetailsPanel::newSummarySectionCallback);
+
+ // Assert
+ InfoSection section = panel.getPropertiesSection();
+
+ assertEquals(List.of("fastboot.chosenSnapshotFile", "runtime.network.speed", "hw.accelerometer"), section.getNames());
+ assertEquals(List.of("", "full", "yes"), section.getValues());
+ }
+
+ private static @NotNull AsyncVirtualDeviceDetailsBuilder mock(@NotNull Device device) {
+ AsyncVirtualDeviceDetailsBuilder builder = Mockito.mock(AsyncVirtualDeviceDetailsBuilder.class);
+ Mockito.when(builder.buildAsync()).thenReturn(Futures.immediateFuture(device));
- assertEquals("30", section.myApiLevelLabel.getText());
- assertEquals("1080 × 2160", section.myResolutionLabel.getText());
- assertEquals("393 × 786", section.myDpLabel.getText());
- assertNotNull(section.myErrorLabel);
- assertEquals("Missing system image for Google Play x86 Pixel_3_API_30.", section.myErrorLabel.getText());
- assertNull(section.mySnapshotLabel);
+ return builder;
}
}