##// END OF EJS Templates
minor test fixes for win32
MinRK -
Show More
@@ -1,138 +1,144 b''
1 1 # coding: utf-8
2 2 """Tests for the IPython tab-completion machinery.
3 3 """
4 4 #-----------------------------------------------------------------------------
5 5 # Module imports
6 6 #-----------------------------------------------------------------------------
7 7
8 8 # stdlib
9 9 import os
10 10 import sys
11 11 import tempfile
12 12 import unittest
13 13 from datetime import datetime
14 14
15 15 # third party
16 16 import nose.tools as nt
17 17
18 18 # our own packages
19 19 from IPython.config.loader import Config
20 20 from IPython.utils.tempdir import TemporaryDirectory
21 21 from IPython.core.history import HistoryManager, extract_hist_ranges
22 22 from IPython.utils import py3compat
23 23
24 24 def setUp():
25 25 nt.assert_equal(sys.getdefaultencoding(), "utf-8" if py3compat.PY3 else "ascii")
26 26
27 27 def test_history():
28 28 ip = get_ipython()
29 29 with TemporaryDirectory() as tmpdir:
30 30 hist_manager_ori = ip.history_manager
31 31 hist_file = os.path.join(tmpdir, 'history.sqlite')
32 32 try:
33 33 ip.history_manager = HistoryManager(shell=ip, hist_file=hist_file)
34 34 hist = ['a=1', 'def f():\n test = 1\n return test', u"b='β‚¬Γ†ΒΎΓ·ΓŸ'"]
35 35 for i, h in enumerate(hist, start=1):
36 36 ip.history_manager.store_inputs(i, h)
37 37
38 38 ip.history_manager.db_log_output = True
39 39 # Doesn't match the input, but we'll just check it's stored.
40 40 ip.history_manager.output_hist_reprs[3] = "spam"
41 41 ip.history_manager.store_output(3)
42 42
43 43 nt.assert_equal(ip.history_manager.input_hist_raw, [''] + hist)
44 44
45 45 # Detailed tests for _get_range_session
46 46 grs = ip.history_manager._get_range_session
47 47 nt.assert_equal(list(grs(start=2,stop=-1)), zip([0], [2], hist[1:-1]))
48 48 nt.assert_equal(list(grs(start=-2)), zip([0,0], [2,3], hist[-2:]))
49 49 nt.assert_equal(list(grs(output=True)), zip([0,0,0], [1,2,3], zip(hist, [None,None,'spam'])))
50 50
51 51 # Check whether specifying a range beyond the end of the current
52 52 # session results in an error (gh-804)
53 53 ip.magic('%hist 2-500')
54 54
55 55 # New session
56 56 ip.history_manager.reset()
57 57 newcmds = ["z=5","class X(object):\n pass", "k='p'"]
58 58 for i, cmd in enumerate(newcmds, start=1):
59 59 ip.history_manager.store_inputs(i, cmd)
60 60 gothist = ip.history_manager.get_range(start=1, stop=4)
61 61 nt.assert_equal(list(gothist), zip([0,0,0],[1,2,3], newcmds))
62 62 # Previous session:
63 63 gothist = ip.history_manager.get_range(-1, 1, 4)
64 64 nt.assert_equal(list(gothist), zip([1,1,1],[1,2,3], hist))
65 65
66 66 # Check get_hist_tail
67 67 gothist = ip.history_manager.get_tail(4, output=True,
68 68 include_latest=True)
69 69 expected = [(1, 3, (hist[-1], "spam")),
70 70 (2, 1, (newcmds[0], None)),
71 71 (2, 2, (newcmds[1], None)),
72 72 (2, 3, (newcmds[2], None)),]
73 73 nt.assert_equal(list(gothist), expected)
74 74
75 75 gothist = ip.history_manager.get_tail(2)
76 76 expected = [(2, 1, newcmds[0]),
77 77 (2, 2, newcmds[1])]
78 78 nt.assert_equal(list(gothist), expected)
79 79
80 80 # Check get_hist_search
81 81 gothist = ip.history_manager.search("*test*")
82 82 nt.assert_equal(list(gothist), [(1,2,hist[1])] )
83 83 gothist = ip.history_manager.search("b*", output=True)
84 84 nt.assert_equal(list(gothist), [(1,3,(hist[2],"spam"))] )
85 85
86 86 # Cross testing: check that magic %save can get previous session.
87 87 testfilename = os.path.realpath(os.path.join(tmpdir, "test.py"))
88 88 ip.magic_save(testfilename + " ~1/1-3")
89 89 with py3compat.open(testfilename) as testfile:
90 90 nt.assert_equal(testfile.read(),
91 91 u"# coding: utf-8\n" + u"\n".join(hist))
92 92
93 93 # Duplicate line numbers - check that it doesn't crash, and
94 94 # gets a new session
95 95 ip.history_manager.store_inputs(1, "rogue")
96 96 ip.history_manager.writeout_cache()
97 97 nt.assert_equal(ip.history_manager.session_number, 3)
98 98 finally:
99 99 # Restore history manager
100 100 ip.history_manager = hist_manager_ori
101 101
102 102
103 103 def test_extract_hist_ranges():
104 104 instr = "1 2/3 ~4/5-6 ~4/7-~4/9 ~9/2-~7/5"
105 105 expected = [(0, 1, 2), # 0 == current session
106 106 (2, 3, 4),
107 107 (-4, 5, 7),
108 108 (-4, 7, 10),
109 109 (-9, 2, None), # None == to end
110 110 (-8, 1, None),
111 111 (-7, 1, 6)]
112 112 actual = list(extract_hist_ranges(instr))
113 113 nt.assert_equal(actual, expected)
114 114
115 115 def test_magic_rerun():
116 116 """Simple test for %rerun (no args -> rerun last line)"""
117 117 ip = get_ipython()
118 118 ip.run_cell("a = 10", store_history=True)
119 119 ip.run_cell("a += 1", store_history=True)
120 120 nt.assert_equal(ip.user_ns["a"], 11)
121 121 ip.run_cell("%rerun", store_history=True)
122 122 nt.assert_equal(ip.user_ns["a"], 12)
123 123
124 124 def test_timestamp_type():
125 125 ip = get_ipython()
126 126 info = ip.history_manager.get_session_info()
127 127 nt.assert_true(isinstance(info[1], datetime))
128 128
129 129 def test_hist_file_config():
130 130 cfg = Config()
131 131 tfile = tempfile.NamedTemporaryFile(delete=False)
132 132 cfg.HistoryManager.hist_file = tfile.name
133 133 try:
134 134 hm = HistoryManager(shell=get_ipython(), config=cfg)
135 135 nt.assert_equals(hm.hist_file, cfg.HistoryManager.hist_file)
136 136 finally:
137 os.remove(tfile.name)
137 try:
138 os.remove(tfile.name)
139 except OSError:
140 # same catch as in testing.tools.TempFileMixin
141 # On Windows, even though we close the file, we still can't
142 # delete it. I have no clue why
143 pass
138 144
@@ -1,103 +1,113 b''
1 1 """Tests for profile-related functions.
2 2
3 3 Currently only the startup-dir functionality is tested, but more tests should
4 4 be added for:
5 5
6 6 * ipython profile create
7 7 * ipython profile list
8 8 * ipython profile create --parallel
9 9 * security dir permissions
10 10
11 11 Authors
12 12 -------
13 13
14 14 * MinRK
15 15
16 16 """
17 17 from __future__ import absolute_import
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 import nose.tools as nt
29 29 from nose import SkipTest
30 30
31 31 from IPython.core.profiledir import ProfileDir
32 32
33 33 from IPython.testing import decorators as dec
34 34 from IPython.testing import tools as tt
35 35 from IPython.utils import py3compat
36 36
37 37
38 38 #-----------------------------------------------------------------------------
39 39 # Globals
40 40 #-----------------------------------------------------------------------------
41 41 TMP_TEST_DIR = tempfile.mkdtemp()
42 42 HOME_TEST_DIR = os.path.join(TMP_TEST_DIR, "home_test_dir")
43 43 IP_TEST_DIR = os.path.join(HOME_TEST_DIR,'.ipython')
44 44
45 45 #
46 46 # Setup/teardown functions/decorators
47 47 #
48 48
49 49 def setup():
50 50 """Setup test environment for the module:
51 51
52 52 - Adds dummy home dir tree
53 53 """
54 54 # Do not mask exceptions here. In particular, catching WindowsError is a
55 55 # problem because that exception is only defined on Windows...
56 56 os.makedirs(IP_TEST_DIR)
57 57
58 58
59 59 def teardown():
60 60 """Teardown test environment for the module:
61 61
62 62 - Remove dummy home dir tree
63 63 """
64 64 # Note: we remove the parent test dir, which is the root of all test
65 65 # subdirs we may have created. Use shutil instead of os.removedirs, so
66 66 # that non-empty directories are all recursively removed.
67 67 shutil.rmtree(TMP_TEST_DIR)
68 68
69 69
70 70 #-----------------------------------------------------------------------------
71 71 # Test functions
72 72 #-----------------------------------------------------------------------------
73 def win32_without_pywin32():
74 if sys.platform == 'win32':
75 try:
76 import pywin32
77 except ImportError:
78 return True
79 return False
80
73 81
82 @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
74 83 def test_startup_py():
75 84 # create profile dir
76 85 pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test')
77 86 # write startup python file
78 87 with open(os.path.join(pd.startup_dir, '00-start.py'), 'w') as f:
79 88 f.write('zzz=123\n')
80 89 # write simple test file, to check that the startup file was run
81 90 fname = os.path.join(TMP_TEST_DIR, 'test.py')
82 91 with open(fname, 'w') as f:
83 92 f.write(py3compat.doctest_refactor_print('print zzz\n'))
84 93 # validate output
85 94 tt.ipexec_validate(fname, '123', '',
86 95 options=['--ipython-dir', IP_TEST_DIR, '--profile', 'test'])
87 96
97 @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
88 98 def test_startup_ipy():
89 99 # create profile dir
90 100 pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test')
91 101 # write startup ipython file
92 102 with open(os.path.join(pd.startup_dir, '00-start.ipy'), 'w') as f:
93 103 f.write('%profile\n')
94 104 # write empty script, because we don't need anything to happen
95 105 # after the startup file is run
96 106 fname = os.path.join(TMP_TEST_DIR, 'test.py')
97 107 with open(fname, 'w') as f:
98 108 f.write('')
99 109 # validate output
100 110 tt.ipexec_validate(fname, 'test', '',
101 111 options=['--ipython-dir', IP_TEST_DIR, '--profile', 'test'])
102 112
103 113
General Comments 0
You need to be logged in to leave comments. Login now