diff options
| author | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-14 07:11:57 -0500 |
|---|---|---|
| committer | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-14 07:11:57 -0500 |
| commit | 3435aacb82b1470d9a43aee858ee6db3ee866d56 (patch) | |
| tree | 9fb6519220d36897f28f81165aee6a4d22ea228e /tests/try_execfile.py | |
| parent | 3e61330b672f39ff9ac29ce8fc4aae6a5d997aa0 (diff) | |
| download | python-coveragepy-3435aacb82b1470d9a43aee858ee6db3ee866d56.tar.gz | |
Don't fail because sys.path has duplicate entries. Fixes #337
Diffstat (limited to 'tests/try_execfile.py')
| -rw-r--r-- | tests/try_execfile.py | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/tests/try_execfile.py b/tests/try_execfile.py index 825fdb7..1035dff 100644 --- a/tests/try_execfile.py +++ b/tests/try_execfile.py @@ -1,6 +1,48 @@ -"""Test file for run_python_file.""" +"""Test file for run_python_file. -import os, pprint, sys +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 + return os.path.samefile(p1, p2) + +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" @@ -23,7 +65,7 @@ globals_to_check = { 'FN_VAL': FN_VAL, '__main__.DATA': getattr(__main__, "DATA", "nothing"), 'argv': sys.argv, - 'path': [os.path.normcase(p) for p in sys.path], + 'path': cleaned_sys_path, } -pprint.pprint(globals_to_check) +print(json.dumps(globals_to_check)) |
