| 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()
|
| +
|
|
|