import py import sys class TestAutoPath: getauto = "from py.magic import autopath ; autopath = autopath()" def setup_class(cls): cls.root = py.test.ensuretemp(cls.__name__) cls.initdir = cls.root.ensure('pkgdir', dir=1) cls.initdir.ensure('__init__.py') cls.initdir2 = cls.initdir.ensure('initdir2', dir=1) cls.initdir2.ensure('__init__.py') def test_import_autoconfigure__file__with_init(self): testpath = self.initdir2 / 'autoconfiguretest.py' d = {'__file__' : str(testpath)} oldsyspath = sys.path[:] try: exec self.getauto in d conf = d['autopath'] assert conf.dirpath() == self.initdir2 assert conf.pkgdir == self.initdir assert str(self.root) in sys.path exec self.getauto in d assert conf is not d['autopath'] finally: sys.path[:] = oldsyspath def test_import_autoconfigure__file__with_py_exts(self): for ext in '.pyc', '.pyo': testpath = self.initdir2 / ('autoconfiguretest' + ext) d = {'__file__' : str(testpath)} oldsyspath = sys.path[:] try: exec self.getauto in d conf = d['autopath'] assert conf == self.initdir2.join('autoconfiguretest.py') assert conf.pkgdir == self.initdir assert str(self.root) in sys.path exec self.getauto in d assert conf is not d['autopath'] finally: sys.path[:] = oldsyspath def test_import_autoconfigure___file__without_init(self): testpath = self.root / 'autoconfiguretest.py' d = {'__file__' : str(testpath)} oldsyspath = sys.path[:] try: exec self.getauto in d conf = d['autopath'] assert conf.dirpath() == self.root assert conf.pkgdir == self.root syspath = sys.path[:] assert str(self.root) in syspath exec self.getauto in d assert conf is not d['autopath'] finally: sys.path[:] = oldsyspath def test_import_autoconfigure__nofile(self): p = self.initdir2 / 'autoconfiguretest.py' oldsysarg = sys.argv sys.argv = [str(p)] oldsyspath = sys.path[:] try: d = {} exec self.getauto in d conf = d['autopath'] assert conf.dirpath() == self.initdir2 assert conf.pkgdir == self.initdir syspath = sys.path[:] assert str(self.root) in syspath finally: sys.path[:] = oldsyspath sys.argv = sys.argv def test_import_autoconfigure__nofile_interactive(self): oldsysarg = sys.argv sys.argv = [''] oldsyspath = sys.path[:] try: py.test.raises(ValueError,''' d = {} exec self.getauto in d ''') finally: sys.path[:] = oldsyspath sys.argv = sys.argv