| /* |
| * 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(); |
| } |
| } |
| |
| } |