1 | #!/usr/bin/env python2
|
2 | """
|
3 | builtin_lib_test.py: Tests for readline_osh.py
|
4 | """
|
5 | from __future__ import print_function
|
6 |
|
7 | import cStringIO
|
8 | import unittest
|
9 | # We use native/line_input.c, a fork of readline.c, but this is good enough for
|
10 | # unit testing
|
11 | import readline
|
12 |
|
13 | from builtin import readline_osh # module under test
|
14 | from core import test_lib
|
15 | from core import state
|
16 | from core import alloc
|
17 | from core import ui
|
18 | from frontend import flag_def # side effect: flags are defined!
|
19 |
|
20 | _ = flag_def
|
21 |
|
22 |
|
23 | class BuiltinTest(unittest.TestCase):
|
24 |
|
25 | def testHistoryBuiltin(self):
|
26 | test_path = '_tmp/builtin_test_history.txt'
|
27 | with open(test_path, 'w') as f:
|
28 | f.write("""\
|
29 | echo hello
|
30 | ls one/
|
31 | ls two/
|
32 | echo bye
|
33 | """)
|
34 | readline.read_history_file(test_path)
|
35 |
|
36 | # Show all
|
37 | f = cStringIO.StringIO()
|
38 | out = _TestHistory(['history'])
|
39 |
|
40 | self.assertEqual(
|
41 | out, """\
|
42 | 1 echo hello
|
43 | 2 ls one/
|
44 | 3 ls two/
|
45 | 4 echo bye
|
46 | """)
|
47 |
|
48 | # Show two history items
|
49 | out = _TestHistory(['history', '2'])
|
50 | # Note: whitespace here is exact
|
51 | self.assertEqual(out, """\
|
52 | 3 ls two/
|
53 | 4 echo bye
|
54 | """)
|
55 |
|
56 | # Delete single history item.
|
57 | # This functionality is *silent*
|
58 | # so call history again after
|
59 | # this to feed the test assertion
|
60 |
|
61 | _TestHistory(['history', '-d', '4'])
|
62 |
|
63 | # Call history
|
64 | out = _TestHistory(['history'])
|
65 |
|
66 | # Note: whitespace here is exact
|
67 | self.assertEqual(
|
68 | out, """\
|
69 | 1 echo hello
|
70 | 2 ls one/
|
71 | 3 ls two/
|
72 | """)
|
73 |
|
74 | # Clear history
|
75 | # This functionality is *silent*
|
76 | # so call history again after
|
77 | # this to feed the test assertion
|
78 |
|
79 | _TestHistory(['history', '-c'])
|
80 |
|
81 | # Call history
|
82 | out = _TestHistory(['history'])
|
83 |
|
84 | self.assertEqual(out, """\
|
85 | """)
|
86 |
|
87 |
|
88 | def _TestHistory(argv):
|
89 | f = cStringIO.StringIO()
|
90 | arena = alloc.Arena()
|
91 | mem = state.Mem('', [], arena, [])
|
92 | errfmt = ui.ErrorFormatter()
|
93 | b = readline_osh.History(readline, mem, errfmt, f)
|
94 | cmd_val = test_lib.MakeBuiltinArgv(argv)
|
95 | b.Run(cmd_val)
|
96 | return f.getvalue()
|
97 |
|
98 |
|
99 | if __name__ == '__main__':
|
100 | unittest.main()
|