##// END OF EJS Templates
remove str
Srinivas Reddy Thatiparthy -
Show More
@@ -1,164 +1,163 b''
1 1 # coding: utf-8
2 2 """Tests for profile-related functions.
3 3
4 4 Currently only the startup-dir functionality is tested, but more tests should
5 5 be added for:
6 6
7 7 * ipython profile create
8 8 * ipython profile list
9 9 * ipython profile create --parallel
10 10 * security dir permissions
11 11
12 12 Authors
13 13 -------
14 14
15 15 * MinRK
16 16
17 17 """
18 18
19 19 #-----------------------------------------------------------------------------
20 20 # Imports
21 21 #-----------------------------------------------------------------------------
22 22
23 23 import os
24 24 import shutil
25 25 import sys
26 26 import tempfile
27 27
28 28 from unittest import TestCase
29 29
30 30 import nose.tools as nt
31 31
32 32 from IPython.core.profileapp import list_profiles_in, list_bundled_profiles
33 33 from IPython.core.profiledir import ProfileDir
34 34
35 35 from IPython.testing import decorators as dec
36 36 from IPython.testing import tools as tt
37 37 from IPython.utils import py3compat
38 38 from IPython.utils.process import getoutput
39 39 from IPython.utils.tempdir import TemporaryDirectory
40 40
41 41 #-----------------------------------------------------------------------------
42 42 # Globals
43 43 #-----------------------------------------------------------------------------
44 44 TMP_TEST_DIR = tempfile.mkdtemp()
45 45 HOME_TEST_DIR = os.path.join(TMP_TEST_DIR, "home_test_dir")
46 46 IP_TEST_DIR = os.path.join(HOME_TEST_DIR,'.ipython')
47 47
48 48 #
49 49 # Setup/teardown functions/decorators
50 50 #
51 51
52 52 def setup():
53 53 """Setup test environment for the module:
54 54
55 55 - Adds dummy home dir tree
56 56 """
57 57 # Do not mask exceptions here. In particular, catching WindowsError is a
58 58 # problem because that exception is only defined on Windows...
59 59 os.makedirs(IP_TEST_DIR)
60 60
61 61
62 62 def teardown():
63 63 """Teardown test environment for the module:
64 64
65 65 - Remove dummy home dir tree
66 66 """
67 67 # Note: we remove the parent test dir, which is the root of all test
68 68 # subdirs we may have created. Use shutil instead of os.removedirs, so
69 69 # that non-empty directories are all recursively removed.
70 70 shutil.rmtree(TMP_TEST_DIR)
71 71
72 72
73 73 #-----------------------------------------------------------------------------
74 74 # Test functions
75 75 #-----------------------------------------------------------------------------
76 76 def win32_without_pywin32():
77 77 if sys.platform == 'win32':
78 78 try:
79 79 import pywin32
80 80 except ImportError:
81 81 return True
82 82 return False
83 83
84 84
85 85 class ProfileStartupTest(TestCase):
86 86 def setUp(self):
87 87 # create profile dir
88 88 self.pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test')
89 89 self.options = ['--ipython-dir', IP_TEST_DIR, '--profile', 'test']
90 90 self.fname = os.path.join(TMP_TEST_DIR, 'test.py')
91 91
92 92 def tearDown(self):
93 93 # We must remove this profile right away so its presence doesn't
94 94 # confuse other tests.
95 95 shutil.rmtree(self.pd.location)
96 96
97 97 def init(self, startup_file, startup, test):
98 98 # write startup python file
99 99 with open(os.path.join(self.pd.startup_dir, startup_file), 'w') as f:
100 100 f.write(startup)
101 101 # write simple test file, to check that the startup file was run
102 102 with open(self.fname, 'w') as f:
103 103 f.write(py3compat.doctest_refactor_print(test))
104 104
105 105 def validate(self, output):
106 106 tt.ipexec_validate(self.fname, output, '', options=self.options)
107 107
108 108 @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
109 109 def test_startup_py(self):
110 110 self.init('00-start.py', 'zzz=123\n',
111 111 py3compat.doctest_refactor_print('print zzz\n'))
112 112 self.validate('123')
113 113
114 114 @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
115 115 def test_startup_ipy(self):
116 116 self.init('00-start.ipy', '%xmode plain\n', '')
117 117 self.validate('Exception reporting mode: Plain')
118 118
119 119
120 120 def test_list_profiles_in():
121 121 # No need to remove these directories and files, as they will get nuked in
122 122 # the module-level teardown.
123 123 td = tempfile.mkdtemp(dir=TMP_TEST_DIR)
124 td = str(td)
125 124 for name in ('profile_foo', 'profile_hello', 'not_a_profile'):
126 125 os.mkdir(os.path.join(td, name))
127 126 if dec.unicode_paths:
128 127 os.mkdir(os.path.join(td, u'profile_ünicode'))
129 128
130 129 with open(os.path.join(td, 'profile_file'), 'w') as f:
131 130 f.write("I am not a profile directory")
132 131 profiles = list_profiles_in(td)
133 132
134 133 # unicode normalization can turn u'ünicode' into u'u\0308nicode',
135 134 # so only check for *nicode, and that creating a ProfileDir from the
136 135 # name remains valid
137 136 found_unicode = False
138 137 for p in list(profiles):
139 138 if p.endswith('nicode'):
140 139 pd = ProfileDir.find_profile_dir_by_name(td, p)
141 140 profiles.remove(p)
142 141 found_unicode = True
143 142 break
144 143 if dec.unicode_paths:
145 144 nt.assert_true(found_unicode)
146 145 nt.assert_equal(set(profiles), {'foo', 'hello'})
147 146
148 147
149 148 def test_list_bundled_profiles():
150 149 # This variable will need to be updated when a new profile gets bundled
151 150 bundled = sorted(list_bundled_profiles())
152 151 nt.assert_equal(bundled, [])
153 152
154 153
155 154 def test_profile_create_ipython_dir():
156 155 """ipython profile create respects --ipython-dir"""
157 156 with TemporaryDirectory() as td:
158 157 getoutput([sys.executable, '-m', 'IPython', 'profile', 'create',
159 158 'foo', '--ipython-dir=%s' % td])
160 159 profile_dir = os.path.join(td, 'profile_foo')
161 160 assert os.path.exists(profile_dir)
162 161 ipython_config = os.path.join(profile_dir, 'ipython_config.py')
163 162 assert os.path.exists(ipython_config)
164 163
General Comments 0
You need to be logged in to leave comments. Login now