##// END OF EJS Templates
Use start=1 for enumerate rather than doing i+1
Takafumi Arakaki -
Show More
@@ -1,184 +1,184 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 shutil
11 11 import sys
12 12 import tempfile
13 13 import unittest
14 14 from datetime import datetime
15 15
16 16 # third party
17 17 import nose.tools as nt
18 18
19 19 # our own packages
20 20 from IPython.config.loader import Config
21 21 from IPython.utils.tempdir import TemporaryDirectory
22 22 from IPython.core.history import HistoryManager, extract_hist_ranges
23 23 from IPython.utils import py3compat
24 24
25 25 def setUp():
26 26 nt.assert_equal(sys.getdefaultencoding(), "utf-8" if py3compat.PY3 else "ascii")
27 27
28 28 def test_history():
29 29 ip = get_ipython()
30 30 with TemporaryDirectory() as tmpdir:
31 31 hist_manager_ori = ip.history_manager
32 32 hist_file = os.path.join(tmpdir, 'history.sqlite')
33 33 try:
34 34 ip.history_manager = HistoryManager(shell=ip, hist_file=hist_file)
35 35 hist = [u'a=1', u'def f():\n test = 1\n return test', u"b='β‚¬Γ†ΒΎΓ·ΓŸ'"]
36 36 for i, h in enumerate(hist, start=1):
37 37 ip.history_manager.store_inputs(i, h)
38 38
39 39 ip.history_manager.db_log_output = True
40 40 # Doesn't match the input, but we'll just check it's stored.
41 41 ip.history_manager.output_hist_reprs[3] = "spam"
42 42 ip.history_manager.store_output(3)
43 43
44 44 nt.assert_equal(ip.history_manager.input_hist_raw, [''] + hist)
45 45
46 46 # Detailed tests for _get_range_session
47 47 grs = ip.history_manager._get_range_session
48 48 nt.assert_equal(list(grs(start=2,stop=-1)), zip([0], [2], hist[1:-1]))
49 49 nt.assert_equal(list(grs(start=-2)), zip([0,0], [2,3], hist[-2:]))
50 50 nt.assert_equal(list(grs(output=True)), zip([0,0,0], [1,2,3], zip(hist, [None,None,'spam'])))
51 51
52 52 # Check whether specifying a range beyond the end of the current
53 53 # session results in an error (gh-804)
54 54 ip.magic('%hist 2-500')
55 55
56 56 # Check that we can write non-ascii characters to a file
57 57 ip.magic("%%hist -f %s" % os.path.join(tmpdir, "test1"))
58 58 ip.magic("%%hist -pf %s" % os.path.join(tmpdir, "test2"))
59 59 ip.magic("%%hist -nf %s" % os.path.join(tmpdir, "test3"))
60 60 ip.magic("%%save %s 1-10" % os.path.join(tmpdir, "test4"))
61 61
62 62 # New session
63 63 ip.history_manager.reset()
64 64 newcmds = [u"z=5",
65 65 u"class X(object):\n pass",
66 66 u"k='p'",
67 67 u"z=5"]
68 68 for i, cmd in enumerate(newcmds, start=1):
69 69 ip.history_manager.store_inputs(i, cmd)
70 70 gothist = ip.history_manager.get_range(start=1, stop=4)
71 71 nt.assert_equal(list(gothist), zip([0,0,0],[1,2,3], newcmds))
72 72 # Previous session:
73 73 gothist = ip.history_manager.get_range(-1, 1, 4)
74 74 nt.assert_equal(list(gothist), zip([1,1,1],[1,2,3], hist))
75 75
76 newhist = [(2, i + 1, c) for (i, c) in enumerate(newcmds)]
76 newhist = [(2, i, c) for (i, c) in enumerate(newcmds, 1)]
77 77
78 78 # Check get_hist_tail
79 79 gothist = ip.history_manager.get_tail(5, output=True,
80 80 include_latest=True)
81 81 expected = [(1, 3, (hist[-1], "spam"))] \
82 82 + [(s, n, (c, None)) for (s, n, c) in newhist]
83 83 nt.assert_equal(list(gothist), expected)
84 84
85 85 gothist = ip.history_manager.get_tail(2)
86 86 expected = newhist[-3:-1]
87 87 nt.assert_equal(list(gothist), expected)
88 88
89 89 # Check get_hist_search
90 90 gothist = ip.history_manager.search("*test*")
91 91 nt.assert_equal(list(gothist), [(1,2,hist[1])] )
92 92
93 93 gothist = ip.history_manager.search("*=*")
94 94 nt.assert_equal(list(gothist),
95 95 [(1, 1, hist[0]),
96 96 (1, 2, hist[1]),
97 97 (1, 3, hist[2]),
98 98 newhist[0],
99 99 newhist[2],
100 100 newhist[3]])
101 101
102 102 gothist = ip.history_manager.search("*=*", n=4)
103 103 nt.assert_equal(list(gothist),
104 104 [(1, 3, hist[2]),
105 105 newhist[0],
106 106 newhist[2],
107 107 newhist[3]])
108 108
109 109 gothist = ip.history_manager.search("*=*", unique=True)
110 110 nt.assert_equal(list(gothist),
111 111 [(1, 1, hist[0]),
112 112 (1, 2, hist[1]),
113 113 (1, 3, hist[2]),
114 114 newhist[2],
115 115 newhist[3]])
116 116
117 117 gothist = ip.history_manager.search("*=*", unique=True, n=3)
118 118 nt.assert_equal(list(gothist),
119 119 [(1, 3, hist[2]),
120 120 newhist[2],
121 121 newhist[3]])
122 122
123 123 gothist = ip.history_manager.search("b*", output=True)
124 124 nt.assert_equal(list(gothist), [(1,3,(hist[2],"spam"))] )
125 125
126 126 # Cross testing: check that magic %save can get previous session.
127 127 testfilename = os.path.realpath(os.path.join(tmpdir, "test.py"))
128 128 ip.magic("save " + testfilename + " ~1/1-3")
129 129 with py3compat.open(testfilename, encoding='utf-8') as testfile:
130 130 nt.assert_equal(testfile.read(),
131 131 u"# coding: utf-8\n" + u"\n".join(hist)+u"\n")
132 132
133 133 # Duplicate line numbers - check that it doesn't crash, and
134 134 # gets a new session
135 135 ip.history_manager.store_inputs(1, "rogue")
136 136 ip.history_manager.writeout_cache()
137 137 nt.assert_equal(ip.history_manager.session_number, 3)
138 138 finally:
139 139 # Restore history manager
140 140 ip.history_manager = hist_manager_ori
141 141
142 142
143 143 def test_extract_hist_ranges():
144 144 instr = "1 2/3 ~4/5-6 ~4/7-~4/9 ~9/2-~7/5"
145 145 expected = [(0, 1, 2), # 0 == current session
146 146 (2, 3, 4),
147 147 (-4, 5, 7),
148 148 (-4, 7, 10),
149 149 (-9, 2, None), # None == to end
150 150 (-8, 1, None),
151 151 (-7, 1, 6)]
152 152 actual = list(extract_hist_ranges(instr))
153 153 nt.assert_equal(actual, expected)
154 154
155 155 def test_magic_rerun():
156 156 """Simple test for %rerun (no args -> rerun last line)"""
157 157 ip = get_ipython()
158 158 ip.run_cell("a = 10", store_history=True)
159 159 ip.run_cell("a += 1", store_history=True)
160 160 nt.assert_equal(ip.user_ns["a"], 11)
161 161 ip.run_cell("%rerun", store_history=True)
162 162 nt.assert_equal(ip.user_ns["a"], 12)
163 163
164 164 def test_timestamp_type():
165 165 ip = get_ipython()
166 166 info = ip.history_manager.get_session_info()
167 167 nt.assert_true(isinstance(info[1], datetime))
168 168
169 169 def test_hist_file_config():
170 170 cfg = Config()
171 171 tfile = tempfile.NamedTemporaryFile(delete=False)
172 172 cfg.HistoryManager.hist_file = tfile.name
173 173 try:
174 174 hm = HistoryManager(shell=get_ipython(), config=cfg)
175 175 nt.assert_equal(hm.hist_file, cfg.HistoryManager.hist_file)
176 176 finally:
177 177 try:
178 178 os.remove(tfile.name)
179 179 except OSError:
180 180 # same catch as in testing.tools.TempFileMixin
181 181 # On Windows, even though we close the file, we still can't
182 182 # delete it. I have no clue why
183 183 pass
184 184
General Comments 0
You need to be logged in to leave comments. Login now