##// END OF EJS Templates
Fake _winreg in tests for non windows platforms
Jorgen Stenarson -
Show More
@@ -1,237 +1,243 b''
1 1 # encoding: utf-8
2 2
3 3 """Tests for genutils.py"""
4 4
5 5 __docformat__ = "restructuredtext en"
6 6
7 7 #-----------------------------------------------------------------------------
8 8 # Copyright (C) 2008 The IPython Development Team
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #-----------------------------------------------------------------------------
13 13
14 14 #-----------------------------------------------------------------------------
15 15 # Imports
16 16 #-----------------------------------------------------------------------------
17 17
18 18 from IPython import genutils
19 19 from IPython.testing.decorators import skipif
20 20 from nose import with_setup
21 21 from nose.tools import raises
22 22
23 23 import os, sys, IPython
24 24 env = os.environ
25 25
26 26 from os.path import join, abspath
27 27
28 28 try:
29 29 import _winreg as wreg
30 30 except ImportError:
31 pass
31 #Fake _winreg module on none windows platforms
32 import new
33 sys.modules["_winreg"]=new.module("_winreg")
34 import _winreg as wreg
35 #Add entries that needs to be stubbed by the testing code
36 (wreg.OpenKey, wreg.QueryValueEx,) = (None, None)
32 37
33 38 skip_if_not_win32 = skipif(sys.platform!='win32',"This test only runs under Windows")
34 39
35 40 def setup_environment():
36 41 global oldstuff, platformstuff
37 42 oldstuff = (env.copy(), os.name, genutils.get_home_dir, IPython.__file__,)
38 43
39 44 if os.name=='nt':
40 45 platformstuff=(wreg.OpenKey, wreg.QueryValueEx,)
41 46
42 47 if 'IPYTHONDIR' in env:
43 48 del env['IPYTHONDIR']
44 49
45 50 def teardown_environment():
46 51 (oldenv, os.name, genutils.get_home_dir, IPython.__file__,) = oldstuff
47 52 for key in env.keys():
48 53 if key not in oldenv:
49 54 del env[key]
50 55 env.update(oldenv)
51 56 if hasattr(sys, 'frozen'):
52 57 del sys.frozen
53 58 if os.name=='nt':
54 59 (wreg.OpenKey, wreg.QueryValueEx,)=platformstuff
55 60
56 61 with_enivronment=with_setup(setup_environment, teardown_environment)
57 62
63
64
65
58 66 @with_enivronment
59 67 def test_get_home_dir_1():
60 68 """Testcase to see if we can call get_home_dir without Exceptions."""
61 69 home_dir = genutils.get_home_dir()
62 70
63 71 @with_enivronment
64 72 def test_get_home_dir_2():
65 73 """Testcase for py2exe logic, un-compressed lib
66 74 """
67 75 sys.frozen=True
68 76
69 77 #fake filename for IPython.__init__
70 78 IPython.__file__=abspath(join(".", "home_test_dir/Lib/IPython/__init__.py"))
71 79
72 80 home_dir = genutils.get_home_dir()
73 81 assert home_dir==abspath(join(".", "home_test_dir"))
74 82
75 83 @with_enivronment
76 84 def test_get_home_dir_3():
77 85 """Testcase for py2exe logic, compressed lib
78 86 """
79 87 sys.frozen=True
80 88 #fake filename for IPython.__init__
81 89 IPython.__file__=abspath(join(".", "home_test_dir/Library.zip/IPython/__init__.py"))
82 90
83 91 home_dir = genutils.get_home_dir()
84 92 assert home_dir==abspath(join(".", "home_test_dir")).lower()
85 93
86 94 @with_enivronment
87 95 def test_get_home_dir_4():
88 96 """Testcase $HOME is set, then use its value as home directory."""
89 97 env["HOME"]=join(".","home_test_dir")
90 98 home_dir = genutils.get_home_dir()
91 99 assert home_dir==env["HOME"]
92 100
93 101 @with_enivronment
94 102 def test_get_home_dir_5():
95 103 """Testcase $HOME is not set, os=='posix'.
96 104 This should fail with HomeDirError"""
97 105
98 106 os.name='posix'
99 107 del os.environ["HOME"]
100 108 try:
101 109 genutils.get_home_dir()
102 110 assert False
103 111 except genutils.HomeDirError:
104 112 pass
105 113
106 114 @with_enivronment
107 115 def test_get_home_dir_6():
108 116 """Testcase $HOME is not set, os=='nt'
109 117 env['HOMEDRIVE'],env['HOMEPATH'] points to path."""
110 118
111 119 os.name='nt'
112 120 del os.environ["HOME"]
113 121 env['HOMEDRIVE'],env['HOMEPATH']=os.path.abspath("."),"home_test_dir"
114 122
115 123 home_dir = genutils.get_home_dir()
116 124 assert home_dir==abspath(join(".", "home_test_dir"))
117 125
118 126 @with_enivronment
119 127 def test_get_home_dir_8():
120 128 """Testcase $HOME is not set, os=='nt'
121 129 env['HOMEDRIVE'],env['HOMEPATH'] do not point to path.
122 130 env['USERPROFILE'] points to path
123 131 """
124 132
125 133 os.name='nt'
126 134 del os.environ["HOME"]
127 135 env['HOMEDRIVE'],env['HOMEPATH']=os.path.abspath("."),"DOES NOT EXIST"
128 136 env["USERPROFILE"]=abspath(join(".","home_test_dir"))
129 137
130 138 home_dir = genutils.get_home_dir()
131 139 assert home_dir==abspath(join(".", "home_test_dir"))
132 140
133
134
135 141 # Should we stub wreg fully so we can run the test on all platforms?
136 142 @skip_if_not_win32
137 143 @with_enivronment
138 144 def test_get_home_dir_9():
139 145 """Testcase $HOME is not set, os=='nt'
140 146 env['HOMEDRIVE'],env['HOMEPATH'], env['USERPROFILE'] missing
141 147 """
142 148 os.name='nt'
143 149 del env["HOME"],env['HOMEDRIVE']
144 150
145 151 #Stub windows registry functions
146 152 def OpenKey(x,y):
147 153 class key:
148 154 def Close(self):
149 155 pass
150 156 return key()
151 157 def QueryValueEx(x,y):
152 158 return [abspath(join(".", "home_test_dir"))]
153 159
154 160 wreg.OpenKey=OpenKey
155 161 wreg.QueryValueEx=QueryValueEx
156 162
157 163 home_dir = genutils.get_home_dir()
158 164 assert home_dir==abspath(join(".", "home_test_dir"))
159 165
160 166
161 167 #
162 168 # Tests for get_ipython_dir
163 169 #
164 170
165 171 @with_enivronment
166 172 def test_get_ipython_dir_1():
167 173 """1 Testcase to see if we can call get_ipython_dir without Exceptions."""
168 174 ipdir = genutils.get_ipython_dir()
169 175
170 176
171 177 @with_enivronment
172 178 def test_get_ipython_dir_2():
173 179 """2 Testcase to see if we can call get_ipython_dir without Exceptions."""
174 180 env['IPYTHONDIR']="someplace/.ipython"
175 181 ipdir = genutils.get_ipython_dir()
176 182 assert ipdir == os.path.abspath("someplace/.ipython")
177 183
178 184
179 185 @with_enivronment
180 186 def test_get_ipython_dir_3():
181 187 """3 Testcase to see if we can call get_ipython_dir without Exceptions."""
182 188 genutils.get_home_dir=lambda : "someplace"
183 189 os.name="posix"
184 190 ipdir = genutils.get_ipython_dir()
185 191 assert ipdir == os.path.abspath(os.path.join("someplace", ".ipython"))
186 192
187 193 @with_enivronment
188 194 def test_get_ipython_dir_4():
189 195 """4 Testcase to see if we can call get_ipython_dir without Exceptions."""
190 196 genutils.get_home_dir=lambda : "someplace"
191 197 os.name="nt"
192 198 ipdir = genutils.get_ipython_dir()
193 199 assert ipdir == os.path.abspath(os.path.join("someplace", "_ipython"))
194 200
195 201
196
197 202 #
198 203 # Tests for get_security_dir
199 204 #
200 205
201 206 @with_enivronment
202 207 def test_get_security_dir():
203 208 """Testcase to see if we can call get_security_dir without Exceptions."""
204 209 sdir = genutils.get_security_dir()
205 210
206 211
207
208
212 #
213 # Tests for popkey
214 #
209 215
210 216 def test_popkey_1():
211 217 dct=dict(a=1, b=2, c=3)
212 218 assert genutils.popkey(dct, "a")==1
213 219 assert dct==dict(b=2, c=3)
214 220 assert genutils.popkey(dct, "b")==2
215 221 assert dct==dict(c=3)
216 222 assert genutils.popkey(dct, "c")==3
217 223 assert dct==dict()
218 224
219 225 @raises(KeyError)
220 226 def test_popkey_2():
221 227 dct=dict(a=1, b=2, c=3)
222 228 genutils.popkey(dct, "d")
223 229
224 230 def test_popkey_3():
225 231 dct=dict(a=1, b=2, c=3)
226 232 assert genutils.popkey(dct, "A", 13)==13
227 233 assert dct==dict(a=1, b=2, c=3)
228 234 assert genutils.popkey(dct, "B", 14)==14
229 235 assert dct==dict(a=1, b=2, c=3)
230 236 assert genutils.popkey(dct, "C", 15)==15
231 237 assert dct==dict(a=1, b=2, c=3)
232 238 assert genutils.popkey(dct, "a")==1
233 239 assert dct==dict(b=2, c=3)
234 240 assert genutils.popkey(dct, "b")==2
235 241 assert dct==dict(c=3)
236 242 assert genutils.popkey(dct, "c")==3
237 243 assert dct==dict()
General Comments 0
You need to be logged in to leave comments. Login now