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