| OLD | NEW |
| (Empty) |
| 1 # Copyright (C) 2012 Google, Inc. | |
| 2 # | |
| 3 # Redistribution and use in source and binary forms, with or without | |
| 4 # modification, are permitted provided that the following conditions | |
| 5 # are met: | |
| 6 # 1. Redistributions of source code must retain the above copyright | |
| 7 # notice, this list of conditions and the following disclaimer. | |
| 8 # 2. Redistributions in binary form must reproduce the above copyright | |
| 9 # notice, this list of conditions and the following disclaimer in the | |
| 10 # documentation and/or other materials provided with the distribution. | |
| 11 # | |
| 12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND | |
| 13 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
| 14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR | |
| 16 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 17 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 18 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 19 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 20 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 21 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 22 | |
| 23 import StringIO | |
| 24 import logging | |
| 25 import sys | |
| 26 import unittest | |
| 27 | |
| 28 from webkitpy.common.system.filesystem import FileSystem | |
| 29 from webkitpy.common.system.executive import Executive | |
| 30 from webkitpy.common.system.outputcapture import OutputCapture | |
| 31 from webkitpy.test.main import Tester | |
| 32 | |
| 33 | |
| 34 STUBS_CLASS = __name__ + ".TestStubs" | |
| 35 | |
| 36 | |
| 37 class TestStubs(unittest.TestCase): | |
| 38 def test_empty(self): | |
| 39 pass | |
| 40 | |
| 41 | |
| 42 class TesterTest(unittest.TestCase): | |
| 43 | |
| 44 def test_no_tests_found(self): | |
| 45 tester = Tester() | |
| 46 errors = StringIO.StringIO() | |
| 47 | |
| 48 # Here we need to remove any existing log handlers so that they | |
| 49 # don't log the messages webkitpy.test while we're testing it. | |
| 50 root_logger = logging.getLogger() | |
| 51 root_handlers = root_logger.handlers | |
| 52 root_logger.handlers = [] | |
| 53 | |
| 54 tester.printer.stream = errors | |
| 55 tester.finder.find_names = lambda args, run_all: [] | |
| 56 oc = OutputCapture() | |
| 57 orig_argv = sys.argv[:] | |
| 58 try: | |
| 59 sys.argv = sys.argv[0:1] | |
| 60 oc.capture_output() | |
| 61 self.assertFalse(tester.run()) | |
| 62 finally: | |
| 63 _, _, logs = oc.restore_output() | |
| 64 root_logger.handlers = root_handlers | |
| 65 sys.argv = orig_argv | |
| 66 | |
| 67 self.assertIn('No tests to run', errors.getvalue()) | |
| 68 self.assertIn('No tests to run', logs) | |
| 69 | |
| 70 def _find_test_names(self, args): | |
| 71 tester = Tester() | |
| 72 tester._options, args = tester._parse_args(args) | |
| 73 return tester._test_names(unittest.TestLoader(), args) | |
| 74 | |
| 75 def test_individual_names_are_not_run_twice(self): | |
| 76 args = [STUBS_CLASS + '.test_empty'] | |
| 77 tests = self._find_test_names(args) | |
| 78 self.assertEqual(tests, args) | |
| 79 | |
| 80 def test_coverage_works(self): | |
| 81 # This is awkward; by design, running test-webkitpy -c will | |
| 82 # create a .coverage file in Tools/Scripts, so we need to be | |
| 83 # careful not to clobber an existing one, and to clean up. | |
| 84 # FIXME: This design needs to change since it means we can't actually | |
| 85 # run this method itself under coverage properly. | |
| 86 filesystem = FileSystem() | |
| 87 executive = Executive() | |
| 88 module_path = filesystem.path_to_module(self.__module__) | |
| 89 script_dir = module_path[0:module_path.find('webkitpy') - 1] | |
| 90 coverage_file = filesystem.join(script_dir, '.coverage') | |
| 91 coverage_file_orig = None | |
| 92 if filesystem.exists(coverage_file): | |
| 93 coverage_file_orig = coverage_file + '.orig' | |
| 94 filesystem.move(coverage_file, coverage_file_orig) | |
| 95 | |
| 96 try: | |
| 97 proc = executive.popen([sys.executable, filesystem.join(script_dir,
'test-webkitpy'), '-c', STUBS_CLASS + '.test_empty'], | |
| 98 stdout=executive.PIPE, stderr=executive.PIPE) | |
| 99 out, _ = proc.communicate() | |
| 100 retcode = proc.returncode | |
| 101 self.assertEqual(retcode, 0) | |
| 102 self.assertIn('Cover', out) | |
| 103 finally: | |
| 104 if coverage_file_orig: | |
| 105 filesystem.move(coverage_file_orig, coverage_file) | |
| 106 elif filesystem.exists(coverage_file): | |
| 107 filesystem.remove(coverage_file) | |
| OLD | NEW |