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
@@ -0,0 +1,561 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Editor
|
6
|
+
|
7
|
+
describe Lines do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Editor::Lines }
|
10
|
+
let(:instance) { described.new(lines) }
|
11
|
+
let(:lines) {
|
12
|
+
[
|
13
|
+
Vedeu::Editor::Line.new('Some text...'),
|
14
|
+
Vedeu::Editor::Line.new('More text...'),
|
15
|
+
Vedeu::Editor::Line.new('Other text...')
|
16
|
+
]
|
17
|
+
}
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
it { instance.must_be_instance_of(described) }
|
21
|
+
it { instance.instance_variable_get('@lines').must_equal(lines) }
|
22
|
+
|
23
|
+
context 'when lines were not given' do
|
24
|
+
let(:lines) {}
|
25
|
+
|
26
|
+
it { instance.instance_variable_get('@lines').must_equal([]) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'accessors' do
|
31
|
+
it { instance.must_respond_to(:lines) }
|
32
|
+
it { instance.must_respond_to(:lines=) }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '.coerce' do
|
36
|
+
let(:document) {}
|
37
|
+
|
38
|
+
subject { described.coerce(document) }
|
39
|
+
|
40
|
+
it { subject.must_be_instance_of(described) }
|
41
|
+
|
42
|
+
context 'when the document is already a Vedeu::Editor::Lines object' do
|
43
|
+
let(:document) { Vedeu::Editor::Lines.new(lines) }
|
44
|
+
|
45
|
+
it { subject.must_equal(document) }
|
46
|
+
it { subject.lines.must_equal(lines) }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when the document is an empty Array' do
|
50
|
+
let(:document) { [] }
|
51
|
+
|
52
|
+
it { subject.lines.must_equal([]) }
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when the document is an Array' do
|
56
|
+
let(:document) {
|
57
|
+
[
|
58
|
+
Vedeu::Editor::Line.new('Some text...'),
|
59
|
+
:more_text,
|
60
|
+
'Other text...',
|
61
|
+
]
|
62
|
+
}
|
63
|
+
let(:expected) {
|
64
|
+
[
|
65
|
+
Vedeu::Editor::Line.new('Some text...'),
|
66
|
+
Vedeu::Editor::Line.new(''),
|
67
|
+
Vedeu::Editor::Line.new('Other text...'),
|
68
|
+
]
|
69
|
+
}
|
70
|
+
|
71
|
+
it { subject.lines.must_equal(expected) }
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when the document is a String' do
|
75
|
+
let(:document) { "Some text...\nMore text..." }
|
76
|
+
|
77
|
+
context 'but it is empty' do
|
78
|
+
let(:document) { '' }
|
79
|
+
|
80
|
+
it { subject.must_equal(Vedeu::Editor::Lines.new) }
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'but it has no line breaks' do
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#[]' do
|
90
|
+
subject { instance.[](index) }
|
91
|
+
|
92
|
+
context 'when index is a Fixnum' do
|
93
|
+
let(:index) { 2 }
|
94
|
+
let(:expected) {
|
95
|
+
Vedeu::Editor::Line.new('Other text...')
|
96
|
+
}
|
97
|
+
|
98
|
+
it { subject.must_equal(expected) }
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when index is a Range' do
|
102
|
+
let(:index) { (1..2) }
|
103
|
+
let(:expected) {
|
104
|
+
[
|
105
|
+
Vedeu::Editor::Line.new('More text...'),
|
106
|
+
Vedeu::Editor::Line.new('Other text...')
|
107
|
+
]
|
108
|
+
}
|
109
|
+
|
110
|
+
it { subject.must_equal(expected) }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '#delete_character' do
|
115
|
+
let(:x) { 0 }
|
116
|
+
let(:y) { 0 }
|
117
|
+
|
118
|
+
subject { instance.delete_character(y, x) }
|
119
|
+
|
120
|
+
context 'when there are no lines' do
|
121
|
+
let(:lines) {
|
122
|
+
[
|
123
|
+
Vedeu::Editor::Line.new('')
|
124
|
+
]
|
125
|
+
}
|
126
|
+
let(:expected) {
|
127
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('')])
|
128
|
+
}
|
129
|
+
|
130
|
+
it { subject.must_equal(expected) }
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'when there is one line' do
|
134
|
+
let(:lines) {
|
135
|
+
[
|
136
|
+
Vedeu::Editor::Line.new('Hydrogen')
|
137
|
+
]
|
138
|
+
}
|
139
|
+
|
140
|
+
context 'and x is the first character of the line' do
|
141
|
+
let(:x) { 0 }
|
142
|
+
let(:expected) {
|
143
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('Hydrogen')])
|
144
|
+
}
|
145
|
+
|
146
|
+
it { subject.must_equal(expected) }
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'and x is somewhere on the line' do
|
150
|
+
let(:x) { 4 }
|
151
|
+
let(:expected) {
|
152
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('Hydrgen')])
|
153
|
+
}
|
154
|
+
|
155
|
+
it { subject.must_equal(expected) }
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'and x is the last character of the line' do
|
159
|
+
let(:x) { 15 }
|
160
|
+
let(:expected) {
|
161
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('Hydroge')])
|
162
|
+
}
|
163
|
+
|
164
|
+
it { subject.must_equal(expected) }
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'when there are multiple lines' do
|
169
|
+
let(:y) { 1 }
|
170
|
+
let(:lines) {
|
171
|
+
[
|
172
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
173
|
+
Vedeu::Editor::Line.new('Helium'),
|
174
|
+
Vedeu::Editor::Line.new('Lithium'),
|
175
|
+
]
|
176
|
+
}
|
177
|
+
|
178
|
+
context 'and x is the first character of the line' do
|
179
|
+
let(:x) { 0 }
|
180
|
+
let(:expected) {
|
181
|
+
Vedeu::Editor::Lines.new([
|
182
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
183
|
+
Vedeu::Editor::Line.new('Helium'),
|
184
|
+
Vedeu::Editor::Line.new('Lithium'),
|
185
|
+
])
|
186
|
+
}
|
187
|
+
|
188
|
+
it { subject.must_equal(expected) }
|
189
|
+
end
|
190
|
+
|
191
|
+
context 'and x is somewhere on the line' do
|
192
|
+
let(:x) { 4 }
|
193
|
+
let(:expected) {
|
194
|
+
Vedeu::Editor::Lines.new([
|
195
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
196
|
+
Vedeu::Editor::Line.new('Helim'),
|
197
|
+
Vedeu::Editor::Line.new('Lithium'),
|
198
|
+
])
|
199
|
+
}
|
200
|
+
|
201
|
+
it { subject.must_equal(expected) }
|
202
|
+
end
|
203
|
+
|
204
|
+
context 'and x is the last character of the line' do
|
205
|
+
let(:x) { 15 }
|
206
|
+
let(:expected) {
|
207
|
+
Vedeu::Editor::Lines.new([
|
208
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
209
|
+
Vedeu::Editor::Line.new('Heliu'),
|
210
|
+
Vedeu::Editor::Line.new('Lithium'),
|
211
|
+
])
|
212
|
+
}
|
213
|
+
|
214
|
+
it { subject.must_equal(expected) }
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
describe '#delete_line' do
|
220
|
+
let(:index) { 1 }
|
221
|
+
|
222
|
+
subject { instance.delete_line(index) }
|
223
|
+
|
224
|
+
it { subject.must_be_instance_of(described) }
|
225
|
+
|
226
|
+
context 'when the lines are empty' do
|
227
|
+
let(:lines) { [] }
|
228
|
+
|
229
|
+
it { subject.must_equal(Vedeu::Editor::Lines.new) }
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'when the lines are not empty' do
|
233
|
+
context 'when an index is not given' do
|
234
|
+
let(:index) {}
|
235
|
+
let(:expected) {
|
236
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...'])
|
237
|
+
}
|
238
|
+
|
239
|
+
it { subject.must_equal(expected) }
|
240
|
+
end
|
241
|
+
|
242
|
+
context 'when a negative index is given' do
|
243
|
+
let(:index) { -4 }
|
244
|
+
let(:expected) {
|
245
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...', 'Other text...'])
|
246
|
+
}
|
247
|
+
|
248
|
+
it { subject.must_equal(expected) }
|
249
|
+
end
|
250
|
+
|
251
|
+
context 'when an index is given' do
|
252
|
+
let(:expected) {
|
253
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'Other text...'])
|
254
|
+
}
|
255
|
+
|
256
|
+
it { subject.must_equal(expected) }
|
257
|
+
end
|
258
|
+
|
259
|
+
context 'when an index of the last line is given' do
|
260
|
+
let(:index) { 2 }
|
261
|
+
let(:expected) {
|
262
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...'])
|
263
|
+
}
|
264
|
+
|
265
|
+
it { subject.must_equal(expected) }
|
266
|
+
end
|
267
|
+
|
268
|
+
context 'when an index greater than the number of lines is given' do
|
269
|
+
let(:index) { 10 }
|
270
|
+
let(:expected) {
|
271
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...'])
|
272
|
+
}
|
273
|
+
|
274
|
+
it { subject.must_equal(expected) }
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
describe '#empty?' do
|
280
|
+
subject { instance.empty? }
|
281
|
+
|
282
|
+
context 'when the line is empty' do
|
283
|
+
let(:lines) {}
|
284
|
+
|
285
|
+
it { subject.must_equal(true) }
|
286
|
+
end
|
287
|
+
|
288
|
+
context 'when the line is not empty' do
|
289
|
+
it { subject.must_equal(false) }
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
describe '#eql?' do
|
294
|
+
let(:other) { instance }
|
295
|
+
|
296
|
+
subject { instance.eql?(other) }
|
297
|
+
|
298
|
+
it { subject.must_equal(true) }
|
299
|
+
|
300
|
+
context 'when different to other' do
|
301
|
+
let(:other) { described.new('Other text...') }
|
302
|
+
|
303
|
+
it { subject.must_equal(false) }
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
describe '#insert_character' do
|
308
|
+
let(:x) { 0 }
|
309
|
+
let(:y) { 0 }
|
310
|
+
let(:character) { 'a' }
|
311
|
+
|
312
|
+
subject { instance.insert_character(character, y, x) }
|
313
|
+
|
314
|
+
context 'when there are no lines' do
|
315
|
+
let(:lines) {
|
316
|
+
[
|
317
|
+
Vedeu::Editor::Line.new('')
|
318
|
+
]
|
319
|
+
}
|
320
|
+
let(:expected) {
|
321
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('a')])
|
322
|
+
}
|
323
|
+
|
324
|
+
it { subject.must_equal(expected) }
|
325
|
+
end
|
326
|
+
|
327
|
+
context 'when there is one line' do
|
328
|
+
let(:lines) {
|
329
|
+
[
|
330
|
+
Vedeu::Editor::Line.new('Hydrogen')
|
331
|
+
]
|
332
|
+
}
|
333
|
+
|
334
|
+
context 'and x is the first character of the line' do
|
335
|
+
let(:x) { 0 }
|
336
|
+
let(:expected) {
|
337
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('aHydrogen')])
|
338
|
+
}
|
339
|
+
|
340
|
+
it { subject.must_equal(expected) }
|
341
|
+
end
|
342
|
+
|
343
|
+
context 'and x is somewhere on the line' do
|
344
|
+
let(:x) { 4 }
|
345
|
+
let(:expected) {
|
346
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('Hydraogen')])
|
347
|
+
}
|
348
|
+
|
349
|
+
it { subject.must_equal(expected) }
|
350
|
+
end
|
351
|
+
|
352
|
+
context 'and x is the last character of the line' do
|
353
|
+
let(:x) { 15 }
|
354
|
+
let(:expected) {
|
355
|
+
Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new('Hydrogena')])
|
356
|
+
}
|
357
|
+
|
358
|
+
it { subject.must_equal(expected) }
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
context 'when there are multiple lines' do
|
363
|
+
let(:y) { 1 }
|
364
|
+
let(:lines) {
|
365
|
+
[
|
366
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
367
|
+
Vedeu::Editor::Line.new('Helium'),
|
368
|
+
Vedeu::Editor::Line.new('Lithium'),
|
369
|
+
]
|
370
|
+
}
|
371
|
+
|
372
|
+
context 'and x is the first character of the line' do
|
373
|
+
let(:x) { 0 }
|
374
|
+
let(:expected) {
|
375
|
+
Vedeu::Editor::Lines.new([
|
376
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
377
|
+
Vedeu::Editor::Line.new('aHelium'),
|
378
|
+
Vedeu::Editor::Line.new('Lithium'),
|
379
|
+
])
|
380
|
+
}
|
381
|
+
|
382
|
+
it { subject.must_equal(expected) }
|
383
|
+
end
|
384
|
+
|
385
|
+
context 'and x is somewhere on the line' do
|
386
|
+
let(:x) { 4 }
|
387
|
+
let(:expected) {
|
388
|
+
Vedeu::Editor::Lines.new([
|
389
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
390
|
+
Vedeu::Editor::Line.new('Heliaum'),
|
391
|
+
Vedeu::Editor::Line.new('Lithium'),
|
392
|
+
])
|
393
|
+
}
|
394
|
+
|
395
|
+
it { subject.must_equal(expected) }
|
396
|
+
end
|
397
|
+
|
398
|
+
context 'and x is the last character of the line' do
|
399
|
+
let(:x) { 15 }
|
400
|
+
let(:expected) {
|
401
|
+
Vedeu::Editor::Lines.new([
|
402
|
+
Vedeu::Editor::Line.new('Hydrogen'),
|
403
|
+
Vedeu::Editor::Line.new('Heliuma'),
|
404
|
+
Vedeu::Editor::Line.new('Lithium'),
|
405
|
+
])
|
406
|
+
}
|
407
|
+
|
408
|
+
it { subject.must_equal(expected) }
|
409
|
+
end
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
describe '#insert_line' do
|
414
|
+
let(:line) { "Many text..." }
|
415
|
+
let(:index) { 1 }
|
416
|
+
|
417
|
+
subject { instance.insert_line(line, index) }
|
418
|
+
|
419
|
+
it { subject.must_be_instance_of(described) }
|
420
|
+
|
421
|
+
context 'when a line is not given' do
|
422
|
+
let(:line) {}
|
423
|
+
let(:expected) {
|
424
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...', 'Other text...'])
|
425
|
+
}
|
426
|
+
|
427
|
+
it { subject.must_equal(expected) }
|
428
|
+
end
|
429
|
+
|
430
|
+
context 'when a line is given' do
|
431
|
+
context 'and an index is not given' do
|
432
|
+
let(:index) {}
|
433
|
+
let(:expected) {
|
434
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...', 'Other text...', 'Many text...'])
|
435
|
+
}
|
436
|
+
|
437
|
+
it { subject.must_equal(expected) }
|
438
|
+
end
|
439
|
+
|
440
|
+
context 'and a negative index is given' do
|
441
|
+
let(:index) { -4 }
|
442
|
+
let(:expected) {
|
443
|
+
Vedeu::Editor::Lines.coerce(['Many text...', 'Some text...', 'More text...', 'Other text...'])
|
444
|
+
}
|
445
|
+
|
446
|
+
it { subject.must_equal(expected) }
|
447
|
+
end
|
448
|
+
|
449
|
+
context 'and an index is given' do
|
450
|
+
let(:expected) {
|
451
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'Many text...', 'More text...', 'Other text...'])
|
452
|
+
}
|
453
|
+
|
454
|
+
it { subject.must_equal(expected) }
|
455
|
+
end
|
456
|
+
|
457
|
+
context 'and an index of the last line is given' do
|
458
|
+
let(:index) { 5 }
|
459
|
+
let(:expected) {
|
460
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...', 'Other text...', 'Many text...'])
|
461
|
+
}
|
462
|
+
|
463
|
+
it { subject.must_equal(expected) }
|
464
|
+
end
|
465
|
+
|
466
|
+
context 'and an index greater than the number of lines is given' do
|
467
|
+
let(:index) { 10 }
|
468
|
+
let(:expected) {
|
469
|
+
Vedeu::Editor::Lines.coerce(['Some text...', 'More text...', 'Other text...', 'Many text...'])
|
470
|
+
}
|
471
|
+
|
472
|
+
it { subject.must_equal(expected) }
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
describe '#line' do
|
478
|
+
let(:index) { 1 }
|
479
|
+
|
480
|
+
subject { instance.line(index) }
|
481
|
+
|
482
|
+
it { subject.must_be_instance_of(Vedeu::Editor::Line) }
|
483
|
+
|
484
|
+
context 'when there are no lines' do
|
485
|
+
let(:lines) {}
|
486
|
+
|
487
|
+
it { subject.must_equal(Vedeu::Editor::Line.new) }
|
488
|
+
end
|
489
|
+
|
490
|
+
context 'when there are lines' do
|
491
|
+
context 'and an index is not given' do
|
492
|
+
let(:index) {}
|
493
|
+
|
494
|
+
it 'returns the last line' do
|
495
|
+
subject.must_equal(Vedeu::Editor::Line.new('Other text...'))
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
499
|
+
context 'and an index is given' do
|
500
|
+
context 'and a negative index is given' do
|
501
|
+
let(:index) { -4 }
|
502
|
+
|
503
|
+
it 'returns the first line' do
|
504
|
+
subject.must_equal(Vedeu::Editor::Line.new('Some text...'))
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
context 'and an index is given' do
|
509
|
+
it { subject.must_equal(Vedeu::Editor::Line.new('More text...')) }
|
510
|
+
end
|
511
|
+
|
512
|
+
context 'and an index of the last line is given' do
|
513
|
+
let(:index) { 5 }
|
514
|
+
|
515
|
+
it { subject.must_equal(Vedeu::Editor::Line.new('Other text...')) }
|
516
|
+
end
|
517
|
+
|
518
|
+
context 'and an index greater than the number of lines is given' do
|
519
|
+
let(:index) { 10 }
|
520
|
+
|
521
|
+
it { subject.must_equal(Vedeu::Editor::Line.new('Other text...')) }
|
522
|
+
end
|
523
|
+
end
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
527
|
+
describe '#size' do
|
528
|
+
subject { instance.size }
|
529
|
+
|
530
|
+
context 'when there are no lines' do
|
531
|
+
let(:lines) {}
|
532
|
+
|
533
|
+
it { subject.must_equal(0) }
|
534
|
+
end
|
535
|
+
|
536
|
+
context 'when there are lines' do
|
537
|
+
it { subject.must_equal(3) }
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
541
|
+
describe '#to_s' do
|
542
|
+
subject { instance.to_s }
|
543
|
+
|
544
|
+
context 'when there are no lines' do
|
545
|
+
let(:lines) {}
|
546
|
+
|
547
|
+
it { subject.must_equal("") }
|
548
|
+
end
|
549
|
+
|
550
|
+
context 'when there are lines' do
|
551
|
+
let(:expected) { "Some text...More text...Other text..." }
|
552
|
+
|
553
|
+
it { subject.must_equal(expected) }
|
554
|
+
end
|
555
|
+
end
|
556
|
+
|
557
|
+
end # Lines
|
558
|
+
|
559
|
+
end # Editor
|
560
|
+
|
561
|
+
end # Vedeu
|