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

Unified Diff: Tools/Scripts/webkitpy/thirdparty/coverage/fullcoverage/encodings.py

Issue 18418010: Check in the thirdparty libs needed for webkitpy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 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/Scripts/webkitpy/thirdparty/coverage/fullcoverage/encodings.py
diff --git a/Tools/Scripts/webkitpy/thirdparty/coverage/fullcoverage/encodings.py b/Tools/Scripts/webkitpy/thirdparty/coverage/fullcoverage/encodings.py
new file mode 100644
index 0000000000000000000000000000000000000000..9409b7d7eff38f9bff7bcffc7b9ed444c225442b
--- /dev/null
+++ b/Tools/Scripts/webkitpy/thirdparty/coverage/fullcoverage/encodings.py
@@ -0,0 +1,50 @@
+"""Imposter encodings module that installs a coverage-style tracer.
+
+This is NOT the encodings module; it is an imposter that sets up tracing
+instrumentation and then replaces itself with the real encodings module.
+
+If the directory that holds this file is placed first in the PYTHONPATH when
+using "coverage" to run Python's tests, then this file will become the very
+first module imported by the internals of Python 3. It installs a
+coverage-compatible trace function that can watch Standard Library modules
+execute from the very earliest stages of Python's own boot process. This fixes
+a problem with coverage - that it starts too late to trace the coverage of many
+of the most fundamental modules in the Standard Library.
+
+"""
+
+import sys
+
+class FullCoverageTracer(object):
+ def __init__(self):
+ # `traces` is a list of trace events. Frames are tricky: the same
+ # frame object is used for a whole scope, with new line numbers
+ # written into it. So in one scope, all the frame objects are the
+ # same object, and will eventually all will point to the last line
+ # executed. So we keep the line numbers alongside the frames.
+ # The list looks like:
+ #
+ # traces = [
+ # ((frame, event, arg), lineno), ...
+ # ]
+ #
+ self.traces = []
+
+ def fullcoverage_trace(self, *args):
+ frame, event, arg = args
+ self.traces.append((args, frame.f_lineno))
+ return self.fullcoverage_trace
+
+sys.settrace(FullCoverageTracer().fullcoverage_trace)
+
+# Finally, remove our own directory from sys.path; remove ourselves from
+# sys.modules; and re-import "encodings", which will be the real package
+# this time. Note that the delete from sys.modules dictionary has to
+# happen last, since all of the symbols in this module will become None
+# at that exact moment, including "sys".
+
+parentdirs = [ d for d in sys.path if __file__.startswith(d) ]
+parentdirs.sort(key=len)
+sys.path.remove(parentdirs[-1])
+del sys.modules['encodings']
+import encodings
« no previous file with comments | « Tools/Scripts/webkitpy/thirdparty/coverage/files.py ('k') | Tools/Scripts/webkitpy/thirdparty/coverage/html.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698