Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Unified Diff: tools/telemetry/third_party/coverage/lab/branches.py

Issue 1366913004: Add coverage Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/coverage/lab/branches.py
diff --git a/tools/telemetry/third_party/coverage/lab/branches.py b/tools/telemetry/third_party/coverage/lab/branches.py
new file mode 100644
index 0000000000000000000000000000000000000000..275eef4a1b0c9b9a26d3bb9b86484de77ae7aec9
--- /dev/null
+++ b/tools/telemetry/third_party/coverage/lab/branches.py
@@ -0,0 +1,81 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+
+# Demonstrate some issues with coverage.py branch testing.
+
+def my_function(x):
+ """This isn't real code, just snippets..."""
+
+ # An infinite loop is structurally still a branch: it can next execute the
+ # first line of the loop, or the first line after the loop. But
+ # "while True" will never jump to the line after the loop, so the line
+ # is shown as a partial branch:
+
+ i = 0
+ while True:
+ print "In while True"
+ if i > 0:
+ break
+ i += 1
+ print "Left the True loop"
+
+ # Notice that "while 1" also has this problem. Even though the compiler
+ # knows there's no computation at the top of the loop, it's still expressed
+ # in byte code as a branch with two possibilities.
+
+ i = 0
+ while 1:
+ print "In while 1"
+ if i > 0:
+ break
+ i += 1
+ print "Left the 1 loop"
+
+ # Coverage.py lets developers exclude lines that they know will not be
+ # executed. So far, the branch coverage doesn't use all that information
+ # when deciding which lines are partially executed.
+ #
+ # Here, even though the else line is explicitly marked as never executed,
+ # the if line complains that it never branched to the else:
+
+ if x < 1000:
+ # This branch is always taken
+ print "x is reasonable"
+ else: # pragma: nocover
+ print "this never happens"
+
+ # try-except structures are complex branches. An except clause with a
+ # type is a three-way branch: there could be no exception, there could be
+ # a matching exception, and there could be a non-matching exception.
+ #
+ # Here we run the code twice: once with no exception, and once with a
+ # matching exception. The "except" line is marked as partial because we
+ # never executed its third case: a non-matching exception.
+
+ for y in (1, 2):
+ try:
+ if y % 2:
+ raise ValueError("y is odd!")
+ except ValueError:
+ print "y must have been odd"
+ print "done with y"
+ print "done with 1, 2"
+
+ # Another except clause, but this time all three cases are executed. No
+ # partial lines are shown:
+
+ for y in (0, 1, 2):
+ try:
+ if y % 2:
+ raise ValueError("y is odd!")
+ if y == 0:
+ raise Exception("zero!")
+ except ValueError:
+ print "y must have been odd"
+ except:
+ print "y is something else"
+ print "done with y"
+ print "done with 0, 1, 2"
+
+
+my_function(1)
« no previous file with comments | « tools/telemetry/third_party/coverage/igor.py ('k') | tools/telemetry/third_party/coverage/lab/cover-plugin.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698