Index: tools/telemetry/third_party/coverage/tests/try_execfile.py |
diff --git a/tools/telemetry/third_party/coverage/tests/try_execfile.py b/tools/telemetry/third_party/coverage/tests/try_execfile.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..70905071ef80644c221dcfabfc8178aaf623668b |
--- /dev/null |
+++ b/tools/telemetry/third_party/coverage/tests/try_execfile.py |
@@ -0,0 +1,84 @@ |
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 |
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt |
+ |
+"""Test file for run_python_file. |
+ |
+This file is executed two ways:: |
+ |
+ $ coverage run try_execfile.py |
+ |
+and:: |
+ |
+ $ python try_execfile.py |
+ |
+The output is compared to see that the program execution context is the same |
+under coverage and under Python. |
+ |
+It is not crucial that the execution be identical, there are some differences |
+that are OK. This program canonicalizes the output to gloss over those |
+differences and get a clean diff. |
+ |
+""" |
+ |
+import json, os, sys |
+ |
+# sys.path varies by execution environments. Coverage.py uses setuptools to |
+# make console scripts, which means pkg_resources is imported. pkg_resources |
+# removes duplicate entries from sys.path. So we do that too, since the extra |
+# entries don't affect the running of the program. |
+ |
+def same_file(p1, p2): |
+ """Determine if `p1` and `p2` refer to the same existing file.""" |
+ if not p1: |
+ return not p2 |
+ if not os.path.exists(p1): |
+ return False |
+ if not os.path.exists(p2): |
+ return False |
+ if hasattr(os.path, "samefile"): |
+ return os.path.samefile(p1, p2) |
+ else: |
+ norm1 = os.path.normcase(os.path.normpath(p1)) |
+ norm2 = os.path.normcase(os.path.normpath(p2)) |
+ return norm1 == norm2 |
+ |
+def without_same_files(filenames): |
+ """Return the list `filenames` with duplicates (by same_file) removed.""" |
+ reduced = [] |
+ for filename in filenames: |
+ if not any(same_file(filename, other) for other in reduced): |
+ reduced.append(filename) |
+ return reduced |
+ |
+cleaned_sys_path = [os.path.normcase(p) for p in without_same_files(sys.path)] |
+ |
+DATA = "xyzzy" |
+ |
+import __main__ |
+ |
+def my_function(a): |
+ """A function to force execution of module-level values.""" |
+ return "my_fn(%r)" % a |
+ |
+FN_VAL = my_function("fooey") |
+ |
+loader = globals().get('__loader__') |
+fullname = getattr(loader, 'fullname', None) or getattr(loader, 'name', None) |
+ |
+globals_to_check = { |
+ '__name__': __name__, |
+ '__file__': __file__, |
+ '__doc__': __doc__, |
+ '__builtins__.has_open': hasattr(__builtins__, 'open'), |
+ '__builtins__.dir': dir(__builtins__), |
+ '__loader__ exists': loader is not None, |
+ '__loader__.fullname': fullname, |
+ '__package__': __package__, |
+ 'DATA': DATA, |
+ 'FN_VAL': FN_VAL, |
+ '__main__.DATA': getattr(__main__, "DATA", "nothing"), |
+ 'argv': sys.argv, |
+ 'path': cleaned_sys_path, |
+} |
+ |
+print(json.dumps(globals_to_check, indent=4, sort_keys=True)) |