##// END OF EJS Templates
update test case for writable folder
Bibo Hao -
Show More
@@ -1,200 +1,204 b''
1 1 import errno
2 2 import os
3 3 import shutil
4 4 import sys
5 5 import tempfile
6 6 import warnings
7 7 from unittest.mock import patch
8 8
9 9 import nose.tools as nt
10 10 from testpath import modified_env, assert_isdir, assert_isfile
11 11
12 12 from IPython import paths
13 13 from IPython.testing.decorators import skip_win32
14 14 from IPython.utils.tempdir import TemporaryDirectory
15 15
16 16 TMP_TEST_DIR = os.path.realpath(tempfile.mkdtemp())
17 17 HOME_TEST_DIR = os.path.join(TMP_TEST_DIR, "home_test_dir")
18 18 XDG_TEST_DIR = os.path.join(HOME_TEST_DIR, "xdg_test_dir")
19 19 XDG_CACHE_DIR = os.path.join(HOME_TEST_DIR, "xdg_cache_dir")
20 20 IP_TEST_DIR = os.path.join(HOME_TEST_DIR,'.ipython')
21 21
22 22 def setup_module():
23 23 """Setup testenvironment for the module:
24 24
25 25 - Adds dummy home dir tree
26 26 """
27 27 # Do not mask exceptions here. In particular, catching WindowsError is a
28 28 # problem because that exception is only defined on Windows...
29 29 os.makedirs(IP_TEST_DIR)
30 30 os.makedirs(os.path.join(XDG_TEST_DIR, 'ipython'))
31 31 os.makedirs(os.path.join(XDG_CACHE_DIR, 'ipython'))
32 32
33 33
34 34 def teardown_module():
35 35 """Teardown testenvironment for the module:
36 36
37 37 - Remove dummy home dir tree
38 38 """
39 39 # Note: we remove the parent test dir, which is the root of all test
40 40 # subdirs we may have created. Use shutil instead of os.removedirs, so
41 41 # that non-empty directories are all recursively removed.
42 42 shutil.rmtree(TMP_TEST_DIR)
43 43
44 44 def patch_get_home_dir(dirpath):
45 45 return patch.object(paths, 'get_home_dir', return_value=dirpath)
46 46
47 47
48 48 def test_get_ipython_dir_1():
49 49 """test_get_ipython_dir_1, Testcase to see if we can call get_ipython_dir without Exceptions."""
50 50 env_ipdir = os.path.join("someplace", ".ipython")
51 51 with patch.object(paths, '_writable_dir', return_value=True), \
52 52 modified_env({'IPYTHONDIR': env_ipdir}):
53 53 ipdir = paths.get_ipython_dir()
54 54
55 55 nt.assert_equal(ipdir, env_ipdir)
56 56
57 57 def test_get_ipython_dir_2():
58 58 """test_get_ipython_dir_2, Testcase to see if we can call get_ipython_dir without Exceptions."""
59 59 with patch_get_home_dir('someplace'), \
60 60 patch.object(paths, 'get_xdg_dir', return_value=None), \
61 61 patch.object(paths, '_writable_dir', return_value=True), \
62 62 patch('os.name', "posix"), \
63 63 modified_env({'IPYTHON_DIR': None,
64 64 'IPYTHONDIR': None,
65 65 'XDG_CONFIG_HOME': None
66 66 }):
67 67 ipdir = paths.get_ipython_dir()
68 68
69 69 nt.assert_equal(ipdir, os.path.join("someplace", ".ipython"))
70 70
71 71 def test_get_ipython_dir_3():
72 72 """test_get_ipython_dir_3, move XDG if defined, and .ipython doesn't exist."""
73 73 tmphome = TemporaryDirectory()
74 74 try:
75 75 with patch_get_home_dir(tmphome.name), \
76 76 patch('os.name', 'posix'), \
77 77 modified_env({
78 78 'IPYTHON_DIR': None,
79 79 'IPYTHONDIR': None,
80 80 'XDG_CONFIG_HOME': XDG_TEST_DIR,
81 81 }), warnings.catch_warnings(record=True) as w:
82 82 ipdir = paths.get_ipython_dir()
83 83
84 84 nt.assert_equal(ipdir, os.path.join(tmphome.name, ".ipython"))
85 85 if sys.platform != 'darwin':
86 86 nt.assert_equal(len(w), 1)
87 87 nt.assert_in('Moving', str(w[0]))
88 88 finally:
89 89 tmphome.cleanup()
90 90
91 91 def test_get_ipython_dir_4():
92 92 """test_get_ipython_dir_4, warn if XDG and home both exist."""
93 93 with patch_get_home_dir(HOME_TEST_DIR), \
94 94 patch('os.name', 'posix'):
95 95 try:
96 96 os.mkdir(os.path.join(XDG_TEST_DIR, 'ipython'))
97 97 except OSError as e:
98 98 if e.errno != errno.EEXIST:
99 99 raise
100 100
101 101
102 102 with modified_env({
103 103 'IPYTHON_DIR': None,
104 104 'IPYTHONDIR': None,
105 105 'XDG_CONFIG_HOME': XDG_TEST_DIR,
106 106 }), warnings.catch_warnings(record=True) as w:
107 107 ipdir = paths.get_ipython_dir()
108 108
109 109 nt.assert_equal(ipdir, os.path.join(HOME_TEST_DIR, ".ipython"))
110 110 if sys.platform != 'darwin':
111 111 nt.assert_equal(len(w), 1)
112 112 nt.assert_in('Ignoring', str(w[0]))
113 113
114 114 def test_get_ipython_dir_5():
115 115 """test_get_ipython_dir_5, use .ipython if exists and XDG defined, but doesn't exist."""
116 116 with patch_get_home_dir(HOME_TEST_DIR), \
117 117 patch('os.name', 'posix'):
118 118 try:
119 119 os.rmdir(os.path.join(XDG_TEST_DIR, 'ipython'))
120 120 except OSError as e:
121 121 if e.errno != errno.ENOENT:
122 122 raise
123 123
124 124 with modified_env({
125 125 'IPYTHON_DIR': None,
126 126 'IPYTHONDIR': None,
127 127 'XDG_CONFIG_HOME': XDG_TEST_DIR,
128 128 }):
129 129 ipdir = paths.get_ipython_dir()
130 130
131 131 nt.assert_equal(ipdir, IP_TEST_DIR)
132 132
133 133 def test_get_ipython_dir_6():
134 134 """test_get_ipython_dir_6, use home over XDG if defined and neither exist."""
135 135 xdg = os.path.join(HOME_TEST_DIR, 'somexdg')
136 136 os.mkdir(xdg)
137 137 shutil.rmtree(os.path.join(HOME_TEST_DIR, '.ipython'))
138 138 print(paths._writable_dir)
139 139 with patch_get_home_dir(HOME_TEST_DIR), \
140 140 patch.object(paths, 'get_xdg_dir', return_value=xdg), \
141 141 patch('os.name', 'posix'), \
142 142 modified_env({
143 143 'IPYTHON_DIR': None,
144 144 'IPYTHONDIR': None,
145 145 'XDG_CONFIG_HOME': None,
146 146 }), warnings.catch_warnings(record=True) as w:
147 147 ipdir = paths.get_ipython_dir()
148 148
149 149 nt.assert_equal(ipdir, os.path.join(HOME_TEST_DIR, '.ipython'))
150 150 nt.assert_equal(len(w), 0)
151 151
152 152 def test_get_ipython_dir_7():
153 153 """test_get_ipython_dir_7, test home directory expansion on IPYTHONDIR"""
154 154 home_dir = os.path.normpath(os.path.expanduser('~'))
155 155 with modified_env({'IPYTHONDIR': os.path.join('~', 'somewhere')}), \
156 156 patch.object(paths, '_writable_dir', return_value=True):
157 157 ipdir = paths.get_ipython_dir()
158 158 nt.assert_equal(ipdir, os.path.join(home_dir, 'somewhere'))
159 159
160 160 @skip_win32
161 161 def test_get_ipython_dir_8():
162 162 """test_get_ipython_dir_8, test / home directory"""
163 if not os.path.isdir('/') or not os.access('/', os.W_OK):
164 # test only when HOME directory actually writable
165 return
166
163 167 with patch.object(paths, '_writable_dir', lambda path: bool(path)), \
164 168 patch.object(paths, 'get_xdg_dir', return_value=None), \
165 169 modified_env({
166 170 'IPYTHON_DIR': None,
167 171 'IPYTHONDIR': None,
168 172 'HOME': '/',
169 173 }):
170 174 nt.assert_equal(paths.get_ipython_dir(), '/.ipython')
171 175
172 176
173 177 def test_get_ipython_cache_dir():
174 178 with modified_env({'HOME': HOME_TEST_DIR}):
175 179 if os.name == 'posix' and sys.platform != 'darwin':
176 180 # test default
177 181 os.makedirs(os.path.join(HOME_TEST_DIR, ".cache"))
178 182 with modified_env({'XDG_CACHE_HOME': None}):
179 183 ipdir = paths.get_ipython_cache_dir()
180 184 nt.assert_equal(os.path.join(HOME_TEST_DIR, ".cache", "ipython"),
181 185 ipdir)
182 186 assert_isdir(ipdir)
183 187
184 188 # test env override
185 189 with modified_env({"XDG_CACHE_HOME": XDG_CACHE_DIR}):
186 190 ipdir = paths.get_ipython_cache_dir()
187 191 assert_isdir(ipdir)
188 192 nt.assert_equal(ipdir, os.path.join(XDG_CACHE_DIR, "ipython"))
189 193 else:
190 194 nt.assert_equal(paths.get_ipython_cache_dir(),
191 195 paths.get_ipython_dir())
192 196
193 197 def test_get_ipython_package_dir():
194 198 ipdir = paths.get_ipython_package_dir()
195 199 assert_isdir(ipdir)
196 200
197 201
198 202 def test_get_ipython_module_path():
199 203 ipapp_path = paths.get_ipython_module_path('IPython.terminal.ipapp')
200 204 assert_isfile(ipapp_path)
General Comments 0
You need to be logged in to leave comments. Login now