blob: 263a8b52df8ffe9f895031229282dec74d1b8f3f [file] [log] [blame]
/*
* Copyright (C) 2012 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.sdklib.devices;
import com.android.dvlib.DeviceSchemaTest;
import com.android.resources.Density;
import com.android.resources.Keyboard;
import com.android.resources.KeyboardState;
import com.android.resources.Navigation;
import com.android.resources.NavigationState;
import com.android.resources.ScreenOrientation;
import com.android.resources.ScreenRatio;
import com.android.resources.ScreenSize;
import com.android.resources.TouchScreen;
import com.android.sdklib.devices.Storage.Unit;
import junit.framework.TestCase;
import org.xml.sax.SAXParseException;
import java.awt.Dimension;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class DeviceParserTest extends TestCase {
public void testValidDevicesMinimal() throws Exception {
InputStream stream = DeviceSchemaTest.class.getResourceAsStream("devices_minimal.xml");
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals("Parsing devices_minimal.xml produces the wrong number of devices",
1, devices.size());
Device device = devices.get(0);
assertEquals("Galaxy Nexus", device.getDisplayName());
assertEquals("Samsung", device.getManufacturer());
// Test Meta information
Meta meta = device.getMeta();
assertFalse(meta.hasIconSixtyFour());
assertFalse(meta.hasIconSixteen());
assertFalse(meta.hasFrame());
// Test Hardware information
Hardware hw = device.getDefaultHardware();
Screen screen = hw.getScreen();
assertEquals(screen.getSize(), ScreenSize.NORMAL);
assertEquals(4.65, screen.getDiagonalLength());
assertEquals(Density.XHIGH, screen.getPixelDensity());
assertEquals(ScreenRatio.LONG, screen.getRatio());
assertEquals(720, screen.getXDimension());
assertEquals(1280, screen.getYDimension());
assertEquals(316.0, screen.getXdpi());
assertEquals(316.0, screen.getYdpi());
assertEquals(Multitouch.JAZZ_HANDS, screen.getMultitouch());
assertEquals(TouchScreen.FINGER, screen.getMechanism());
assertEquals(ScreenType.CAPACITIVE, screen.getScreenType());
Set<Network> networks = hw.getNetworking();
assertTrue(networks.contains(Network.BLUETOOTH));
assertTrue(networks.contains(Network.WIFI));
assertTrue(networks.contains(Network.NFC));
Set<Sensor> sensors = hw.getSensors();
assertTrue(sensors.contains(Sensor.ACCELEROMETER));
assertTrue(sensors.contains(Sensor.BAROMETER));
assertTrue(sensors.contains(Sensor.GYROSCOPE));
assertTrue(sensors.contains(Sensor.COMPASS));
assertTrue(sensors.contains(Sensor.GPS));
assertTrue(sensors.contains(Sensor.PROXIMITY_SENSOR));
assertTrue(hw.hasMic());
assertEquals(2, hw.getCameras().size());
Camera c = hw.getCamera(CameraLocation.FRONT);
assertTrue(c != null);
assert c != null;
assertEquals(c.getLocation(), CameraLocation.FRONT);
assertFalse(c.hasFlash());
assertTrue(c.hasAutofocus());
c = hw.getCamera(CameraLocation.BACK);
assertTrue(c != null);
assert c != null;
assertEquals(c.getLocation(), CameraLocation.BACK);
assertTrue(c.hasFlash());
assertTrue(c.hasAutofocus());
assertEquals(Keyboard.NOKEY, hw.getKeyboard());
assertEquals(Navigation.NONAV, hw.getNav());
assertEquals(new Storage(1, Unit.GiB), hw.getRam());
assertEquals(ButtonType.SOFT, hw.getButtonType());
List<Storage> storage = hw.getInternalStorage();
assertEquals(1, storage.size());
assertEquals(new Storage(16, Unit.GiB), storage.get(0));
storage = hw.getRemovableStorage();
assertEquals(0, storage.size());
assertEquals("OMAP 4460", hw.getCpu());
assertEquals("PowerVR SGX540", hw.getGpu());
Set<Abi> abis = hw.getSupportedAbis();
assertEquals(2, abis.size());
assertTrue(abis.contains(Abi.ARMEABI));
assertTrue(abis.contains(Abi.ARMEABI_V7A));
assertEquals(0, hw.getSupportedUiModes().size());
assertEquals(PowerType.BATTERY, hw.getChargeType());
// Test Software
assertEquals(1, device.getAllSoftware().size());
Software sw = device.getSoftware(15);
assertEquals(15, sw.getMaxSdkLevel());
assertEquals(15, sw.getMinSdkLevel());
assertTrue(sw.hasLiveWallpaperSupport());
assertEquals(12, sw.getBluetoothProfiles().size());
assertTrue(sw.getBluetoothProfiles().contains(BluetoothProfile.A2DP));
assertEquals("2.0", sw.getGlVersion());
assertEquals(29, sw.getGlExtensions().size());
assertTrue(sw.getGlExtensions().contains("GL_OES_depth24"));
// Test States
assertEquals(2, device.getAllStates().size());
State s = device.getDefaultState();
assertEquals("Portrait", s.getName());
assertTrue(s.isDefaultState());
assertEquals("The phone in portrait view", s.getDescription());
assertEquals(ScreenOrientation.PORTRAIT, s.getOrientation());
assertEquals(KeyboardState.SOFT, s.getKeyState());
assertEquals(NavigationState.HIDDEN, s.getNavState());
s = device.getState("Landscape");
assertEquals("Landscape", s.getName());
assertFalse(s.isDefaultState());
assertEquals(ScreenOrientation.LANDSCAPE, s.getOrientation());
// Test tag-id
assertEquals("tag-id", device.getTagId());
// Test boot-properties
assertEquals("{boot.prop.property=boot.prop.value}", device.getBootProps().toString());
} finally {
stream.close();
}
}
public void testValidDevicesFull_v1() throws Exception {
InputStream stream = DeviceSchemaTest.class.getResourceAsStream("devices.xml");
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals("Parsing devices.xml produces the wrong number of devices",
3, devices.size());
Device device0 = devices.get(0);
assertEquals(null, device0.getTagId());
assertEquals("{}", device0.getBootProps().toString());
assertEquals("OMAP 4460", device0.getDefaultHardware().getCpu());
assertEquals("[armeabi, armeabi-v7a]", device0.getDefaultHardware().getSupportedAbis().toString());
Device device1 = devices.get(1);
assertEquals(null, device1.getTagId());
assertEquals("{}", device1.getBootProps().toString());
assertEquals("OMAP 3430", device1.getDefaultHardware().getCpu());
assertEquals("[armeabi, armeabi-v7a]", device1.getDefaultHardware().getSupportedAbis().toString());
Device device2 = devices.get(2);
assertEquals("tag-1", device2.getTagId());
assertEquals("{ro-myservice-port=1234, " +
"ro.RAM.Size=1024 MiB, " +
"ro.build.display.id=sdk-eng 4.3 JB_MR2 774058 test-keys}",
device2.getBootProps().toString());
assertEquals("Snapdragon 800 (MSM8974)", device2.getDefaultHardware().getCpu());
assertEquals("[armeabi, armeabi-v7a]", device2.getDefaultHardware().getSupportedAbis().toString());
} finally {
stream.close();
}
}
public void testValidDevicesFull_v2() throws Exception {
InputStream stream = DeviceSchemaTest.class.getResourceAsStream("devices_v2.xml");
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals("Parsing devices.xml produces the wrong number of devices",
3, devices.size());
Device device0 = devices.get(0);
assertEquals(null, device0.getTagId());
assertEquals("{}", device0.getBootProps().toString());
assertEquals("arm64", device0.getDefaultHardware().getCpu());
assertEquals("[arm64-v8a]", device0.getDefaultHardware().getSupportedAbis().toString());
Device device1 = devices.get(1);
assertEquals("tag-1", device1.getTagId());
assertEquals("{ro-myservice-port=1234, " +
"ro.RAM.Size=1024 MiB, " +
"ro.build.display.id=sdk-eng 4.3 JB_MR2 774058 test-keys}",
device1.getBootProps().toString());
assertEquals("Intel Atom 64", device1.getDefaultHardware().getCpu());
assertEquals("[x86_64]", device1.getDefaultHardware().getSupportedAbis().toString());
Device device2 = devices.get(2);
assertEquals("tag-2", device2.getTagId());
assertEquals("{ro-myservice-port=1234, " +
"ro.RAM.Size=1024 MiB, " +
"ro.build.display.id=sdk-eng 4.3 JB_MR2 774058 test-keys}",
device2.getBootProps().toString());
assertEquals("MIPS32+64", device2.getDefaultHardware().getCpu());
assertEquals("[mips, mips64]", device2.getDefaultHardware().getSupportedAbis().toString());
} finally {
stream.close();
}
}
public void testApiRange() throws Exception {
Map<String, String> replacements = new HashMap<String, String>();
replacements.put("api-level", "1-");
InputStream stream = DeviceSchemaTest.getReplacedStream(replacements);
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals(1, devices.size());
Device device = devices.get(0);
assertTrue(device.getSoftware(1) != null);
assertTrue(device.getSoftware(2) != null);
assertTrue(device.getSoftware(0) == null);
replacements.put("api-level", "-2");
stream = DeviceSchemaTest.getReplacedStream(replacements);
device = DeviceParser.parse(stream).get(0);
assertTrue(device.getSoftware(2) != null);
assertTrue(device.getSoftware(3) == null);
replacements.put("api-level", "1-2");
stream = DeviceSchemaTest.getReplacedStream(replacements);
device = DeviceParser.parse(stream).get(0);
assertTrue(device.getSoftware(0) == null);
assertTrue(device.getSoftware(1) != null);
assertTrue(device.getSoftware(2) != null);
assertTrue(device.getSoftware(3) == null);
replacements.put("api-level", "-");
stream = DeviceSchemaTest.getReplacedStream(replacements);
device = DeviceParser.parse(stream).get(0);
assertTrue(device.getSoftware(0) != null);
assertTrue(device.getSoftware(15) != null);
} finally {
stream.close();
}
}
public void testBadNetworking() throws Exception {
Map<String, String> replacements = new HashMap<String, String>();
replacements.put("networking", "NFD");
InputStream stream = DeviceSchemaTest.getReplacedStream(replacements);
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals(1, devices.size());
assertEquals(0, devices.get(0).getDefaultHardware().getNetworking().size());
fail();
} catch (SAXParseException e) {
assertTrue(e.getMessage().startsWith("cvc-enumeration-valid: Value 'NFD'"));
} finally {
stream.close();
}
}
public void testScreenDimension() throws Exception {
InputStream stream = DeviceSchemaTest.class.getResourceAsStream(
"devices_minimal.xml");
try {
List<Device> devices = DeviceParser.parse(stream);
assertEquals("Parsing devices_minimal.xml produces the wrong number of devices", 1,
devices.size());
Device device = devices.get(0);
assertEquals("Galaxy Nexus", device.getDisplayName());
assertEquals(new Dimension(1280, 720), device.getScreenSize(ScreenOrientation.LANDSCAPE));
assertEquals(new Dimension(720, 1280), device.getScreenSize(ScreenOrientation.PORTRAIT));
} finally {
stream.close();
}
}
}