Index: build/android/pylib/android_commands_unittest.py |
diff --git a/build/android/pylib/android_commands_unittest.py b/build/android/pylib/android_commands_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..21c34f93663f9e6826562cdc362b84cdfee7f81a |
--- /dev/null |
+++ b/build/android/pylib/android_commands_unittest.py |
@@ -0,0 +1,191 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import os |
+import shutil |
+import sys |
+import unittest |
+ |
+sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir)) |
+ |
+from pylib import android_commands |
+ |
+# pylint: disable=W0212,W0702 |
+ |
+class TestDeviceTempFile(unittest.TestCase): |
+ def setUp(self): |
+ if not os.getenv('BUILDTYPE'): |
+ os.environ['BUILDTYPE'] = 'Debug' |
+ |
+ devices = android_commands.GetAttachedDevices() |
+ self.assertGreater(len(devices), 0, 'No device attached!') |
+ self.ac = android_commands.AndroidCommands(device=devices[0]) |
+ |
+ def testTempFileDeleted(self): |
+ """Tests that DeviceTempFile deletes files when closed.""" |
+ temp_file = android_commands.DeviceTempFile(self.ac) |
+ self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
+ self.ac.SetFileContents(temp_file.name, "contents") |
+ self.assertTrue(self.ac.FileExistsOnDevice(temp_file.name)) |
+ temp_file.close() |
+ self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
+ |
+ with android_commands.DeviceTempFile(self.ac) as with_temp_file: |
+ self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
+ self.ac.SetFileContents(with_temp_file.name, "contents") |
+ self.assertTrue(self.ac.FileExistsOnDevice(with_temp_file.name)) |
+ |
+ self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
+ |
+ def testTempFileNotWritten(self): |
+ """Tests that device temp files work successfully even if not written to.""" |
+ temp_file = android_commands.DeviceTempFile(self.ac) |
+ temp_file.close() |
+ self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
+ |
+ with android_commands.DeviceTempFile(self.ac) as with_temp_file: |
+ pass |
+ self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
+ |
+ def testNaming(self): |
+ """Tests that returned filenames are as requested.""" |
+ temp_file = android_commands.DeviceTempFile(self.ac, prefix="cat") |
+ self.assertTrue(os.path.basename(temp_file.name).startswith("cat")) |
+ |
+ temp_file = android_commands.DeviceTempFile(self.ac, suffix="dog") |
+ self.assertTrue(temp_file.name.endswith("dog")) |
+ |
+ temp_file = android_commands.DeviceTempFile( |
+ self.ac, prefix="cat", suffix="dog") |
+ self.assertTrue(os.path.basename(temp_file.name).startswith("cat")) |
+ self.assertTrue(temp_file.name.endswith("dog")) |
+ |
+ |
+class TestGetFilesChanged(unittest.TestCase): |
+ |
+ def setUp(self): |
+ if not os.getenv('BUILDTYPE'): |
+ os.environ['BUILDTYPE'] = 'Debug' |
+ |
+ devices = android_commands.GetAttachedDevices() |
+ self.assertGreater(len(devices), 0, 'No device attached!') |
+ self.ac = android_commands.AndroidCommands(device=devices[0]) |
+ self.host_data_dir = os.path.realpath('test_push_data') |
+ self.device_data_dir = '%s/test_push_data' % ( |
+ self.ac.RunShellCommand('realpath %s' % |
+ self.ac.GetExternalStorage())[0]) |
+ |
+ os.mkdir(self.host_data_dir) |
+ for i in xrange(1, 10): |
+ with open('%s/%d.txt' % (self.host_data_dir, i), 'w') as f: |
+ f.write('file #%d' % i) |
+ |
+ self.ac.RunShellCommand('mkdir %s' % self.device_data_dir) |
+ |
+ def testGetFilesChangedAllNeeded(self): |
+ """ Tests GetFilesChanged when none of the files are on the device. |
+ """ |
+ expected = [('%s/%d.txt' % (self.host_data_dir, i), |
+ '%s/%d.txt' % (self.device_data_dir, i)) |
+ for i in xrange(1, 10)] |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedSomeIdentical(self): |
+ """ Tests GetFilesChanged when some of the files are on the device. |
+ """ |
+ for i in xrange(1, 5): |
+ self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
+ self.device_data_dir) |
+ expected = [('%s/%d.txt' % (self.host_data_dir, i), |
+ '%s/%d.txt' % (self.device_data_dir, i)) |
+ for i in xrange(5, 10)] |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedAllIdentical(self): |
+ """ Tests GetFilesChanged when all of the files are on the device. |
+ """ |
+ for i in xrange(1, 10): |
+ self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
+ self.device_data_dir) |
+ expected = [] |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedRename(self): |
+ """ Tests GetFilesChanged when one of the files has been renamed. |
+ |
+ This tests both with and without the ignore_filenames flag set. |
+ """ |
+ for i in xrange(5, 10): |
+ self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
+ self.device_data_dir) |
+ os.rename('%s/5.txt' % (self.host_data_dir), |
+ '%s/99.txt' % (self.host_data_dir)) |
+ |
+ expected = [('%s/%d.txt' % (self.host_data_dir, i), |
+ '%s/%d.txt' % (self.device_data_dir, i)) |
+ for i in xrange(1, 5)] |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir, |
+ ignore_filenames=True) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ expected.append(('%s/99.txt' % self.host_data_dir, |
+ '%s/99.txt' % self.device_data_dir)) |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedCopy(self): |
+ """ Tests GetFilesChanged when one of the files has been copied. |
+ |
+ This tests both with and without the ignore_filenames flag set. |
+ """ |
+ for i in xrange(5, 10): |
+ self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
+ self.device_data_dir) |
+ shutil.copy('%s/5.txt' % self.host_data_dir, |
+ '%s/99.txt' % self.host_data_dir) |
+ |
+ expected = [('%s/%d.txt' % (self.host_data_dir, i), |
+ '%s/%d.txt' % (self.device_data_dir, i)) |
+ for i in xrange(1, 5)] |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir, |
+ ignore_filenames=True) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ expected.append(('%s/99.txt' % self.host_data_dir, |
+ '%s/99.txt' % self.device_data_dir)) |
+ actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedIndividual(self): |
+ """ Tests GetFilesChanged when provided one file. |
+ """ |
+ expected = [('%s/1.txt' % self.host_data_dir, |
+ '%s/1.txt' % self.device_data_dir)] |
+ actual = self.ac.GetFilesChanged('%s/1.txt' % self.host_data_dir, |
+ '%s/1.txt' % self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def testGetFilesChangedFileToDirectory(self): |
+ """ Tests GetFilesChanged when provided a file from the host and a |
+ directory on the device. |
+ """ |
+ expected = [('%s/1.txt' % self.host_data_dir, |
+ '%s' % self.device_data_dir)] |
+ actual = self.ac.GetFilesChanged('%s/1.txt' % self.host_data_dir, |
+ '%s' % self.device_data_dir) |
+ self.assertSequenceEqual(expected, actual) |
+ |
+ def tearDown(self): |
+ try: |
+ shutil.rmtree(self.host_data_dir) |
+ self.ac.RunShellCommand('rm -rf %s' % self.device_data_dir) |
+ except: |
+ pass |
+ |
+if __name__ == '__main__': |
+ unittest.main() |
+ |