| OLD | NEW |
| 1 #!/usr/bin/python2.4 | 1 #!/usr/bin/env python |
| 2 # | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Copyright 2009, Google Inc. | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # All rights reserved. | 4 # found in the LICENSE file. |
| 5 # | |
| 6 # Redistribution and use in source and binary forms, with or without | |
| 7 # modification, are permitted provided that the following conditions are | |
| 8 # met: | |
| 9 # | |
| 10 # * Redistributions of source code must retain the above copyright | |
| 11 # notice, this list of conditions and the following disclaimer. | |
| 12 # * Redistributions in binary form must reproduce the above | |
| 13 # copyright notice, this list of conditions and the following disclaimer | |
| 14 # in the documentation and/or other materials provided with the | |
| 15 # distribution. | |
| 16 # * Neither the name of Google Inc. nor the names of its | |
| 17 # contributors may be used to endorse or promote products derived from | |
| 18 # this software without specific prior written permission. | |
| 19 # | |
| 20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
| 24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
| 25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| 26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
| 27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| 28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| 29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 31 | 5 |
| 32 """Unit tests for Crocodile.""" | 6 """Unit tests for Crocodile.""" |
| 33 | 7 |
| 34 import os | 8 import os |
| 35 import StringIO | 9 import StringIO |
| 36 import unittest | 10 import unittest |
| 37 import croc | 11 import croc |
| 38 | 12 |
| 39 #------------------------------------------------------------------------------ | |
| 40 | |
| 41 | 13 |
| 42 class TestCoverageStats(unittest.TestCase): | 14 class TestCoverageStats(unittest.TestCase): |
| 43 """Tests for croc.CoverageStats.""" | 15 """Tests for croc.CoverageStats.""" |
| 44 | 16 |
| 45 def testAdd(self): | 17 def testAdd(self): |
| 46 """Test Add().""" | 18 """Test Add().""" |
| 47 c = croc.CoverageStats() | 19 c = croc.CoverageStats() |
| 48 | 20 |
| 49 # Initially empty | 21 # Initially empty |
| 50 self.assertEqual(c, {}) | 22 self.assertEqual(c, {}) |
| 51 | 23 |
| 52 # Add items | 24 # Add items |
| 53 c['a'] = 1 | 25 c['a'] = 1 |
| 54 c['b'] = 0 | 26 c['b'] = 0 |
| 55 self.assertEqual(c, {'a': 1, 'b': 0}) | 27 self.assertEqual(c, {'a': 1, 'b': 0}) |
| 56 | 28 |
| 57 # Add dict with non-overlapping items | 29 # Add dict with non-overlapping items |
| 58 c.Add({'c': 5}) | 30 c.Add({'c': 5}) |
| 59 self.assertEqual(c, {'a': 1, 'b': 0, 'c': 5}) | 31 self.assertEqual(c, {'a': 1, 'b': 0, 'c': 5}) |
| 60 | 32 |
| 61 # Add dict with overlapping items | 33 # Add dict with overlapping items |
| 62 c.Add({'a': 4, 'd': 3}) | 34 c.Add({'a': 4, 'd': 3}) |
| 63 self.assertEqual(c, {'a': 5, 'b': 0, 'c': 5, 'd': 3}) | 35 self.assertEqual(c, {'a': 5, 'b': 0, 'c': 5, 'd': 3}) |
| 64 | 36 |
| 65 #------------------------------------------------------------------------------ | |
| 66 | |
| 67 | 37 |
| 68 class TestCoveredFile(unittest.TestCase): | 38 class TestCoveredFile(unittest.TestCase): |
| 69 """Tests for croc.CoveredFile.""" | 39 """Tests for croc.CoveredFile.""" |
| 70 | 40 |
| 71 def setUp(self): | 41 def setUp(self): |
| 72 self.cov_file = croc.CoveredFile('bob.cc', group='source', language='C++') | 42 self.cov_file = croc.CoveredFile('bob.cc', group='source', language='C++') |
| 73 | 43 |
| 74 def testInit(self): | 44 def testInit(self): |
| 75 """Test init.""" | 45 """Test init.""" |
| 76 f = self.cov_file | 46 f = self.cov_file |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 f.UpdateCoverage() | 107 f.UpdateCoverage() |
| 138 self.assertEqual(f.stats, { | 108 self.assertEqual(f.stats, { |
| 139 'lines_executable': 7, | 109 'lines_executable': 7, |
| 140 'lines_instrumented': 4, | 110 'lines_instrumented': 4, |
| 141 'lines_covered': 2, | 111 'lines_covered': 2, |
| 142 'files_executable': 1, | 112 'files_executable': 1, |
| 143 'files_instrumented': 1, | 113 'files_instrumented': 1, |
| 144 'files_covered': 1, | 114 'files_covered': 1, |
| 145 }) | 115 }) |
| 146 | 116 |
| 147 #------------------------------------------------------------------------------ | |
| 148 | |
| 149 | 117 |
| 150 class TestCoveredDir(unittest.TestCase): | 118 class TestCoveredDir(unittest.TestCase): |
| 151 """Tests for croc.CoveredDir.""" | 119 """Tests for croc.CoveredDir.""" |
| 152 | 120 |
| 153 def setUp(self): | 121 def setUp(self): |
| 154 self.cov_dir = croc.CoveredDir('/a/b/c') | 122 self.cov_dir = croc.CoveredDir('/a/b/c') |
| 155 | 123 |
| 156 def testInit(self): | 124 def testInit(self): |
| 157 """Test init.""" | 125 """Test init.""" |
| 158 d = self.cov_dir | 126 d = self.cov_dir |
| (...skipping 27 matching lines...) Expand all Loading... |
| 186 """Test getting tree with subdirs.""" | 154 """Test getting tree with subdirs.""" |
| 187 d1 = self.cov_dir = croc.CoveredDir('/a') | 155 d1 = self.cov_dir = croc.CoveredDir('/a') |
| 188 d2 = self.cov_dir = croc.CoveredDir('/a/b') | 156 d2 = self.cov_dir = croc.CoveredDir('/a/b') |
| 189 d3 = self.cov_dir = croc.CoveredDir('/a/c') | 157 d3 = self.cov_dir = croc.CoveredDir('/a/c') |
| 190 d4 = self.cov_dir = croc.CoveredDir('/a/b/d') | 158 d4 = self.cov_dir = croc.CoveredDir('/a/b/d') |
| 191 d5 = self.cov_dir = croc.CoveredDir('/a/b/e') | 159 d5 = self.cov_dir = croc.CoveredDir('/a/b/e') |
| 192 d1.subdirs = {'/a/b': d2, '/a/c': d3} | 160 d1.subdirs = {'/a/b': d2, '/a/c': d3} |
| 193 d2.subdirs = {'/a/b/d': d4, '/a/b/e': d5} | 161 d2.subdirs = {'/a/b/d': d4, '/a/b/e': d5} |
| 194 self.assertEqual(d1.GetTree(), 'a/\n b/\n d/\n e/\n c/') | 162 self.assertEqual(d1.GetTree(), 'a/\n b/\n d/\n e/\n c/') |
| 195 | 163 |
| 196 #------------------------------------------------------------------------------ | |
| 197 | |
| 198 | 164 |
| 199 class TestCoverage(unittest.TestCase): | 165 class TestCoverage(unittest.TestCase): |
| 200 """Tests for croc.Coverage.""" | 166 """Tests for croc.Coverage.""" |
| 201 | 167 |
| 202 def MockWalk(self, src_dir): | 168 def MockWalk(self, src_dir): |
| 203 """Mock for os.walk(). | 169 """Mock for os.walk(). |
| 204 | 170 |
| 205 Args: | 171 Args: |
| 206 src_dir: Source directory to walk. | 172 src_dir: Source directory to walk. |
| 207 | 173 |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 'files_instrumented': 1, | 746 'files_instrumented': 1, |
| 781 } | 747 } |
| 782 }) | 748 }) |
| 783 | 749 |
| 784 # TODO: test: less important, since these are thin wrappers around other | 750 # TODO: test: less important, since these are thin wrappers around other |
| 785 # tested methods. | 751 # tested methods. |
| 786 # ParseConfig() | 752 # ParseConfig() |
| 787 # ParseLcovFile() | 753 # ParseLcovFile() |
| 788 # PrintTree() | 754 # PrintTree() |
| 789 | 755 |
| 790 #------------------------------------------------------------------------------ | |
| 791 | 756 |
| 792 if __name__ == '__main__': | 757 if __name__ == '__main__': |
| 793 unittest.main() | 758 unittest.main() |
| OLD | NEW |