diff --git a/src/se/vidstige/jadb/managers/PropertyManager.java b/src/se/vidstige/jadb/managers/PropertyManager.java index 181cee8..d78de7a 100644 --- a/src/se/vidstige/jadb/managers/PropertyManager.java +++ b/src/se/vidstige/jadb/managers/PropertyManager.java @@ -15,6 +15,7 @@ import java.util.regex.Pattern; * A class which works with properties, uses getprop and setprop methods of android shell */ public class PropertyManager { + private final Pattern pattern = Pattern.compile("^\\[([a-zA-Z0-9_.-]*)\\]:.\\[([^\\[\\]]*)\\]"); private final JadbDevice device; public PropertyManager(JadbDevice device) { @@ -22,13 +23,13 @@ public class PropertyManager { } public Map getprop() throws IOException, JadbException { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(device.executeShell("getprop"))); - return parseProp(bufferedReader); + try (BufferedReader bufferedReader = + new BufferedReader(new InputStreamReader(device.executeShell("getprop")))) { + return parseProp(bufferedReader); + } } private Map parseProp(BufferedReader bufferedReader) throws IOException { - final Pattern pattern = Pattern.compile("^\\[([a-zA-Z0-9_.-]*)\\]:.\\[([a-zA-Z0-9_.-]*)\\]"); - HashMap result = new HashMap<>(); String line; diff --git a/test/se/vidstige/jadb/test/unit/PropertyManagerTest.java b/test/se/vidstige/jadb/test/unit/PropertyManagerTest.java index dadf17c..1b59874 100644 --- a/test/se/vidstige/jadb/test/unit/PropertyManagerTest.java +++ b/test/se/vidstige/jadb/test/unit/PropertyManagerTest.java @@ -55,6 +55,38 @@ public class PropertyManagerTest { assertEquals(expected, actual); } + @Test + public void testGetPropsValueHasSpecialCharacters() throws Exception { + /* Some example properties from Nexus 9: + [ro.product.model]: [Nexus 9] + [ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi] + [ro.retaildemo.video_path]: [/data/preloads/demo/retail_demo.mp4] + [ro.url.legal]: [http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html] + [ro.vendor.build.date]: [Tue Nov 1 18:21:23 UTC 2016] + */ + //Arrange + Map expected = new HashMap<>(); + expected.put("ro.product.model", "Nexus 9"); + expected.put("ro.product.cpu.abilist", "arm64-v8a,armeabi-v7a,armeabi"); + expected.put("ro.retaildemo.video_path", "/data/preloads/demo/retail_demo.mp4"); + expected.put("ro.url.legal", "http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html"); + expected.put("ro.vendor.build.date", "Tue Nov 1 18:21:23 UTC 2016"); + + String response = "[ro.product.model]: [Nexus 9]\n" + + "[ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi]\n" + + "[ro.retaildemo.video_path]: [/data/preloads/demo/retail_demo.mp4]\n" + + "[ro.url.legal]: [http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html]\n" + + "[ro.vendor.build.date]: [Tue Nov 1 18:21:23 UTC 2016]"; + + server.expectShell(DEVICE_SERIAL, "getprop").returns(response); + + //Act + Map actual = new PropertyManager(device).getprop(); + + //Assert + assertEquals(expected, actual); + } + @Test public void testGetPropsMalformedIgnoredString() throws Exception { //Arrange