##// END OF EJS Templates
use NamedTemporaryFile in hist_file_config test
MinRK -
Show More
@@ -1,134 +1,138 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 cfg.HistoryManager.hist_file = tempfile.mktemp()
132 hm = HistoryManager(shell=get_ipython(), config=cfg)
133 nt.assert_equals(hm.hist_file, cfg.HistoryManager.hist_file)
131 tfile = tempfile.NamedTemporaryFile(delete=False)
132 cfg.HistoryManager.hist_file = tfile.name
133 try:
134 hm = HistoryManager(shell=get_ipython(), config=cfg)
135 nt.assert_equals(hm.hist_file, cfg.HistoryManager.hist_file)
136 finally:
137 os.remove(tfile.name)
134 138
General Comments 0
You need to be logged in to leave comments. Login now