• Kirill Smelkov's avatar
    golang: Don't keep test programs inside golang/ dir · 6e3b3ff4
    Kirill Smelkov authored
    Python adds dirname of run program to sys.path . This way when
    golang_test_goleaked.py runs it can import modules located under golang/
    just by their name. Until now this was not noticed, but in the next
    patch we are going to add golang.time module and if test program is run
    with golang/ in sys.path just plain `import time` won't import time from
    stdlib and instead import time from golang/ .
    
    Such behaviour can be mitigated by doing `from __future__ import
    absolute_import` and we do that, including in golang_test_goleaked.py
    (see 81dfefa0 "*: __future__ += absolute_imports; Use unified __future__
    everywhere"). However that does not prevent modules - even modules from
    stdlib - who are doing `import time` and not doing future
    absolute_import to import golang's time instead of stdlib. For example
    on PyPy2 threading imports time and then the test breaks:
    
      Traceback (most recent call last):
        File "/home/kirr/src/tools/go/pygolang/.tox/pypy-thread/site-packages/golang/golang_test_goleaked.py", line 24, in <module>
          from golang import go, chan
        File "/home/kirr/src/tools/go/pygolang/.tox/pypy-thread/site-packages/golang/__init__.py", line 38, in <module>
          import inspect, threading, collections, random, sys
        File "/usr/lib/pypy/lib-python/2.7/threading.py", line 15, in <module>
          from time import time as _time, sleep as _sleep
        File "/home/kirr/src/tools/go/pygolang/.tox/pypy-thread/site-packages/golang/time.py", line 30, in <module>
          from golang import go, chan, select, default, nilchan, panic
      ImportError: cannot import name 'go'
    
    -> Move the test program into a directory different from golang/ to
    avoid this trap.
    6e3b3ff4
golang_test.py 16.8 KB