Handle \r\n newlines. (#581)
diff --git a/mobly/controllers/android_device_lib/adb.py b/mobly/controllers/android_device_lib/adb.py
index de20822..81e8a46 100644
--- a/mobly/controllers/android_device_lib/adb.py
+++ b/mobly/controllers/android_device_lib/adb.py
@@ -286,7 +286,7 @@
Returns:
dict, name-value pairs of the properties.
"""
- output = output.decode('utf-8', errors='ignore')
+ output = output.decode('utf-8', errors='ignore').replace('\r\n', '\n')
results = {}
for line in output.split(']\n'):
if not line:
diff --git a/tests/mobly/controllers/android_device_lib/adb_test.py b/tests/mobly/controllers/android_device_lib/adb_test.py
index 9fda55d..25ebde9 100755
--- a/tests/mobly/controllers/android_device_lib/adb_test.py
+++ b/tests/mobly/controllers/android_device_lib/adb_test.py
@@ -496,6 +496,18 @@
}
self.assertEqual(parsed_props, expected_output)
+ def test__parse_getprop_output_special_line_separator(self):
+ mock_adb_output = (
+ b'[selinux.restorecon_recursive][/data/misc_ce/10]\r\n' # Malformat
+ b'[persist.sys.boot.reason]: [reboot,adb,1558549857]\r\n'
+ b'[persist.something]: [haha]\r\n')
+ parsed_props = adb.AdbProxy()._parse_getprop_output(mock_adb_output)
+ expected_output = {
+ 'persist.sys.boot.reason': 'reboot,adb,1558549857',
+ 'persist.something': 'haha'
+ }
+ self.assertEqual(parsed_props, expected_output)
+
def test_getprops(self):
with mock.patch.object(adb.AdbProxy, '_exec_cmd') as mock_exec_cmd:
mock_exec_cmd.return_value = (