| Index: third_party/coverage-3.6/doc/branch.rst
|
| diff --git a/third_party/coverage-3.6/doc/branch.rst b/third_party/coverage-3.6/doc/branch.rst
|
| deleted file mode 100644
|
| index 13b9dc6de6ec2948df4a22b45e57bc517630954a..0000000000000000000000000000000000000000
|
| --- a/third_party/coverage-3.6/doc/branch.rst
|
| +++ /dev/null
|
| @@ -1,120 +0,0 @@
|
| -.. _branch:
|
| -
|
| -===========================
|
| -Branch coverage measurement
|
| -===========================
|
| -
|
| -:history: 20091127T201300, new for version 3.2
|
| -:history: 20100725T211700, updated for 3.4.
|
| -:history: 20110604T181700, updated for 3.5.
|
| -:history: 20111214T181800, Fix a bug that Guido pointed out.
|
| -
|
| -.. highlight:: python
|
| - :linenothreshold: 5
|
| -
|
| -
|
| -In addition to the usual statement coverage, Coverage.py also supports branch
|
| -coverage measurement. Where a line in your program could jump to more than one
|
| -next line, coverage.py tracks which of those destinations are actually visited,
|
| -and flags lines that haven't visited all of their possible destinations.
|
| -
|
| -For example::
|
| -
|
| - def my_partial_fn(x): # line 1
|
| - if x: # 2
|
| - y = 10 # 3
|
| - return y # 4
|
| -
|
| - my_partial_fn(1)
|
| -
|
| -In this code, line 2 is an ``if`` statement which can go next to either line 3
|
| -or line 4. Statement coverage would show all lines of the function as executed.
|
| -But the if was never evaluated as false, so line 2 never jumps to line 4.
|
| -
|
| -Branch coverage will flag this code as not fully covered because of the missing
|
| -jump from line 2 to line 4. This is known as a partial branch.
|
| -
|
| -
|
| -How to measure branch coverage
|
| -------------------------------
|
| -
|
| -To measure branch coverage, run coverage.py with the ``--branch`` flag::
|
| -
|
| - coverage run --branch myprog.py
|
| -
|
| -When you report on the results with ``coverage report`` or ``coverage html``,
|
| -the percentage of branch possibilities taken will be included in the percentage
|
| -covered total for each file. The coverage percentage for a file is the actual
|
| -executions divided by the execution opportunities. Each line in the file is an
|
| -execution opportunity, as is each branch destination.
|
| -
|
| -The HTML report gives information about which lines had missing branches. Lines
|
| -that were missing some branches are shown in yellow, with an annotation at the
|
| -far right showing branch destination line numbers that were not exercised.
|
| -
|
| -The XML report produced by ``coverage xml`` also includes branch information,
|
| -including separate statement and branch coverage percentages.
|
| -
|
| -
|
| -How it works
|
| -------------
|
| -
|
| -When measuring branches, coverage.py collects pairs of line numbers, a source
|
| -and destination for each transition from one line to another. Static analysis
|
| -of the compiled bytecode provides a list of possible transitions. Comparing
|
| -the measured to the possible indicates missing branches.
|
| -
|
| -The idea of tracking how lines follow each other was from `Titus Brown`__.
|
| -Thanks, Titus!
|
| -
|
| -__ http://ivory.idyll.org/blog
|
| -
|
| -
|
| -Excluding code
|
| ---------------
|
| -
|
| -If you have :ref:`excluded code <excluding>`, a condtional will not be
|
| -counted as a branch if one of its choices is excluded::
|
| -
|
| - def only_one_choice(x):
|
| - if x:
|
| - blah1()
|
| - blah2()
|
| - else: # pragma: no cover
|
| - # x is always true.
|
| - blah3()
|
| -
|
| -Because the ``else`` clause is excluded, the ``if`` only has one possible
|
| -next line, so it isn't considered a branch at all.
|
| -
|
| -
|
| -Structurally partial branches
|
| ------------------------------
|
| -
|
| -Sometimes branching constructs are used in unusual ways that don't actually
|
| -branch. For example::
|
| -
|
| - while True:
|
| - if cond:
|
| - break
|
| - do_something()
|
| -
|
| -Here the while loop will never exit normally, so it doesn't take both of its
|
| -"possible" branches. For some of these constructs, such as "while True:" and
|
| -"if 0:", coverage.py understands what is going on. In these cases, the line
|
| -will not be marked as a partial branch.
|
| -
|
| -But there are many ways in your own code to write intentionally partial
|
| -branches, and you don't want coverage.py pestering you about them. You can
|
| -tell coverage.py that you don't want them flagged by marking them with a
|
| -pragma::
|
| -
|
| - i = 0
|
| - while i < 999999999: # pragma: no branch
|
| - if eventually():
|
| - break
|
| -
|
| -Here the while loop will never complete because the break will always be taken
|
| -at some point. Coverage.py can't work that out on its own, but the
|
| -"no branch" pragma indicates that the branch is known to be partial, and
|
| -the line is not flagged.
|
|
|