1from __future__ import unicode_literals
2
3from prompt_toolkit.buffer import Buffer
4
5import pytest
6
7
8@pytest.fixture
9def _buffer():
10    return Buffer()
11
12
13def test_initial(_buffer):
14    assert _buffer.text == ''
15    assert _buffer.cursor_position == 0
16
17
18def test_insert_text(_buffer):
19    _buffer.insert_text('some_text')
20    assert _buffer.text == 'some_text'
21    assert _buffer.cursor_position == len('some_text')
22
23
24def test_cursor_movement(_buffer):
25    _buffer.insert_text('some_text')
26    _buffer.cursor_left()
27    _buffer.cursor_left()
28    _buffer.cursor_left()
29    _buffer.cursor_right()
30    _buffer.insert_text('A')
31
32    assert _buffer.text == 'some_teAxt'
33    assert _buffer.cursor_position == len('some_teA')
34
35
36def test_backspace(_buffer):
37    _buffer.insert_text('some_text')
38    _buffer.cursor_left()
39    _buffer.cursor_left()
40    _buffer.delete_before_cursor()
41
42    assert _buffer.text == 'some_txt'
43    assert _buffer.cursor_position == len('some_t')
44
45
46def test_cursor_up(_buffer):
47    # Cursor up to a line thats longer.
48    _buffer.insert_text('long line1\nline2')
49    _buffer.cursor_up()
50
51    assert _buffer.document.cursor_position == 5
52
53    # Going up when already at the top.
54    _buffer.cursor_up()
55    assert _buffer.document.cursor_position == 5
56
57    # Going up to a line that's shorter.
58    _buffer.reset()
59    _buffer.insert_text('line1\nlong line2')
60
61    _buffer.cursor_up()
62    assert _buffer.document.cursor_position == 5
63
64
65def test_cursor_down(_buffer):
66    _buffer.insert_text('line1\nline2')
67    _buffer.cursor_position = 3
68
69    # Normally going down
70    _buffer.cursor_down()
71    assert _buffer.document.cursor_position == len('line1\nlin')
72
73    # Going down to a line that's storter.
74    _buffer.reset()
75    _buffer.insert_text('long line1\na\nb')
76    _buffer.cursor_position = 3
77
78    _buffer.cursor_down()
79    assert _buffer.document.cursor_position == len('long line1\na')
80
81
82def test_join_next_line(_buffer):
83    _buffer.insert_text('line1\nline2\nline3')
84    _buffer.cursor_up()
85    _buffer.join_next_line()
86
87    assert _buffer.text == 'line1\nline2 line3'
88
89    # Test when there is no '\n' in the text
90    _buffer.reset()
91    _buffer.insert_text('line1')
92    _buffer.cursor_position = 0
93    _buffer.join_next_line()
94
95    assert _buffer.text == 'line1'
96
97
98def test_newline(_buffer):
99    _buffer.insert_text('hello world')
100    _buffer.newline()
101
102    assert _buffer.text == 'hello world\n'
103
104
105def test_swap_characters_before_cursor(_buffer):
106    _buffer.insert_text('hello world')
107    _buffer.cursor_left()
108    _buffer.cursor_left()
109    _buffer.swap_characters_before_cursor()
110
111    assert _buffer.text == 'hello wrold'
112