| #!/usr/bin/env python |
| # |
| # Copyright (C) 2016 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| import os |
| import unittest |
| |
| from vts.utils.python.coverage import arc_summary |
| from vts.utils.python.coverage import block_summary |
| from vts.utils.python.coverage import function_summary |
| |
| |
| class FunctionSummaryTest(unittest.TestCase): |
| """Tests for FunctionSummary of vts.utils.python.coverage. |
| """ |
| |
| def setUp(self): |
| """Creates a function summary and a chain of blocks. |
| |
| Creates an arc between adjacent blocks. All arcs are left with default |
| values (unresolved, count of 0). |
| """ |
| self.n = 10 |
| self.count = 5 |
| self.function_summary = function_summary.FunctionSummary(0, 'test', |
| 'test.c', 0) |
| self.function_summary.blocks = [block_summary.BlockSummary(i, 0) |
| for i in range(self.n)] |
| self.arcs = [] |
| for i in range(1, self.n): |
| arc = arc_summary.ArcSummary(self.function_summary.blocks[i - 1], |
| self.function_summary.blocks[i], 0) |
| self.function_summary.blocks[i - 1].exit_arcs.append(arc) |
| self.function_summary.blocks[i].entry_arcs.append(arc) |
| self.arcs.append(arc) |
| |
| def testResolveChainStart(self): |
| """Tests for correct resolution in a long chain. |
| |
| Test resolution for the case when there is a chain of unresolved arcs |
| after a resolved arc. |
| """ |
| self.arcs[0].resolved = True |
| self.arcs[0].count = self.count |
| |
| self.function_summary.Resolve() |
| for arc in self.arcs: |
| self.assertTrue(arc.resolved) |
| self.assertEqual(self.count, arc.count) |
| self.assertEqual(self.count, arc.src_block.count) |
| self.assertEqual(self.count, arc.dst_block.count) |
| |
| def testResolveChainEnd(self): |
| """Tests for correct resolution in a long chain. |
| |
| Test resolution for the case when there is a chain of unresolved arcs |
| before a resolved arc. |
| """ |
| self.arcs[-1].resolved = True |
| self.arcs[-1].count = self.count |
| |
| self.function_summary.Resolve() |
| for arc in self.arcs: |
| self.assertTrue(arc.resolved) |
| self.assertEqual(self.count, arc.count) |
| self.assertEqual(self.count, arc.src_block.count) |
| self.assertEqual(self.count, arc.dst_block.count) |
| |
| def testResolveFailure(self): |
| """Tests for failure when no progress can be made. |
| |
| Test that Resolve() returns False when there is not enough information |
| to resolve any arcs. |
| """ |
| self.assertFalse(self.function_summary.Resolve()) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |