vedeu 0.5.13 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/bin/vedeu_drb_server +1 -0
- data/config/rubocop_enabled.yml +2 -2
- data/docs/events.md +2 -0
- data/docs/getting_started.md +1 -1
- data/examples/drb_app.rb +1 -0
- data/examples/editor_app.rb +76 -0
- data/lib/vedeu/all.rb +13 -7
- data/lib/vedeu/{bindings.rb → bindings/bindings.rb} +2 -0
- data/lib/vedeu/bindings/focus.rb +66 -0
- data/lib/vedeu/bindings/refresh.rb +77 -0
- data/lib/vedeu/bindings/system.rb +19 -88
- data/lib/vedeu/buffers/buffer.rb +8 -8
- data/lib/vedeu/configuration/api.rb +32 -11
- data/lib/vedeu/configuration/cli.rb +8 -0
- data/lib/vedeu/cursor/move.rb +1 -0
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -0
- data/lib/vedeu/{dsl.rb → dsl/dsl.rb} +0 -0
- data/lib/vedeu/exceptions.rb +1 -1
- data/lib/vedeu/geometry/position.rb +28 -0
- data/lib/vedeu/input/capture.rb +76 -0
- data/lib/vedeu/input/editor/all.rb +19 -0
- data/lib/vedeu/input/editor/cropper.rb +74 -0
- data/lib/vedeu/input/editor/document.rb +254 -0
- data/lib/vedeu/input/editor/documents.rb +18 -0
- data/lib/vedeu/input/editor/editor.rb +100 -0
- data/lib/vedeu/input/editor/line.rb +143 -0
- data/lib/vedeu/input/editor/lines.rb +199 -0
- data/lib/vedeu/input/editor/virtual_cursor.rb +167 -0
- data/lib/vedeu/input/input.rb +9 -93
- data/lib/vedeu/input/input_translator.rb +155 -0
- data/lib/vedeu/internal_api.rb +9 -0
- data/lib/vedeu/log/lockless_log_device.rb +1 -1
- data/lib/vedeu/models/escape.rb +7 -8
- data/lib/vedeu/output/direct.rb +59 -0
- data/lib/vedeu/output/renderers/terminal.rb +8 -0
- data/lib/vedeu/output/viewport.rb +2 -3
- data/lib/vedeu/{plugins.rb → plugins/plugins.rb} +0 -0
- data/lib/vedeu/refresh/refresh_cursor.rb +1 -0
- data/lib/vedeu/{repositories.rb → repositories/repositories.rb} +0 -0
- data/lib/vedeu/terminal/content.rb +88 -0
- data/lib/vedeu/terminal/mode.rb +79 -0
- data/lib/vedeu/{terminal.rb → terminal/terminal.rb} +9 -25
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/{bindings_test.rb → bindings/bindings_test.rb} +0 -0
- data/test/lib/vedeu/bindings/focus_test.rb +19 -0
- data/test/lib/vedeu/bindings/refresh_test.rb +19 -0
- data/test/lib/vedeu/bindings/system_test.rb +1 -6
- data/test/lib/vedeu/borders/render_border_test.rb +43 -10
- data/test/lib/vedeu/buffers/buffer_test.rb +18 -0
- data/test/lib/vedeu/buffers/virtual_buffer_test.rb +15 -0
- data/test/lib/vedeu/configuration/api_test.rb +18 -2
- data/test/lib/vedeu/configuration/cli_test.rb +5 -0
- data/test/lib/vedeu/cursor/move_test.rb +1 -1
- data/test/lib/vedeu/dsl/dsl_test.rb +8 -0
- data/test/lib/vedeu/dsl/shared_test.rb +12 -0
- data/test/lib/vedeu/{output → esc}/esc_test.rb +0 -0
- data/test/lib/vedeu/geometry/position_test.rb +56 -0
- data/test/lib/vedeu/input/capture_test.rb +63 -0
- data/test/lib/vedeu/input/editor/cropper_test.rb +82 -0
- data/test/lib/vedeu/input/editor/document_test.rb +190 -0
- data/test/lib/vedeu/input/editor/documents_test.rb +17 -0
- data/test/lib/vedeu/input/editor/editor_test.rb +170 -0
- data/test/lib/vedeu/input/editor/line_test.rb +333 -0
- data/test/lib/vedeu/input/editor/lines_test.rb +561 -0
- data/test/lib/vedeu/input/editor/virtual_cursor_test.rb +184 -0
- data/test/lib/vedeu/input/input_test.rb +20 -4
- data/test/lib/vedeu/input/input_translator_test.rb +32 -0
- data/test/lib/vedeu/internal_api_test.rb +1 -0
- data/test/lib/vedeu/models/escape_test.rb +6 -6
- data/test/lib/vedeu/models/views/view_test.rb +15 -2
- data/test/lib/vedeu/null/null_test.rb +8 -0
- data/test/lib/vedeu/output/direct_test.rb +70 -0
- data/test/lib/vedeu/{plugins_test.rb → plugins/plugins_test.rb} +0 -0
- data/test/lib/vedeu/{repositories_test.rb → repositories/repositories_test.rb} +0 -0
- data/test/lib/vedeu/terminal/content_test.rb +100 -0
- data/test/lib/vedeu/terminal/mode_test.rb +95 -0
- data/test/lib/vedeu/{terminal_test.rb → terminal/terminal_test.rb} +23 -23
- data/test/test_helper.rb +1 -0
- metadata +67 -20
- data/lib/vedeu/terminal_mode.rb +0 -59
- data/test/lib/vedeu/terminal_mode_test.rb +0 -72
@@ -7,16 +7,24 @@ module Vedeu
|
|
7
7
|
let(:described) { Vedeu::RenderBorder }
|
8
8
|
let(:instance) { described.new(border) }
|
9
9
|
let(:border) {
|
10
|
-
Vedeu::Border.new(enabled:
|
11
|
-
name:
|
12
|
-
title:
|
13
|
-
caption:
|
10
|
+
Vedeu::Border.new(enabled: enabled,
|
11
|
+
name: _name,
|
12
|
+
title: title,
|
13
|
+
caption: caption,
|
14
|
+
show_top: show_top,
|
15
|
+
show_bottom: show_bottom,
|
16
|
+
show_left: show_left,
|
17
|
+
show_right: show_right)
|
14
18
|
}
|
15
19
|
let(:visible) { false }
|
16
20
|
let(:enabled) { false }
|
17
21
|
let(:_name) { 'Vedeu::RenderBorder' }
|
18
22
|
let(:title) {}
|
19
23
|
let(:caption) {}
|
24
|
+
let(:show_top) { true }
|
25
|
+
let(:show_bottom) { true }
|
26
|
+
let(:show_left) { true }
|
27
|
+
let(:show_right) { true }
|
20
28
|
|
21
29
|
it { described.must_respond_to(:with) }
|
22
30
|
|
@@ -57,28 +65,53 @@ module Vedeu
|
|
57
65
|
let(:title) { 'T' }
|
58
66
|
|
59
67
|
# @todo Add more tests.
|
60
|
-
|
68
|
+
it { subject.size.must_equal(18) }
|
61
69
|
end
|
62
70
|
|
63
71
|
context 'and a title is not given' do
|
64
72
|
# @todo Add more tests.
|
65
|
-
|
73
|
+
it { subject.size.must_equal(18) }
|
66
74
|
end
|
67
75
|
|
68
76
|
context 'and a caption is given' do
|
69
77
|
let(:caption) { 'C' }
|
70
78
|
|
71
79
|
# @todo Add more tests.
|
72
|
-
|
80
|
+
it { subject.size.must_equal(18) }
|
73
81
|
end
|
74
82
|
|
75
83
|
context 'and a caption is not given' do
|
76
84
|
# @todo Add more tests.
|
77
|
-
|
85
|
+
it { subject.size.must_equal(18) }
|
78
86
|
end
|
79
87
|
|
80
|
-
|
81
|
-
|
88
|
+
context 'and the left side is disabled' do
|
89
|
+
let(:show_left) { false }
|
90
|
+
|
91
|
+
# @todo Add more tests.
|
92
|
+
it { subject.size.must_equal(16) }
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'and the right side is disabled' do
|
96
|
+
let(:show_right) { false }
|
97
|
+
|
98
|
+
# @todo Add more tests.
|
99
|
+
it { subject.size.must_equal(16) }
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'and the top side is disabled' do
|
103
|
+
let(:show_top) { false }
|
104
|
+
|
105
|
+
# @todo Add more tests.
|
106
|
+
it { subject.size.must_equal(13) }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'and the bottom side is disabled' do
|
110
|
+
let(:show_bottom) { false }
|
111
|
+
|
112
|
+
# @todo Add more tests.
|
113
|
+
it { subject.size.must_equal(13) }
|
114
|
+
end
|
82
115
|
end
|
83
116
|
end
|
84
117
|
end
|
@@ -65,6 +65,24 @@ module Vedeu
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe '#clear' do
|
69
|
+
let(:emptiness) { mock }
|
70
|
+
|
71
|
+
before do
|
72
|
+
Vedeu::Clear::NamedInterface.stubs(:render).returns(emptiness)
|
73
|
+
Vedeu::Output.stubs(:render).returns(emptiness)
|
74
|
+
end
|
75
|
+
|
76
|
+
subject { instance.clear }
|
77
|
+
|
78
|
+
it {
|
79
|
+
Vedeu::Clear::NamedInterface.expects(:render).with(_name).
|
80
|
+
returns(emptiness)
|
81
|
+
Vedeu::Output.expects(:render).with(emptiness)
|
82
|
+
subject
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
68
86
|
describe '#front?' do
|
69
87
|
subject { instance.front? }
|
70
88
|
|
@@ -27,12 +27,22 @@ module Vedeu
|
|
27
27
|
describe '.output' do
|
28
28
|
let(:data) {}
|
29
29
|
|
30
|
+
before do
|
31
|
+
Vedeu.stubs(:width).returns(3)
|
32
|
+
Vedeu.stubs(:height).returns(3)
|
33
|
+
end
|
34
|
+
|
30
35
|
subject { described.output(data) }
|
31
36
|
|
32
37
|
it { subject.must_be_instance_of(Array) }
|
33
38
|
end
|
34
39
|
|
35
40
|
describe '#cells' do
|
41
|
+
before do
|
42
|
+
Vedeu.stubs(:width).returns(3)
|
43
|
+
Vedeu.stubs(:height).returns(3)
|
44
|
+
end
|
45
|
+
|
36
46
|
subject { instance.cells }
|
37
47
|
|
38
48
|
it { subject.must_be_instance_of(Array) }
|
@@ -77,6 +87,11 @@ module Vedeu
|
|
77
87
|
end
|
78
88
|
|
79
89
|
describe '#render' do
|
90
|
+
before do
|
91
|
+
Vedeu.stubs(:width).returns(3)
|
92
|
+
Vedeu.stubs(:height).returns(3)
|
93
|
+
end
|
94
|
+
|
80
95
|
subject { instance.render }
|
81
96
|
|
82
97
|
it { subject.must_be_instance_of(String) }
|
@@ -171,6 +171,15 @@ module Vedeu
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
|
+
describe '#fake!' do
|
175
|
+
it { instance.must_respond_to(:fake) }
|
176
|
+
|
177
|
+
it 'sets the option to the desired value' do
|
178
|
+
configuration = Vedeu.configure { fake! }
|
179
|
+
configuration.terminal_mode.must_equal(:fake)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
174
183
|
describe '#raw!' do
|
175
184
|
subject { Vedeu.configure { raw! } }
|
176
185
|
|
@@ -312,14 +321,21 @@ module Vedeu
|
|
312
321
|
end
|
313
322
|
|
314
323
|
describe '#terminal_mode' do
|
315
|
-
context 'when setting to :
|
324
|
+
context 'when setting to :fake mode' do
|
325
|
+
it {
|
326
|
+
configuration = Vedeu.configure { terminal_mode(:fake) }
|
327
|
+
configuration.terminal_mode.must_equal(:fake)
|
328
|
+
}
|
329
|
+
end
|
330
|
+
|
331
|
+
context 'when setting to :cooked mode' do
|
316
332
|
it {
|
317
333
|
configuration = Vedeu.configure { terminal_mode(:raw) }
|
318
334
|
configuration.terminal_mode.must_equal(:raw)
|
319
335
|
}
|
320
336
|
end
|
321
337
|
|
322
|
-
context 'when setting to :
|
338
|
+
context 'when setting to :raw mode' do
|
323
339
|
it {
|
324
340
|
configuration = Vedeu.configure { terminal_mode(:raw) }
|
325
341
|
configuration.terminal_mode.must_equal(:raw)
|
@@ -139,6 +139,11 @@ module Vedeu
|
|
139
139
|
Configuration.terminal_mode.must_equal(:cooked)
|
140
140
|
end
|
141
141
|
|
142
|
+
it '--fake' do
|
143
|
+
Configuration.configure(['--fake'])
|
144
|
+
Configuration.terminal_mode.must_equal(:fake)
|
145
|
+
end
|
146
|
+
|
142
147
|
it '--raw' do
|
143
148
|
Configuration.configure(['--raw'])
|
144
149
|
Configuration.terminal_mode.must_equal(:raw)
|
File without changes
|
@@ -157,6 +157,62 @@ module Vedeu
|
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
+
describe '#down' do
|
161
|
+
subject { instance.down }
|
162
|
+
|
163
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
164
|
+
it { subject.y.must_equal(13) }
|
165
|
+
it { subject.x.must_equal(19) }
|
166
|
+
|
167
|
+
context 'when y is 0' do
|
168
|
+
let(:y) { 0 }
|
169
|
+
|
170
|
+
it { subject.y.must_equal(2) }
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '#left' do
|
175
|
+
subject { instance.left }
|
176
|
+
|
177
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
178
|
+
it { subject.y.must_equal(12) }
|
179
|
+
it { subject.x.must_equal(18) }
|
180
|
+
|
181
|
+
context 'when x is 0' do
|
182
|
+
let(:x) { 0 }
|
183
|
+
|
184
|
+
it { subject.x.must_equal(1) }
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
describe '#right' do
|
189
|
+
subject { instance.right }
|
190
|
+
|
191
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
192
|
+
it { subject.y.must_equal(12) }
|
193
|
+
it { subject.x.must_equal(20) }
|
194
|
+
|
195
|
+
context 'when x is 0' do
|
196
|
+
let(:x) { 0 }
|
197
|
+
|
198
|
+
it { subject.x.must_equal(2) }
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
describe '#up' do
|
203
|
+
subject { instance.up }
|
204
|
+
|
205
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
206
|
+
it { subject.y.must_equal(11) }
|
207
|
+
it { subject.x.must_equal(19) }
|
208
|
+
|
209
|
+
context 'when y is 0' do
|
210
|
+
let(:y) { 0 }
|
211
|
+
|
212
|
+
it { subject.y.must_equal(1) }
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
160
216
|
end # Position
|
161
217
|
|
162
218
|
end # Vedeu
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Editor
|
6
|
+
|
7
|
+
describe Capture do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Editor::Capture }
|
10
|
+
let(:instance) { described.new(console) }
|
11
|
+
let(:console) { mock }
|
12
|
+
|
13
|
+
describe '#initialize' do
|
14
|
+
it { instance.must_be_instance_of(described) }
|
15
|
+
it { instance.instance_variable_get('@console').must_equal(console) }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.read' do
|
19
|
+
subject { described.read(console) }
|
20
|
+
|
21
|
+
before do
|
22
|
+
Vedeu::Terminal.stubs(:console).returns(console)
|
23
|
+
console.stubs(:getch).returns(keys)
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when nothing is given' do
|
27
|
+
let(:keys) { nil }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when a single keypress is given' do
|
31
|
+
let(:keys) { 'a' }
|
32
|
+
|
33
|
+
it { subject.must_equal('a') }
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when a ctrl+keypress is given' do
|
37
|
+
let(:keys) { "\u0001" }
|
38
|
+
|
39
|
+
it { subject.must_equal(:ctrl_a) }
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when a shift+keypress is given' do
|
43
|
+
let(:keys) { 'A' }
|
44
|
+
|
45
|
+
it { subject.must_equal('A') }
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when a alt+keypress is given' do
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when a super+keypress is given' do
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#read' do
|
56
|
+
it { instance.must_respond_to(:read) }
|
57
|
+
end
|
58
|
+
|
59
|
+
end # Capture
|
60
|
+
|
61
|
+
end # Editor
|
62
|
+
|
63
|
+
end # Vedeu
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Editor
|
6
|
+
|
7
|
+
describe Cropper do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Editor::Cropper }
|
10
|
+
let(:instance) {
|
11
|
+
described.new(lines: lines,
|
12
|
+
height: height,
|
13
|
+
width: width,
|
14
|
+
ox: ox,
|
15
|
+
oy: oy)
|
16
|
+
}
|
17
|
+
let(:lines) { Vedeu::Editor::Lines.new }
|
18
|
+
let(:height) { 3 }
|
19
|
+
let(:width) { 5 }
|
20
|
+
let(:ox) { 1 }
|
21
|
+
let(:oy) { 1 }
|
22
|
+
|
23
|
+
describe '#initialize' do
|
24
|
+
it { instance.must_be_instance_of(described) }
|
25
|
+
it { instance.instance_variable_get('@lines').must_equal(lines) }
|
26
|
+
it { instance.instance_variable_get('@height').must_equal(height) }
|
27
|
+
it { instance.instance_variable_get('@width').must_equal(width) }
|
28
|
+
it { instance.instance_variable_get('@ox').must_equal(ox) }
|
29
|
+
it { instance.instance_variable_get('@oy').must_equal(oy) }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#cropped' do
|
33
|
+
subject { instance.cropped }
|
34
|
+
|
35
|
+
context 'when there are no lines' do
|
36
|
+
let(:lines) { Vedeu::Editor::Lines.new }
|
37
|
+
|
38
|
+
it { subject.must_equal([]) }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when there are lines' do
|
42
|
+
let(:lines) {
|
43
|
+
Vedeu::Editor::Lines.new([
|
44
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
45
|
+
Vedeu::Editor::Line.new('Helium'),
|
46
|
+
Vedeu::Editor::Line.new('Lithium'),
|
47
|
+
Vedeu::Editor::Line.new('Beryllium'),
|
48
|
+
Vedeu::Editor::Line.new('Boron'),
|
49
|
+
])
|
50
|
+
}
|
51
|
+
|
52
|
+
it { subject.must_equal(['elium', 'ithiu', 'eryll']) }
|
53
|
+
|
54
|
+
context 'when oy is near the bottom' do
|
55
|
+
let(:oy) { 6 }
|
56
|
+
|
57
|
+
it { subject.must_equal([]) }
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'when ox is nearly past the content width' do
|
61
|
+
let(:oy) { 5 }
|
62
|
+
let(:ox) { 10 }
|
63
|
+
|
64
|
+
it 'returns only that which is visible, discarding empty lines' do
|
65
|
+
subject.must_equal([])
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when both oy and ox are effectively out of range' do
|
70
|
+
let(:oy) { 10 }
|
71
|
+
let(:ox) { 20 }
|
72
|
+
|
73
|
+
it { subject.must_equal([]) }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end # Cropper
|
79
|
+
|
80
|
+
end # Editor
|
81
|
+
|
82
|
+
end # Vedeu
|