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 |