vedeu 0.4.9 → 0.4.10

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/api.rb +8 -0
  3. data/lib/vedeu/application.rb +2 -0
  4. data/lib/vedeu/bindings.rb +3 -0
  5. data/lib/vedeu/configuration/configuration.rb +1 -1
  6. data/lib/vedeu/cursor/cursor.rb +1 -1
  7. data/lib/vedeu/cursor/move.rb +1 -1
  8. data/lib/vedeu/cursor/refresh_cursor.rb +2 -0
  9. data/lib/vedeu/cursor/toggle.rb +1 -1
  10. data/lib/vedeu/debug.rb +36 -1
  11. data/lib/vedeu/distributed/client.rb +2 -0
  12. data/lib/vedeu/distributed/subprocess.rb +2 -0
  13. data/lib/vedeu/distributed/test_application.rb +2 -0
  14. data/lib/vedeu/distributed/uri.rb +2 -0
  15. data/lib/vedeu/events/event.rb +1 -1
  16. data/lib/vedeu/events/trigger.rb +2 -0
  17. data/lib/vedeu/geometry/all.rb +0 -1
  18. data/lib/vedeu/geometry/area.rb +22 -0
  19. data/lib/vedeu/geometry/centre.rb +2 -0
  20. data/lib/vedeu/geometry/content.rb +2 -0
  21. data/lib/vedeu/geometry/coordinate.rb +2 -0
  22. data/lib/vedeu/geometry/dimension.rb +2 -0
  23. data/lib/vedeu/geometry/geometry.rb +8 -3
  24. data/lib/vedeu/geometry/grid.rb +2 -0
  25. data/lib/vedeu/geometry/index_position.rb +21 -0
  26. data/lib/vedeu/geometry/limit.rb +2 -0
  27. data/lib/vedeu/geometry/position.rb +1 -1
  28. data/lib/vedeu/geometry/position_index.rb +2 -0
  29. data/lib/vedeu/geometry/position_validator.rb +2 -0
  30. data/lib/vedeu/input/input.rb +1 -1
  31. data/lib/vedeu/input/key.rb +1 -1
  32. data/lib/vedeu/input/keymap.rb +2 -0
  33. data/lib/vedeu/input/mapper.rb +8 -0
  34. data/lib/vedeu/launcher.rb +2 -0
  35. data/lib/vedeu/main_loop.rb +1 -3
  36. data/lib/vedeu/models/cell.rb +2 -0
  37. data/lib/vedeu/models/composition.rb +1 -1
  38. data/lib/vedeu/models/group.rb +1 -1
  39. data/lib/vedeu/models/interface.rb +35 -3
  40. data/lib/vedeu/models/line.rb +6 -1
  41. data/lib/vedeu/models/menu.rb +1 -1
  42. data/lib/vedeu/models/stream.rb +6 -17
  43. data/lib/vedeu/output/all.rb +3 -2
  44. data/lib/vedeu/output/background.rb +26 -0
  45. data/lib/vedeu/output/border.rb +105 -25
  46. data/lib/vedeu/output/clear.rb +17 -10
  47. data/lib/vedeu/output/colour.rb +1 -1
  48. data/lib/vedeu/output/compositor.rb +4 -1
  49. data/lib/vedeu/output/foreground.rb +26 -0
  50. data/lib/vedeu/output/html_char.rb +2 -0
  51. data/lib/vedeu/output/null_border.rb +49 -0
  52. data/lib/vedeu/output/output.rb +8 -44
  53. data/lib/vedeu/output/renderers/all.rb +3 -0
  54. data/lib/vedeu/output/{renderer.rb → renderers/file_renderer.rb} +14 -6
  55. data/lib/vedeu/output/{html_renderer.rb → renderers/html_renderer.rb} +3 -1
  56. data/lib/vedeu/output/renderers/terminal_renderer.rb +50 -0
  57. data/lib/vedeu/output/text.rb +1 -1
  58. data/lib/vedeu/output/translator.rb +21 -2
  59. data/lib/vedeu/output/viewport.rb +17 -50
  60. data/lib/vedeu/output/virtual_terminal.rb +2 -0
  61. data/lib/vedeu/output/wordwrap.rb +2 -0
  62. data/lib/vedeu/repositories/all.rb +82 -0
  63. data/lib/vedeu/repositories/collection.rb +16 -0
  64. data/lib/vedeu/repositories/repository.rb +2 -0
  65. data/lib/vedeu/support/log.rb +3 -0
  66. data/lib/vedeu/support/sentence.rb +2 -0
  67. data/lib/vedeu/support/template.rb +2 -0
  68. data/lib/vedeu/support/terminal.rb +6 -1
  69. data/lib/vedeu/support/trace.rb +2 -0
  70. data/lib/vedeu/support/visible.rb +6 -0
  71. data/test/lib/vedeu/dsl/components/border_test.rb +0 -270
  72. data/test/lib/vedeu/dsl/shared/text_test.rb +19 -0
  73. data/test/lib/vedeu/geometry/area_test.rb +32 -0
  74. data/test/lib/vedeu/geometry/index_position_test.rb +36 -0
  75. data/test/lib/vedeu/models/interface_test.rb +42 -1
  76. data/test/lib/vedeu/models/line_test.rb +15 -1
  77. data/test/lib/vedeu/models/stream_test.rb +15 -1
  78. data/test/lib/vedeu/output/background_test.rb +4 -2
  79. data/test/lib/vedeu/output/border_test.rb +229 -127
  80. data/test/lib/vedeu/output/clear_test.rb +14 -0
  81. data/test/lib/vedeu/output/foreground_test.rb +4 -2
  82. data/test/lib/vedeu/output/null_border_test.rb +53 -0
  83. data/test/lib/vedeu/output/output_test.rb +2 -0
  84. data/test/lib/vedeu/output/{renderer_test.rb → renderers/file_renderer_test.rb} +5 -5
  85. data/test/lib/vedeu/output/renderers/html_renderer_test.rb +71 -0
  86. data/test/lib/vedeu/output/renderers/terminal_renderer_test.rb +24 -0
  87. data/test/lib/vedeu/output/viewport_test.rb +100 -74
  88. data/vedeu.gemspec +1 -1
  89. metadata +15 -11
  90. data/lib/vedeu/geometry/bounding_area.rb +0 -136
  91. data/test/lib/vedeu/geometry/bounding_area_test.rb +0 -123
  92. data/test/lib/vedeu/output/html_renderer_test.rb +0 -42
@@ -4,9 +4,28 @@ module Vedeu
4
4
 
5
5
  module DSL
6
6
 
7
+ class TextTestClass
8
+ include Vedeu::DSL::Text
9
+
10
+ end
11
+
7
12
  describe Text do
8
13
 
14
+ let(:instance) { Vedeu::DSL::TextTestClass.new }
15
+ let(:value) {}
16
+ let(:options) { {} }
17
+
9
18
  describe '#text' do
19
+ subject { instance.text(value, options) }
20
+
21
+ context 'when the model is a Vedeu::Interface' do
22
+ end
23
+
24
+ context 'when the model is a Vedeu::Line' do
25
+ end
26
+
27
+ context 'when the model is a Vedeu::Stream' do
28
+ end
10
29
  end
11
30
 
12
31
  end # Text
@@ -182,6 +182,38 @@ module Vedeu
182
182
  end
183
183
  end
184
184
 
185
+ describe '#top_left' do
186
+ subject { instance.top_left }
187
+
188
+ it { subject.must_be_instance_of(Vedeu::Position) }
189
+ it { subject.y.must_equal(4) }
190
+ it { subject.x.must_equal(6) }
191
+ end
192
+
193
+ describe '#bottom_left' do
194
+ subject { instance.bottom_left }
195
+
196
+ it { subject.must_be_instance_of(Vedeu::Position) }
197
+ it { subject.y.must_equal(9) }
198
+ it { subject.x.must_equal(6) }
199
+ end
200
+
201
+ describe '#top_right' do
202
+ subject { instance.top_right }
203
+
204
+ it { subject.must_be_instance_of(Vedeu::Position) }
205
+ it { subject.y.must_equal(4) }
206
+ it { subject.x.must_equal(21) }
207
+ end
208
+
209
+ describe '#bottom_right' do
210
+ subject { instance.bottom_right }
211
+
212
+ it { subject.must_be_instance_of(Vedeu::Position) }
213
+ it { subject.y.must_equal(9) }
214
+ it { subject.x.must_equal(21) }
215
+ end
216
+
185
217
  end # Area
186
218
 
187
219
  end # Vedeu
@@ -30,6 +30,42 @@ module Vedeu
30
30
  it { subject.must_be_instance_of(Vedeu::Position) }
31
31
  end
32
32
 
33
+ describe '.from_interface' do
34
+ let(:ix) { 3 }
35
+ let(:iy) { 3 }
36
+ let(:_name) { 'IndexPosition.from_interface' }
37
+
38
+ before do
39
+ Vedeu.borders.reset
40
+ Vedeu.interfaces.reset
41
+ Vedeu.interface('IndexPosition.from_interface') do
42
+ geometry do
43
+ x 4
44
+ y 6
45
+ xn 10
46
+ yn 12
47
+ end
48
+ end
49
+ end
50
+ after { Vedeu.interfaces.reset }
51
+
52
+ subject { described.from_interface(_name, iy, ix) }
53
+
54
+ it { subject.must_be_instance_of(Vedeu::Position) }
55
+
56
+ context 'when the interface has a border' do
57
+ before { Vedeu.border('IndexPosition.from_interface') {} }
58
+
59
+ it { subject.x.must_equal(8) }
60
+ it { subject.y.must_equal(10) }
61
+ end
62
+
63
+ context 'when the interface does not have a border' do
64
+ it { subject.x.must_equal(7) }
65
+ it { subject.y.must_equal(9) }
66
+ end
67
+ end
68
+
33
69
  describe '#[]' do
34
70
  subject { instance.[] }
35
71
 
@@ -51,16 +51,45 @@ module Vedeu
51
51
  subject { instance.border? }
52
52
 
53
53
  context 'when the interface has a border' do
54
- before { Vedeu.borders.stubs(:registered?).with(_name).returns(true) }
54
+ before { Vedeu.border('hydrogen') { } }
55
+ after { Vedeu.borders.reset }
55
56
 
56
57
  it { subject.must_equal(true) }
57
58
  end
58
59
 
59
60
  context 'when the interface does not have a border' do
61
+ before { Vedeu.borders.reset }
62
+
60
63
  it { subject.must_equal(false) }
61
64
  end
62
65
  end
63
66
 
67
+ describe '#border' do
68
+ subject { instance.border }
69
+
70
+ context 'when the interface has a border' do
71
+ before { Vedeu.border('hydrogen') { } }
72
+ after { Vedeu.borders.reset }
73
+
74
+ it { subject.must_be_instance_of(Vedeu::Border) }
75
+ end
76
+
77
+ context 'when the interface does not have a border' do
78
+ before { Vedeu.borders.reset }
79
+
80
+ it { subject.must_be_instance_of(Vedeu::NullBorder) }
81
+ end
82
+ end
83
+
84
+ describe '#clear' do
85
+ subject { instance.clear }
86
+
87
+ it {
88
+ Vedeu::Clear.expects(:render).with(instance)
89
+ subject
90
+ }
91
+ end
92
+
64
93
  describe '#lines?' do
65
94
  subject { instance.lines? }
66
95
 
@@ -81,6 +110,10 @@ module Vedeu
81
110
  it { subject.must_be_instance_of(Vedeu::Cursor) }
82
111
  end
83
112
 
113
+ describe '#render' do
114
+ subject { instance.render }
115
+ end
116
+
84
117
  describe '#store' do
85
118
  subject { instance.store }
86
119
 
@@ -89,7 +122,15 @@ module Vedeu
89
122
 
90
123
  it { proc { subject }.must_raise(MissingRequired) }
91
124
  end
125
+ end
92
126
 
127
+ describe '#viewport' do
128
+ subject { instance.viewport }
129
+
130
+ it {
131
+ Vedeu::Viewport.expects(:render).with(instance)
132
+ subject
133
+ }
93
134
  end
94
135
 
95
136
  end # Interface
@@ -33,7 +33,7 @@ module Vedeu
33
33
 
34
34
  let(:streams_parent) { Line.new({ streams: nil, parent: parent, colour: colour, style: style }) }
35
35
 
36
- let(:parent) { Vedeu::Interface.new }
36
+ let(:parent) { Vedeu::Interface.new({ name: 'Vedeu::Line' }) }
37
37
  let(:colour) { Colour.new({ foreground: '#ff0000', background: '#000000' }) }
38
38
  let(:style) { Style.new('normal') }
39
39
 
@@ -80,6 +80,20 @@ module Vedeu
80
80
  end
81
81
  end
82
82
 
83
+ describe '#name' do
84
+ subject { instance.name }
85
+
86
+ context 'when a parent is defined' do
87
+ it { subject.must_be_instance_of(String) }
88
+ end
89
+
90
+ context 'when a parent is not defined' do
91
+ before { instance.stubs(:parent) }
92
+
93
+ it { subject.must_be_instance_of(NilClass) }
94
+ end
95
+ end
96
+
83
97
  describe '#size' do
84
98
  subject { instance.size }
85
99
 
@@ -25,7 +25,7 @@ module Vedeu
25
25
  }
26
26
  let(:colour) { Colour.new({ background: '#ff0000', foreground: '#000000' }) }
27
27
  let(:style) { Style.new('normal') }
28
- let(:line_parent) { Vedeu::Interface.new }
28
+ let(:line_parent) { Vedeu::Interface.new({ name: 'Vedeu::Stream' }) }
29
29
 
30
30
  describe '#initialize' do
31
31
  it { instance.must_be_instance_of(described) }
@@ -75,6 +75,20 @@ module Vedeu
75
75
  end
76
76
  end
77
77
 
78
+ describe '#name' do
79
+ subject { instance.name }
80
+
81
+ context 'when a parent is defined' do
82
+ it { subject.must_be_instance_of(String) }
83
+ end
84
+
85
+ context 'when a parent is not defined' do
86
+ before { instance.stubs(:parent) }
87
+
88
+ it { subject.must_be_instance_of(NilClass) }
89
+ end
90
+ end
91
+
78
92
  describe '#size' do
79
93
  subject { instance.size }
80
94
 
@@ -5,8 +5,10 @@ module Vedeu
5
5
  describe Background do
6
6
 
7
7
  let(:described) { Vedeu::Background }
8
- let(:instance) { described.new(colour) }
9
- let(:colour) {}
8
+ let(:instance) { described.new(colour) }
9
+ let(:colour) {}
10
+
11
+ before { Vedeu.background_colours.reset! }
10
12
 
11
13
  describe '.escape_sequence' do
12
14
  describe 'when the colour is empty' do
@@ -68,6 +68,132 @@ module Vedeu
68
68
  it { instance.instance_variable_get('@style').must_equal([]) }
69
69
  end
70
70
 
71
+ describe 'border offset methods; bx, bxn, by, byn' do
72
+ let(:attributes) {
73
+ {
74
+ bottom_left: 'C',
75
+ bottom_right: 'D',
76
+ enabled: enabled,
77
+ horizontal: 'H',
78
+ name: 'Border#bxbxnbybyn',
79
+ show_top: top,
80
+ show_bottom: bottom,
81
+ show_left: left,
82
+ show_right: right,
83
+ top_left: 'A',
84
+ top_right: 'B',
85
+ vertical: 'V'
86
+ }
87
+ }
88
+ let(:enabled) { false }
89
+ let(:top) { false }
90
+ let(:bottom) { false }
91
+ let(:left) { false }
92
+ let(:right) { false }
93
+
94
+ before do
95
+ Vedeu.interfaces.reset
96
+ Vedeu.borders.reset
97
+
98
+ Vedeu.interface('Border#bxbxnbybyn') do
99
+ geometry do
100
+ x 2
101
+ xn 6
102
+ y 2
103
+ yn 6
104
+ end
105
+ end
106
+ end
107
+
108
+ describe '#bx' do
109
+ subject { instance.bx }
110
+
111
+ context 'when enabled' do
112
+ let(:enabled) { true }
113
+
114
+ context 'with left' do
115
+ let(:left) { true }
116
+
117
+ it { subject.must_equal(3) }
118
+ end
119
+
120
+ context 'without left' do
121
+ it { subject.must_equal(2) }
122
+ end
123
+ end
124
+
125
+ context 'when not enabled' do
126
+ it { subject.must_equal(2) }
127
+ end
128
+ end
129
+
130
+ describe '#bxn' do
131
+ subject { instance.bxn }
132
+
133
+ context 'when enabled' do
134
+ let(:enabled) { true }
135
+
136
+ context 'with right' do
137
+ let(:right) { true }
138
+
139
+ it { subject.must_equal(5) }
140
+ end
141
+
142
+ context 'without right' do
143
+ it { subject.must_equal(6) }
144
+ end
145
+ end
146
+
147
+ context 'when not enabled' do
148
+ it { subject.must_equal(6) }
149
+ end
150
+ end
151
+
152
+ describe '#by' do
153
+ subject { instance.by }
154
+
155
+ context 'when enabled' do
156
+ let(:enabled) { true }
157
+
158
+ context 'with top' do
159
+ let(:top) { true }
160
+
161
+ it { subject.must_equal(3) }
162
+ end
163
+
164
+ context 'without top' do
165
+ it { subject.must_equal(2) }
166
+ end
167
+ end
168
+
169
+ context 'when not enabled' do
170
+ it { subject.must_equal(2) }
171
+ end
172
+ end
173
+
174
+ describe '#byn' do
175
+ subject { instance.byn }
176
+
177
+ context 'when enabled' do
178
+ let(:enabled) { true }
179
+
180
+ context 'with bottom' do
181
+ let(:bottom) { true }
182
+
183
+ it { subject.must_equal(5) }
184
+ end
185
+
186
+ context 'without bottom' do
187
+ it { subject.must_equal(6) }
188
+ end
189
+ end
190
+
191
+ context 'when not enabled' do
192
+ it { subject.must_equal(6) }
193
+ end
194
+ end
195
+ end
196
+
71
197
  describe '#width' do
72
198
  subject { instance.width }
73
199
 
@@ -269,163 +395,139 @@ module Vedeu
269
395
  end
270
396
  end
271
397
 
272
- describe '#to_s' do
273
- subject { instance.to_s }
274
-
275
- context 'when all borders should be shown' do
276
- before do
277
- Vedeu.border 'borders' do
278
- # ...
398
+ describe '#render' do
399
+ let(:attributes) {
400
+ {
401
+ bottom_left: 'C',
402
+ bottom_right: 'D',
403
+ enabled: enabled,
404
+ horizontal: 'H',
405
+ name: 'Border#render',
406
+ show_top: top,
407
+ show_bottom: bottom,
408
+ show_left: left,
409
+ show_right: right,
410
+ top_left: 'A',
411
+ top_right: 'B',
412
+ vertical: 'V'
413
+ }
414
+ }
415
+ let(:enabled) { false }
416
+ let(:top) { false }
417
+ let(:bottom) { false }
418
+ let(:left) { false }
419
+ let(:right) { false }
420
+
421
+ before do
422
+ Vedeu.interfaces.reset
423
+ Vedeu.borders.reset
424
+
425
+ Vedeu.interface('Border#render') do
426
+ geometry do
427
+ x 1
428
+ xn 4
429
+ y 1
430
+ yn 4
279
431
  end
280
432
  end
433
+ end
281
434
 
282
- it 'returns the escape sequences to draw a border' do
283
- subject.must_equal(
284
- "\e(0l\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0k\e(B
285
- \e(0x\e(BBeryll\e(0x\e(B
286
- \e(0x\e(BMagnes\e(0x\e(B
287
- \e(0x\e(BPluton\e(0x\e(B
288
- \e(0m\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0j\e(B"
289
- )
290
- end
435
+ subject { instance.render }
436
+
437
+ it { subject.must_be_instance_of(Array) }
438
+
439
+ context 'when the border is not enabled' do
440
+ it { subject.must_equal([]) }
291
441
  end
292
442
 
293
- context 'when no borders are shown' do
294
- before do
295
- Vedeu.border 'borders' do
296
- show_bottom false
297
- show_left false
298
- show_right false
299
- show_top false
300
- end
301
- end
443
+ context 'when the border is enabled' do
444
+ let(:enabled) { true }
302
445
 
303
- it 'returns the escape sequences to draw a border' do
304
- subject.must_equal(
305
- "Berylliu\n" \
306
- "Magnesiu\n" \
307
- "Plutoniu\n" \
308
- "Potassiu\n" \
309
- "Lanthanu"
310
- )
446
+ context 'top' do
447
+ let(:top) { true }
448
+
449
+ it { subject.size.must_equal(4) }
311
450
  end
312
- end
313
451
 
314
- context 'when the left and right border is not shown' do
315
- before do
316
- Vedeu.border 'borders' do
317
- show_left false
318
- show_right false
319
- end
452
+ context 'right' do
453
+ let(:right) { true }
454
+
455
+ it { subject.size.must_equal(4) }
320
456
  end
321
457
 
322
- it 'returns the escape sequences to draw a border' do
323
- subject.must_equal(
324
- "\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\n" \
325
- "Berylliu\n" \
326
- "Magnesiu\n" \
327
- "Plutoniu\n" \
328
- "\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B"
329
- )
458
+ context 'bottom' do
459
+ let(:bottom) { true }
460
+
461
+ it { subject.size.must_equal(4) }
330
462
  end
331
- end
332
463
 
333
- context 'when the top and bottom border is not shown' do
334
- before do
335
- Vedeu.border 'borders' do
336
- show_bottom false
337
- show_top false
338
- end
464
+ context 'left' do
465
+ let(:left) { true }
466
+
467
+ it { subject.size.must_equal(4) }
339
468
  end
340
469
 
341
- it 'returns the escape sequences to draw a border' do
342
- subject.must_equal(
343
- "\e(0x\e(BBeryll\e(0x\e(B\n" \
344
- "\e(0x\e(BMagnes\e(0x\e(B\n" \
345
- "\e(0x\e(BPluton\e(0x\e(B\n" \
346
- "\e(0x\e(BPotass\e(0x\e(B\n" \
347
- "\e(0x\e(BLantha\e(0x\e(B"
348
- )
470
+ context 'top and right' do
471
+ let(:top) { true }
472
+ let(:right) { true }
473
+
474
+ it { subject.size.must_equal(7) }
349
475
  end
350
- end
351
476
 
352
- context 'when the left border is shown, all others not shown' do
353
- before do
354
- Vedeu.border 'borders' do
355
- show_bottom false
356
- show_right false
357
- show_top false
358
- end
477
+ context 'top and right and bottom' do
478
+ let(:top) { true }
479
+ let(:right) { true }
480
+ let(:bottom) { true }
481
+
482
+ it { subject.size.must_equal(10) }
359
483
  end
360
484
 
361
- it 'returns the escape sequences to draw a border' do
362
- subject.must_equal(
363
- "\e(0x\e(BBerylli\n" \
364
- "\e(0x\e(BMagnesi\n" \
365
- "\e(0x\e(BPlutoni\n" \
366
- "\e(0x\e(BPotassi\n" \
367
- "\e(0x\e(BLanthan"
368
- )
485
+ context 'top and bottom' do
486
+ let(:top) { true }
487
+ let(:bottom) { true }
488
+
489
+ it { subject.size.must_equal(8) }
369
490
  end
370
- end
371
491
 
372
- context 'when the right border is shown, all others not shown' do
373
- before do
374
- Vedeu.border 'borders' do
375
- show_bottom false
376
- show_left false
377
- show_top false
378
- end
492
+ context 'top and left' do
493
+ let(:top) { true }
494
+ let(:left) { true }
495
+
496
+ it { subject.size.must_equal(7) }
379
497
  end
380
498
 
381
- it 'returns the escape sequences to draw a border' do
382
- subject.must_equal(
383
- "Berylli\e(0x\e(B\n" \
384
- "Magnesi\e(0x\e(B\n" \
385
- "Plutoni\e(0x\e(B\n" \
386
- "Potassi\e(0x\e(B\n" \
387
- "Lanthan\e(0x\e(B" \
388
- )
499
+ context 'right and bottom' do
500
+ let(:right) { true }
501
+ let(:bottom) { true }
502
+
503
+ it { subject.size.must_equal(7) }
389
504
  end
390
- end
391
505
 
392
- context 'when the top border is shown, all others not shown' do
393
- before do
394
- Vedeu.border 'borders' do
395
- show_bottom false
396
- show_left false
397
- show_right false
398
- end
506
+ context 'right and left' do
507
+ let(:right) { true }
508
+ let(:left) { true }
509
+
510
+ it { subject.size.must_equal(8) }
399
511
  end
400
512
 
401
- it 'returns the escape sequences to draw a border' do
402
- subject.must_equal(
403
- "\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\n" \
404
- "Berylliu\n" \
405
- "Magnesiu\n" \
406
- "Plutoniu\n" \
407
- "Potassiu"
408
- )
513
+ context 'bottom and left' do
514
+ let(:bottom) { true }
515
+ let(:left) { true }
516
+
517
+ it { subject.size.must_equal(7) }
409
518
  end
410
- end
411
519
 
412
- context 'when the bottom border is shown, all others not shown' do
413
- before do
414
- Vedeu.border 'borders' do
415
- show_left false
416
- show_right false
417
- show_top false
418
- end
520
+ context 'all' do
521
+ let(:top) { true }
522
+ let(:right) { true }
523
+ let(:bottom) { true }
524
+ let(:left) { true }
525
+
526
+ it { subject.size.must_equal(12) }
419
527
  end
420
528
 
421
- it 'returns the escape sequences to draw a border' do
422
- subject.must_equal(
423
- "Berylliu\n" \
424
- "Magnesiu\n" \
425
- "Plutoniu\n" \
426
- "Potassiu\n" \
427
- "\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B"
428
- )
529
+ context 'none' do
530
+ it { subject.size.must_equal(0) }
429
531
  end
430
532
  end
431
533
  end