##// END OF EJS Templates
Start migrating somethings to pytest's monkeypatch (#13572)...
M Bussonnier -
r28851:a0f68142 merge
parent child Browse files
Show More
@@ -75,20 +75,29 b' def teardown_module():'
75 75 shutil.rmtree(TMP_TEST_DIR)
76 76
77 77
78 def setup_environment():
79 """Setup testenvironment for some functions that are tested
80 in this module. In particular this functions stores attributes
81 and other things that we need to stub in some test functions.
82 This needs to be done on a function level and not module level because
83 each testfunction needs a pristine environment.
84 """
78 # Build decorator that uses the setup_environment/setup_environment
79 @pytest.fixture
80 def environment():
85 81 global oldstuff, platformstuff
86 oldstuff = (env.copy(), os.name, sys.platform, path.get_home_dir, IPython.__file__, os.getcwd())
82 oldstuff = (
83 env.copy(),
84 os.name,
85 sys.platform,
86 path.get_home_dir,
87 IPython.__file__,
88 os.getcwd(),
89 )
87 90
88 def teardown_environment():
89 """Restore things that were remembered by the setup_environment function
90 """
91 (oldenv, os.name, sys.platform, path.get_home_dir, IPython.__file__, old_wd) = oldstuff
91 yield
92
93 (
94 oldenv,
95 os.name,
96 sys.platform,
97 path.get_home_dir,
98 IPython.__file__,
99 old_wd,
100 ) = oldstuff
92 101 os.chdir(old_wd)
93 102 reload(path)
94 103
@@ -96,16 +105,7 b' def teardown_environment():'
96 105 if key not in oldenv:
97 106 del env[key]
98 107 env.update(oldenv)
99 if hasattr(sys, 'frozen'):
100 del sys.frozen
101
102
103 # Build decorator that uses the setup_environment/setup_environment
104 @pytest.fixture
105 def environment():
106 setup_environment()
107 yield
108 teardown_environment()
108 assert not hasattr(sys, "frozen")
109 109
110 110
111 111 with_environment = pytest.mark.usefixtures("environment")
@@ -113,11 +113,11 b' with_environment = pytest.mark.usefixtures("environment")'
113 113
114 114 @skip_if_not_win32
115 115 @with_environment
116 def test_get_home_dir_1():
116 def test_get_home_dir_1(monkeypatch):
117 117 """Testcase for py2exe logic, un-compressed lib
118 118 """
119 119 unfrozen = path.get_home_dir()
120 sys.frozen = True
120 monkeypatch.setattr(sys, "frozen", True, raising=False)
121 121
122 122 #fake filename for IPython.__init__
123 123 IPython.__file__ = abspath(join(HOME_TEST_DIR, "Lib/IPython/__init__.py"))
@@ -128,13 +128,15 b' def test_get_home_dir_1():'
128 128
129 129 @skip_if_not_win32
130 130 @with_environment
131 def test_get_home_dir_2():
131 def test_get_home_dir_2(monkeypatch):
132 132 """Testcase for py2exe logic, compressed lib
133 133 """
134 134 unfrozen = path.get_home_dir()
135 sys.frozen = True
136 #fake filename for IPython.__init__
137 IPython.__file__ = abspath(join(HOME_TEST_DIR, "Library.zip/IPython/__init__.py")).lower()
135 monkeypatch.setattr(sys, "frozen", True, raising=False)
136 # fake filename for IPython.__init__
137 IPython.__file__ = abspath(
138 join(HOME_TEST_DIR, "Library.zip/IPython/__init__.py")
139 ).lower()
138 140
139 141 home_dir = path.get_home_dir(True)
140 142 assert home_dir == unfrozen
@@ -160,22 +162,22 b' def test_get_home_dir_4():'
160 162
161 163 @skip_win32
162 164 @with_environment
163 def test_get_home_dir_5():
165 def test_get_home_dir_5(monkeypatch):
164 166 """raise HomeDirError if $HOME is specified, but not a writable dir"""
165 167 env['HOME'] = abspath(HOME_TEST_DIR+'garbage')
166 168 # set os.name = posix, to prevent My Documents fallback on Windows
167 os.name = 'posix'
169 monkeypatch.setattr(os, "name", "posix")
168 170 pytest.raises(path.HomeDirError, path.get_home_dir, True)
169 171
170 172 # Should we stub wreg fully so we can run the test on all platforms?
171 173 @skip_if_not_win32
172 174 @with_environment
173 def test_get_home_dir_8():
175 def test_get_home_dir_8(monkeypatch):
174 176 """Using registry hack for 'My Documents', os=='nt'
175 177
176 178 HOMESHARE, HOMEDRIVE, HOMEPATH, USERPROFILE and others are missing.
177 179 """
178 os.name = 'nt'
180 monkeypatch.setattr(os, "name", "nt")
179 181 # Remove from stub environment all keys that may be set
180 182 for key in ['HOME', 'HOMESHARE', 'HOMEDRIVE', 'HOMEPATH', 'USERPROFILE']:
181 183 env.pop(key, None)
@@ -194,13 +196,12 b' def test_get_home_dir_8():'
194 196 assert home_dir == abspath(HOME_TEST_DIR)
195 197
196 198 @with_environment
197 def test_get_xdg_dir_0():
199 def test_get_xdg_dir_0(monkeypatch):
198 200 """test_get_xdg_dir_0, check xdg_dir"""
199 reload(path)
200 path._writable_dir = lambda path: True
201 path.get_home_dir = lambda : 'somewhere'
202 os.name = "posix"
203 sys.platform = "linux2"
201 monkeypatch.setattr(path, "_writable_dir", lambda path: True)
202 monkeypatch.setattr(path, "get_home_dir", lambda: "somewhere")
203 monkeypatch.setattr(os, "name", "posix")
204 monkeypatch.setattr(sys, "platform", "linux2")
204 205 env.pop('IPYTHON_DIR', None)
205 206 env.pop('IPYTHONDIR', None)
206 207 env.pop('XDG_CONFIG_HOME', None)
@@ -209,44 +210,41 b' def test_get_xdg_dir_0():'
209 210
210 211
211 212 @with_environment
212 def test_get_xdg_dir_1():
213 def test_get_xdg_dir_1(monkeypatch):
213 214 """test_get_xdg_dir_1, check nonexistent xdg_dir"""
214 reload(path)
215 path.get_home_dir = lambda : HOME_TEST_DIR
216 os.name = "posix"
217 sys.platform = "linux2"
218 env.pop('IPYTHON_DIR', None)
219 env.pop('IPYTHONDIR', None)
220 env.pop('XDG_CONFIG_HOME', None)
215 monkeypatch.setattr(path, "get_home_dir", lambda: HOME_TEST_DIR)
216 monkeypatch.setattr(os, "name", "posix")
217 monkeypatch.setattr(sys, "platform", "linux2")
218 env.pop("IPYTHON_DIR", None)
219 env.pop("IPYTHONDIR", None)
220 env.pop("XDG_CONFIG_HOME", None)
221 221 assert path.get_xdg_dir() is None
222 222
223 223 @with_environment
224 def test_get_xdg_dir_2():
224 def test_get_xdg_dir_2(monkeypatch):
225 225 """test_get_xdg_dir_2, check xdg_dir default to ~/.config"""
226 reload(path)
227 path.get_home_dir = lambda : HOME_TEST_DIR
228 os.name = "posix"
229 sys.platform = "linux2"
230 env.pop('IPYTHON_DIR', None)
231 env.pop('IPYTHONDIR', None)
232 env.pop('XDG_CONFIG_HOME', None)
233 cfgdir=os.path.join(path.get_home_dir(), '.config')
226 monkeypatch.setattr(path, "get_home_dir", lambda: HOME_TEST_DIR)
227 monkeypatch.setattr(os, "name", "posix")
228 monkeypatch.setattr(sys, "platform", "linux2")
229 env.pop("IPYTHON_DIR", None)
230 env.pop("IPYTHONDIR", None)
231 env.pop("XDG_CONFIG_HOME", None)
232 cfgdir = os.path.join(path.get_home_dir(), ".config")
234 233 if not os.path.exists(cfgdir):
235 234 os.makedirs(cfgdir)
236 235
237 236 assert path.get_xdg_dir() == cfgdir
238 237
239 238 @with_environment
240 def test_get_xdg_dir_3():
239 def test_get_xdg_dir_3(monkeypatch):
241 240 """test_get_xdg_dir_3, check xdg_dir not used on non-posix systems"""
242 reload(path)
243 path.get_home_dir = lambda : HOME_TEST_DIR
244 os.name = "nt"
245 sys.platform = "win32"
246 env.pop('IPYTHON_DIR', None)
247 env.pop('IPYTHONDIR', None)
248 env.pop('XDG_CONFIG_HOME', None)
249 cfgdir=os.path.join(path.get_home_dir(), '.config')
241 monkeypatch.setattr(path, "get_home_dir", lambda: HOME_TEST_DIR)
242 monkeypatch.setattr(os, "name", "nt")
243 monkeypatch.setattr(sys, "platform", "win32")
244 env.pop("IPYTHON_DIR", None)
245 env.pop("IPYTHONDIR", None)
246 env.pop("XDG_CONFIG_HOME", None)
247 cfgdir = os.path.join(path.get_home_dir(), ".config")
250 248 os.makedirs(cfgdir, exist_ok=True)
251 249
252 250 assert path.get_xdg_dir() is None
@@ -281,31 +279,30 b' def test_get_long_path_name():'
281 279 assert p == "/usr/local"
282 280
283 281
284 class TestRaiseDeprecation(unittest.TestCase):
282 @dec.skip_win32 # can't create not-user-writable dir on win
283 @with_environment
284 def test_not_writable_ipdir():
285 tmpdir = tempfile.mkdtemp()
286 os.name = "posix"
287 env.pop("IPYTHON_DIR", None)
288 env.pop("IPYTHONDIR", None)
289 env.pop("XDG_CONFIG_HOME", None)
290 env["HOME"] = tmpdir
291 ipdir = os.path.join(tmpdir, ".ipython")
292 os.mkdir(ipdir, 0o555)
293 try:
294 open(os.path.join(ipdir, "_foo_"), "w", encoding="utf-8").close()
295 except IOError:
296 pass
297 else:
298 # I can still write to an unwritable dir,
299 # assume I'm root and skip the test
300 pytest.skip("I can't create directories that I can't write to")
301
302 with pytest.warns(UserWarning, match="is not a writable location"):
303 ipdir = paths.get_ipython_dir()
304 env.pop("IPYTHON_DIR", None)
285 305
286 @dec.skip_win32 # can't create not-user-writable dir on win
287 @with_environment
288 def test_not_writable_ipdir(self):
289 tmpdir = tempfile.mkdtemp()
290 os.name = "posix"
291 env.pop('IPYTHON_DIR', None)
292 env.pop('IPYTHONDIR', None)
293 env.pop('XDG_CONFIG_HOME', None)
294 env['HOME'] = tmpdir
295 ipdir = os.path.join(tmpdir, '.ipython')
296 os.mkdir(ipdir, 0o555)
297 try:
298 open(os.path.join(ipdir, "_foo_"), "w", encoding="utf-8").close()
299 except IOError:
300 pass
301 else:
302 # I can still write to an unwritable dir,
303 # assume I'm root and skip the test
304 pytest.skip("I can't create directories that I can't write to")
305
306 with self.assertWarnsRegex(UserWarning, 'is not a writable location'):
307 ipdir = paths.get_ipython_dir()
308 env.pop('IPYTHON_DIR', None)
309 306
310 307 @with_environment
311 308 def test_get_py_filename():
General Comments 0
You need to be logged in to leave comments. Login now