| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """ | 6 """ |
| 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). | 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 # pylint: disable=C0321 | 10 # pylint: disable=C0321 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 def __exit__(self, exc_type, exc_val, exc_tb): | 96 def __exit__(self, exc_type, exc_val, exc_tb): |
| 97 pass | 97 pass |
| 98 | 98 |
| 99 | 99 |
| 100 class _PatchedFunction(object): | 100 class _PatchedFunction(object): |
| 101 def __init__(self, patched=None, mocked=None): | 101 def __init__(self, patched=None, mocked=None): |
| 102 self.patched = patched | 102 self.patched = patched |
| 103 self.mocked = mocked | 103 self.mocked = mocked |
| 104 | 104 |
| 105 | 105 |
| 106 class MockFileSystem(object): | |
| 107 | |
| 108 @staticmethod | |
| 109 def osStatResult( | |
| 110 st_mode=None, st_ino=None, st_dev=None, st_nlink=None, st_uid=None, | |
| 111 st_gid=None, st_size=None, st_atime=None, st_mtime=None, st_ctime=None): | |
| 112 MockOSStatResult = collections.namedtuple('MockOSStatResult', [ | |
| 113 'st_mode', 'st_ino', 'st_dev', 'st_nlink', 'st_uid', 'st_gid', | |
| 114 'st_size', 'st_atime', 'st_mtime', 'st_ctime']) | |
| 115 return MockOSStatResult(st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, | |
| 116 st_size, st_atime, st_mtime, st_ctime) | |
| 117 | |
| 118 MOCKED_FUNCTIONS = [ | |
| 119 ('os.listdir', []), | |
| 120 ('os.path.abspath', ''), | |
| 121 ('os.path.dirname', ''), | |
| 122 ('os.path.exists', False), | |
| 123 ('os.path.getsize', 0), | |
| 124 ('os.path.isdir', False), | |
| 125 ('os.stat', osStatResult.__func__()), | |
| 126 ('os.walk', []), | |
| 127 ] | |
| 128 | |
| 129 def _get(self, mocked, path, default_val): | |
| 130 if self._verbose: | |
| 131 logging.debug('%s(%s)' % (mocked, path)) | |
| 132 return (self.mock_file_info[path][mocked] | |
| 133 if path in self.mock_file_info | |
| 134 else default_val) | |
| 135 | |
| 136 def _patched(self, target, default_val=None): | |
| 137 r = lambda f: self._get(target, f, default_val) | |
| 138 return _PatchedFunction(patched=mock.patch(target, side_effect=r)) | |
| 139 | |
| 140 def __init__(self, verbose=False): | |
| 141 self.mock_file_info = {} | |
| 142 self._patched_functions = [ | |
| 143 self._patched(m, d) for m, d in type(self).MOCKED_FUNCTIONS] | |
| 144 self._verbose = verbose | |
| 145 | |
| 146 def addMockFile(self, path, **kw): | |
| 147 self._addMockThing(path, False, **kw) | |
| 148 | |
| 149 def addMockDirectory(self, path, **kw): | |
| 150 self._addMockThing(path, True, **kw) | |
| 151 | |
| 152 def _addMockThing(self, path, is_dir, listdir=None, size=0, stat=None, | |
| 153 walk=None): | |
| 154 if listdir is None: | |
| 155 listdir = [] | |
| 156 if stat is None: | |
| 157 stat = self.osStatResult() | |
| 158 if walk is None: | |
| 159 walk = [] | |
| 160 | |
| 161 dirname = os.sep.join(path.rstrip(os.sep).split(os.sep)[:-1]) | |
| 162 if dirname and not dirname in self.mock_file_info: | |
| 163 self._addMockThing(dirname, True) | |
| 164 | |
| 165 self.mock_file_info[path] = { | |
| 166 'os.listdir': listdir, | |
| 167 'os.path.abspath': path, | |
| 168 'os.path.dirname': dirname, | |
| 169 'os.path.exists': True, | |
| 170 'os.path.isdir': is_dir, | |
| 171 'os.path.getsize': size, | |
| 172 'os.stat': stat, | |
| 173 'os.walk': walk, | |
| 174 } | |
| 175 | |
| 176 def __enter__(self): | |
| 177 for p in self._patched_functions: | |
| 178 p.mocked = p.patched.__enter__() | |
| 179 | |
| 180 def __exit__(self, exc_type, exc_val, exc_tb): | |
| 181 for p in self._patched_functions: | |
| 182 p.patched.__exit__() | |
| 183 | |
| 184 | |
| 185 class DeviceUtilsOldImplTest(unittest.TestCase): | 106 class DeviceUtilsOldImplTest(unittest.TestCase): |
| 186 | 107 |
| 187 class AndroidCommandsCalls(object): | 108 class AndroidCommandsCalls(object): |
| 188 | 109 |
| 189 def __init__(self, test_case, cmd_ret, comp): | 110 def __init__(self, test_case, cmd_ret, comp): |
| 190 self._cmds = cmd_ret | 111 self._cmds = cmd_ret |
| 191 self._comp = comp | 112 self._comp = comp |
| 192 self._run_command = _PatchedFunction() | 113 self._run_command = _PatchedFunction() |
| 193 self._test_case = test_case | 114 self._test_case = test_case |
| 194 self._total_received = 0 | 115 self._total_received = 0 |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 def testKillAll_sigterm(self): | 651 def testKillAll_sigterm(self): |
| 731 with self.assertCalls( | 652 with self.assertCalls( |
| 732 (self.call.adb.Shell('ps'), | 653 (self.call.adb.Shell('ps'), |
| 733 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' | 654 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' |
| 734 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'), | 655 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'), |
| 735 (self.call.adb.Shell('kill -15 1234'), '')): | 656 (self.call.adb.Shell('kill -15 1234'), '')): |
| 736 self.assertEquals(1, | 657 self.assertEquals(1, |
| 737 self.device.KillAll('some.process', signum=signal.SIGTERM)) | 658 self.device.KillAll('some.process', signum=signal.SIGTERM)) |
| 738 | 659 |
| 739 | 660 |
| 740 class DeviceUtilsStartActivityTest(DeviceUtilsOldImplTest): | 661 class DeviceUtilsStartActivityTest(DeviceUtilsNewImplTest): |
| 741 | 662 |
| 742 def testStartActivity_actionOnly(self): | 663 def testStartActivity_actionOnly(self): |
| 743 test_intent = intent.Intent(action='android.intent.action.VIEW') | 664 test_intent = intent.Intent(action='android.intent.action.VIEW') |
| 744 with self.assertCalls( | 665 with self.assertCall( |
| 745 "adb -s 0123456789abcdef shell 'am start " | 666 self.call.adb.Shell('am start ' |
| 746 "-a android.intent.action.VIEW'", | 667 '-a android.intent.action.VIEW'), |
| 747 'Starting: Intent { act=android.intent.action.VIEW }'): | 668 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 748 self.device.StartActivity(test_intent) | 669 self.device.StartActivity(test_intent) |
| 749 | 670 |
| 750 def testStartActivity_success(self): | 671 def testStartActivity_success(self): |
| 751 test_intent = intent.Intent(action='android.intent.action.VIEW', | 672 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 752 package='this.is.a.test.package', | 673 package='this.is.a.test.package', |
| 753 activity='.Main') | 674 activity='.Main') |
| 754 with self.assertCalls( | 675 with self.assertCall( |
| 755 "adb -s 0123456789abcdef shell 'am start " | 676 self.call.adb.Shell('am start ' |
| 756 "-a android.intent.action.VIEW " | 677 '-a android.intent.action.VIEW ' |
| 757 "-n this.is.a.test.package/.Main'", | 678 '-n this.is.a.test.package/.Main'), |
| 758 'Starting: Intent { act=android.intent.action.VIEW }'): | 679 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 759 self.device.StartActivity(test_intent) | 680 self.device.StartActivity(test_intent) |
| 760 | 681 |
| 761 def testStartActivity_failure(self): | 682 def testStartActivity_failure(self): |
| 762 test_intent = intent.Intent(action='android.intent.action.VIEW', | 683 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 763 package='this.is.a.test.package', | 684 package='this.is.a.test.package', |
| 764 activity='.Main') | 685 activity='.Main') |
| 765 with self.assertCalls( | 686 with self.assertCall( |
| 766 "adb -s 0123456789abcdef shell 'am start " | 687 self.call.adb.Shell('am start ' |
| 767 "-a android.intent.action.VIEW " | 688 '-a android.intent.action.VIEW ' |
| 768 "-n this.is.a.test.package/.Main'", | 689 '-n this.is.a.test.package/.Main'), |
| 769 'Error: Failed to start test activity'): | 690 'Error: Failed to start test activity'): |
| 770 with self.assertRaises(device_errors.CommandFailedError): | 691 with self.assertRaises(device_errors.CommandFailedError): |
| 771 self.device.StartActivity(test_intent) | 692 self.device.StartActivity(test_intent) |
| 772 | 693 |
| 773 def testStartActivity_blocking(self): | 694 def testStartActivity_blocking(self): |
| 774 test_intent = intent.Intent(action='android.intent.action.VIEW', | 695 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 775 package='this.is.a.test.package', | 696 package='this.is.a.test.package', |
| 776 activity='.Main') | 697 activity='.Main') |
| 777 with self.assertCalls( | 698 with self.assertCall( |
| 778 "adb -s 0123456789abcdef shell 'am start " | 699 self.call.adb.Shell('am start ' |
| 779 "-a android.intent.action.VIEW " | 700 '-W ' |
| 780 "-W " | 701 '-a android.intent.action.VIEW ' |
| 781 "-n this.is.a.test.package/.Main'", | 702 '-n this.is.a.test.package/.Main'), |
| 782 'Starting: Intent { act=android.intent.action.VIEW }'): | 703 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 783 self.device.StartActivity(test_intent, blocking=True) | 704 self.device.StartActivity(test_intent, blocking=True) |
| 784 | 705 |
| 785 def testStartActivity_withCategory(self): | 706 def testStartActivity_withCategory(self): |
| 786 test_intent = intent.Intent(action='android.intent.action.VIEW', | 707 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 787 package='this.is.a.test.package', | 708 package='this.is.a.test.package', |
| 788 activity='.Main', | 709 activity='.Main', |
| 789 category='android.intent.category.HOME') | 710 category='android.intent.category.HOME') |
| 790 with self.assertCalls( | 711 with self.assertCall( |
| 791 "adb -s 0123456789abcdef shell 'am start " | 712 self.call.adb.Shell('am start ' |
| 792 "-a android.intent.action.VIEW " | 713 '-a android.intent.action.VIEW ' |
| 793 "-c android.intent.category.HOME " | 714 '-c android.intent.category.HOME ' |
| 794 "-n this.is.a.test.package/.Main'", | 715 '-n this.is.a.test.package/.Main'), |
| 795 'Starting: Intent { act=android.intent.action.VIEW }'): | 716 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 796 self.device.StartActivity(test_intent) | 717 self.device.StartActivity(test_intent) |
| 797 | 718 |
| 798 def testStartActivity_withMultipleCategories(self): | 719 def testStartActivity_withMultipleCategories(self): |
| 799 # The new implementation will start the activity with all provided | |
| 800 # categories. The old one only uses the first category. | |
| 801 test_intent = intent.Intent(action='android.intent.action.VIEW', | 720 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 802 package='this.is.a.test.package', | 721 package='this.is.a.test.package', |
| 803 activity='.Main', | 722 activity='.Main', |
| 804 category=['android.intent.category.HOME', | 723 category=['android.intent.category.HOME', |
| 805 'android.intent.category.BROWSABLE']) | 724 'android.intent.category.BROWSABLE']) |
| 806 with self.assertCalls( | 725 with self.assertCall( |
| 807 "adb -s 0123456789abcdef shell 'am start " | 726 self.call.adb.Shell('am start ' |
| 808 "-a android.intent.action.VIEW " | 727 '-a android.intent.action.VIEW ' |
| 809 "-c android.intent.category.HOME " | 728 '-c android.intent.category.HOME ' |
| 810 "-n this.is.a.test.package/.Main'", | 729 '-c android.intent.category.BROWSABLE ' |
| 730 '-n this.is.a.test.package/.Main'), |
| 811 'Starting: Intent { act=android.intent.action.VIEW }'): | 731 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 812 self.device.StartActivity(test_intent) | 732 self.device.StartActivity(test_intent) |
| 813 | 733 |
| 814 def testStartActivity_withData(self): | 734 def testStartActivity_withData(self): |
| 815 test_intent = intent.Intent(action='android.intent.action.VIEW', | 735 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 816 package='this.is.a.test.package', | 736 package='this.is.a.test.package', |
| 817 activity='.Main', | 737 activity='.Main', |
| 818 data='http://www.google.com/') | 738 data='http://www.google.com/') |
| 819 with self.assertCalls( | 739 with self.assertCall( |
| 820 "adb -s 0123456789abcdef shell 'am start " | 740 self.call.adb.Shell('am start ' |
| 821 "-a android.intent.action.VIEW " | 741 '-a android.intent.action.VIEW ' |
| 822 "-n this.is.a.test.package/.Main " | 742 '-d http://www.google.com/ ' |
| 823 "-d \"http://www.google.com/\"'", | 743 '-n this.is.a.test.package/.Main'), |
| 824 'Starting: Intent { act=android.intent.action.VIEW }'): | 744 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 825 self.device.StartActivity(test_intent) | 745 self.device.StartActivity(test_intent) |
| 826 | 746 |
| 827 def testStartActivity_withStringExtra(self): | 747 def testStartActivity_withStringExtra(self): |
| 828 test_intent = intent.Intent(action='android.intent.action.VIEW', | 748 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 829 package='this.is.a.test.package', | 749 package='this.is.a.test.package', |
| 830 activity='.Main', | 750 activity='.Main', |
| 831 extras={'foo': 'test'}) | 751 extras={'foo': 'test'}) |
| 832 with self.assertCalls( | 752 with self.assertCall( |
| 833 "adb -s 0123456789abcdef shell 'am start " | 753 self.call.adb.Shell('am start ' |
| 834 "-a android.intent.action.VIEW " | 754 '-a android.intent.action.VIEW ' |
| 835 "-n this.is.a.test.package/.Main " | 755 '-n this.is.a.test.package/.Main ' |
| 836 "--es foo test'", | 756 '--es foo test'), |
| 837 'Starting: Intent { act=android.intent.action.VIEW }'): | 757 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 838 self.device.StartActivity(test_intent) | 758 self.device.StartActivity(test_intent) |
| 839 | 759 |
| 840 def testStartActivity_withBoolExtra(self): | 760 def testStartActivity_withBoolExtra(self): |
| 841 test_intent = intent.Intent(action='android.intent.action.VIEW', | 761 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 842 package='this.is.a.test.package', | 762 package='this.is.a.test.package', |
| 843 activity='.Main', | 763 activity='.Main', |
| 844 extras={'foo': True}) | 764 extras={'foo': True}) |
| 845 with self.assertCalls( | 765 with self.assertCall( |
| 846 "adb -s 0123456789abcdef shell 'am start " | 766 self.call.adb.Shell('am start ' |
| 847 "-a android.intent.action.VIEW " | 767 '-a android.intent.action.VIEW ' |
| 848 "-n this.is.a.test.package/.Main " | 768 '-n this.is.a.test.package/.Main ' |
| 849 "--ez foo True'", | 769 '--ez foo True'), |
| 850 'Starting: Intent { act=android.intent.action.VIEW }'): | 770 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 851 self.device.StartActivity(test_intent) | 771 self.device.StartActivity(test_intent) |
| 852 | 772 |
| 853 def testStartActivity_withIntExtra(self): | 773 def testStartActivity_withIntExtra(self): |
| 854 test_intent = intent.Intent(action='android.intent.action.VIEW', | 774 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 855 package='this.is.a.test.package', | 775 package='this.is.a.test.package', |
| 856 activity='.Main', | 776 activity='.Main', |
| 857 extras={'foo': 123}) | 777 extras={'foo': 123}) |
| 858 with self.assertCalls( | 778 with self.assertCall( |
| 859 "adb -s 0123456789abcdef shell 'am start " | 779 self.call.adb.Shell('am start ' |
| 860 "-a android.intent.action.VIEW " | 780 '-a android.intent.action.VIEW ' |
| 861 "-n this.is.a.test.package/.Main " | 781 '-n this.is.a.test.package/.Main ' |
| 862 "--ei foo 123'", | 782 '--ei foo 123'), |
| 863 'Starting: Intent { act=android.intent.action.VIEW }'): | 783 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 864 self.device.StartActivity(test_intent) | 784 self.device.StartActivity(test_intent) |
| 865 | 785 |
| 866 def testStartActivity_withTraceFile(self): | 786 def testStartActivity_withTraceFile(self): |
| 867 test_intent = intent.Intent(action='android.intent.action.VIEW', | 787 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 868 package='this.is.a.test.package', | 788 package='this.is.a.test.package', |
| 869 activity='.Main') | 789 activity='.Main') |
| 870 with self.assertCalls( | 790 with self.assertCall( |
| 871 "adb -s 0123456789abcdef shell 'am start " | 791 self.call.adb.Shell('am start ' |
| 872 "-a android.intent.action.VIEW " | 792 '--start-profiler test_trace_file.out ' |
| 873 "-n this.is.a.test.package/.Main " | 793 '-a android.intent.action.VIEW ' |
| 874 "--start-profiler test_trace_file.out'", | 794 '-n this.is.a.test.package/.Main'), |
| 875 'Starting: Intent { act=android.intent.action.VIEW }'): | 795 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 876 self.device.StartActivity(test_intent, | 796 self.device.StartActivity(test_intent, |
| 877 trace_file_name='test_trace_file.out') | 797 trace_file_name='test_trace_file.out') |
| 878 | 798 |
| 879 def testStartActivity_withForceStop(self): | 799 def testStartActivity_withForceStop(self): |
| 880 test_intent = intent.Intent(action='android.intent.action.VIEW', | 800 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 881 package='this.is.a.test.package', | 801 package='this.is.a.test.package', |
| 882 activity='.Main') | 802 activity='.Main') |
| 883 with self.assertCalls( | 803 with self.assertCall( |
| 884 "adb -s 0123456789abcdef shell 'am start " | 804 self.call.adb.Shell('am start ' |
| 885 "-a android.intent.action.VIEW " | 805 '-S ' |
| 886 "-S " | 806 '-a android.intent.action.VIEW ' |
| 887 "-n this.is.a.test.package/.Main'", | 807 '-n this.is.a.test.package/.Main'), |
| 888 'Starting: Intent { act=android.intent.action.VIEW }'): | 808 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 889 self.device.StartActivity(test_intent, force_stop=True) | 809 self.device.StartActivity(test_intent, force_stop=True) |
| 890 | 810 |
| 891 def testStartActivity_withFlags(self): | 811 def testStartActivity_withFlags(self): |
| 892 test_intent = intent.Intent(action='android.intent.action.VIEW', | 812 test_intent = intent.Intent(action='android.intent.action.VIEW', |
| 893 package='this.is.a.test.package', | 813 package='this.is.a.test.package', |
| 894 activity='.Main', | 814 activity='.Main', |
| 895 flags='0x10000000') | 815 flags='0x10000000') |
| 896 with self.assertCalls( | 816 with self.assertCall( |
| 897 "adb -s 0123456789abcdef shell 'am start " | 817 self.call.adb.Shell('am start ' |
| 898 "-a android.intent.action.VIEW " | 818 '-a android.intent.action.VIEW ' |
| 899 "-n this.is.a.test.package/.Main " | 819 '-n this.is.a.test.package/.Main ' |
| 900 "-f 0x10000000'", | 820 '-f 0x10000000'), |
| 901 'Starting: Intent { act=android.intent.action.VIEW }'): | 821 'Starting: Intent { act=android.intent.action.VIEW }'): |
| 902 self.device.StartActivity(test_intent) | 822 self.device.StartActivity(test_intent) |
| 903 | 823 |
| 904 | 824 |
| 905 class DeviceUtilsStartInstrumentationTest(DeviceUtilsNewImplTest): | 825 class DeviceUtilsStartInstrumentationTest(DeviceUtilsNewImplTest): |
| 906 | 826 |
| 907 def testStartInstrumentation_nothing(self): | 827 def testStartInstrumentation_nothing(self): |
| 908 with self.assertCalls( | 828 with self.assertCalls( |
| 909 self.call.device.RunShellCommand( | 829 self.call.device.RunShellCommand( |
| 910 ['am', 'instrument', 'test.package/.TestInstrumentation'], | 830 ['am', 'instrument', 'test.package/.TestInstrumentation'], |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 with self.assertCall( | 871 with self.assertCall( |
| 952 self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'), | 872 self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'), |
| 953 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 873 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
| 954 self.device.BroadcastIntent(test_intent) | 874 self.device.BroadcastIntent(test_intent) |
| 955 | 875 |
| 956 def testBroadcastIntent_withExtra(self): | 876 def testBroadcastIntent_withExtra(self): |
| 957 test_intent = intent.Intent(action='test.package.with.an.INTENT', | 877 test_intent = intent.Intent(action='test.package.with.an.INTENT', |
| 958 extras={'foo': 'bar value'}) | 878 extras={'foo': 'bar value'}) |
| 959 with self.assertCall( | 879 with self.assertCall( |
| 960 self.call.adb.Shell( | 880 self.call.adb.Shell( |
| 961 "am broadcast -a test.package.with.an.INTENT -e foo 'bar value'"), | 881 "am broadcast -a test.package.with.an.INTENT --es foo 'bar value'"), |
| 962 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 882 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
| 963 self.device.BroadcastIntent(test_intent) | 883 self.device.BroadcastIntent(test_intent) |
| 964 | 884 |
| 965 def testBroadcastIntent_withExtra_noValue(self): | 885 def testBroadcastIntent_withExtra_noValue(self): |
| 966 test_intent = intent.Intent(action='test.package.with.an.INTENT', | 886 test_intent = intent.Intent(action='test.package.with.an.INTENT', |
| 967 extras={'foo': None}) | 887 extras={'foo': None}) |
| 968 with self.assertCall( | 888 with self.assertCall( |
| 969 self.call.adb.Shell( | 889 self.call.adb.Shell( |
| 970 'am broadcast -a test.package.with.an.INTENT -e foo'), | 890 'am broadcast -a test.package.with.an.INTENT --esn foo'), |
| 971 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 891 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
| 972 self.device.BroadcastIntent(test_intent) | 892 self.device.BroadcastIntent(test_intent) |
| 973 | 893 |
| 974 | 894 |
| 975 class DeviceUtilsGoHomeTest(DeviceUtilsOldImplTest): | 895 class DeviceUtilsGoHomeTest(DeviceUtilsOldImplTest): |
| 976 | 896 |
| 977 def testGoHome(self): | 897 def testGoHome(self): |
| 978 with self.assertCalls( | 898 with self.assertCalls( |
| 979 "adb -s 0123456789abcdef shell 'am start " | 899 "adb -s 0123456789abcdef shell 'am start " |
| 980 "-W " | 900 "-W " |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1438 def testGetPids_exactMatch(self): | 1358 def testGetPids_exactMatch(self): |
| 1439 with self.assertCall(self.call.adb.Shell('ps'), | 1359 with self.assertCall(self.call.adb.Shell('ps'), |
| 1440 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' | 1360 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' |
| 1441 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n' | 1361 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n' |
| 1442 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'): | 1362 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'): |
| 1443 self.assertEqual( | 1363 self.assertEqual( |
| 1444 {'not.exact.match': '1000', 'exact.match': '1234'}, | 1364 {'not.exact.match': '1000', 'exact.match': '1234'}, |
| 1445 self.device.GetPids('exact.match')) | 1365 self.device.GetPids('exact.match')) |
| 1446 | 1366 |
| 1447 | 1367 |
| 1448 class DeviceUtilsTakeScreenshotTest(DeviceUtilsOldImplTest): | 1368 class DeviceUtilsTakeScreenshotTest(DeviceUtilsNewImplTest): |
| 1449 | 1369 |
| 1450 def testTakeScreenshot_fileNameProvided(self): | 1370 def testTakeScreenshot_fileNameProvided(self): |
| 1451 mock_fs = MockFileSystem() | 1371 with self.assertCalls( |
| 1452 mock_fs.addMockDirectory('/test/host') | 1372 (mock.call.pylib.utils.device_temp_file.DeviceTempFile( |
| 1453 mock_fs.addMockFile('/test/host/screenshot.png') | 1373 self.adb, suffix='.png'), |
| 1454 | 1374 MockTempFile('/tmp/path/temp-123.png')), |
| 1455 with mock_fs: | 1375 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'), |
| 1456 with self.assertCallsSequence( | 1376 ''), |
| 1457 cmd_ret=[ | 1377 self.call.device.PullFile('/tmp/path/temp-123.png', |
| 1458 (r"adb -s 0123456789abcdef shell 'echo \$EXTERNAL_STORAGE'", | 1378 '/test/host/screenshot.png')): |
| 1459 '/test/external/storage\r\n'), | 1379 self.device.TakeScreenshot('/test/host/screenshot.png') |
| 1460 (r"adb -s 0123456789abcdef shell '/system/bin/screencap -p \S+'", | |
| 1461 ''), | |
| 1462 (r"adb -s 0123456789abcdef shell ls \S+", | |
| 1463 '/test/external/storage/screenshot.png\r\n'), | |
| 1464 (r'adb -s 0123456789abcdef pull \S+ /test/host/screenshot.png', | |
| 1465 '100 B/s (100 B in 1.000s)\r\n'), | |
| 1466 (r"adb -s 0123456789abcdef shell 'rm -f \S+'", '') | |
| 1467 ], | |
| 1468 comp=re.match): | |
| 1469 self.device.TakeScreenshot('/test/host/screenshot.png') | |
| 1470 | 1380 |
| 1471 | 1381 |
| 1472 class DeviceUtilsGetIOStatsTest(DeviceUtilsOldImplTest): | 1382 class DeviceUtilsGetIOStatsTest(DeviceUtilsOldImplTest): |
| 1473 | 1383 |
| 1474 def testGetIOStats(self): | 1384 def testGetIOStats(self): |
| 1475 with self.assertCalls( | 1385 with self.assertCalls( |
| 1476 "adb -s 0123456789abcdef shell 'cat \"/proc/diskstats\" 2>/dev/null'", | 1386 "adb -s 0123456789abcdef shell 'cat \"/proc/diskstats\" 2>/dev/null'", |
| 1477 '179 0 mmcblk0 1 2 3 4 5 6 7 8 9 10 11\r\n'): | 1387 '179 0 mmcblk0 1 2 3 4 5 6 7 8 9 10 11\r\n'): |
| 1478 self.assertEqual( | 1388 self.assertEqual( |
| 1479 { | 1389 { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1541 self.assertTrue( | 1451 self.assertTrue( |
| 1542 isinstance(device, device_utils.DeviceUtils) | 1452 isinstance(device, device_utils.DeviceUtils) |
| 1543 and serial == str(device), | 1453 and serial == str(device), |
| 1544 'Expected a DeviceUtils object with serial %s' % serial) | 1454 'Expected a DeviceUtils object with serial %s' % serial) |
| 1545 | 1455 |
| 1546 | 1456 |
| 1547 if __name__ == '__main__': | 1457 if __name__ == '__main__': |
| 1548 logging.getLogger().setLevel(logging.DEBUG) | 1458 logging.getLogger().setLevel(logging.DEBUG) |
| 1549 unittest.main(verbosity=2) | 1459 unittest.main(verbosity=2) |
| 1550 | 1460 |
| OLD | NEW |