vedeu 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/borders.md +2 -2
- data/examples/284_slow_rendering.rb +2 -2
- data/examples/dsl_alignment.rb +9 -9
- data/examples/dsl_colours.rb +13 -13
- data/examples/dsl_editor.rb +10 -10
- data/lib/vedeu/borders/dsl.rb +84 -0
- data/lib/vedeu/buffers/empty.rb +3 -3
- data/lib/vedeu/buffers/terminal.rb +1 -1
- data/lib/vedeu/buffers/view.rb +1 -1
- data/lib/vedeu/cells/borders/all.rb +1 -0
- data/lib/vedeu/cells/borders/bottom_left.rb +1 -6
- data/lib/vedeu/cells/borders/bottom_right.rb +1 -6
- data/lib/vedeu/cells/borders/corner.rb +20 -0
- data/lib/vedeu/cells/borders/top_left.rb +1 -6
- data/lib/vedeu/cells/borders/top_right.rb +1 -6
- data/lib/vedeu/cells/empty.rb +22 -0
- data/lib/vedeu/cells/escape.rb +47 -0
- data/lib/vedeu/cursors/cursor.rb +6 -6
- data/lib/vedeu/dsl/text.rb +12 -1
- data/lib/vedeu/events/trigger.rb +4 -2
- data/lib/vedeu/input/capture.rb +1 -1
- data/lib/vedeu/input/mouse.rb +3 -2
- data/lib/vedeu/models/all.rb +0 -2
- data/lib/vedeu/models/row.rb +1 -1
- data/lib/vedeu/output/output.rb +8 -8
- data/lib/vedeu/output/text.rb +23 -2
- data/lib/vedeu/renderers/html.rb +4 -4
- data/lib/vedeu/runtime/launcher.rb +1 -1
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/borders/dsl_test.rb +40 -0
- data/test/lib/vedeu/buffers/empty_test.rb +1 -1
- data/test/lib/vedeu/cells/borders/bottom_left_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/bottom_right_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/corner_test.rb +57 -0
- data/test/lib/vedeu/cells/borders/top_left_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/top_right_test.rb +0 -14
- data/test/lib/vedeu/cells/empty_test.rb +33 -0
- data/test/lib/vedeu/cells/escape_test.rb +74 -0
- data/test/lib/vedeu/cursors/cursor_test.rb +17 -11
- data/test/lib/vedeu/dsl/text_test.rb +1 -0
- data/test/lib/vedeu/models/row_test.rb +1 -1
- data/test/lib/vedeu/output/compressor_test.rb +2 -2
- data/test/lib/vedeu/output/output_test.rb +2 -2
- data/test/lib/vedeu/renderers/all_test.rb +2 -2
- data/test/lib/vedeu/renderers/terminal_test.rb +6 -6
- data/test/support/examples/material_colours_app.rb +13 -10
- metadata +4 -7
- data/lib/vedeu/models/cell.rb +0 -91
- data/lib/vedeu/models/escape.rb +0 -90
- data/test/lib/vedeu/models/cell_test.rb +0 -117
- data/test/lib/vedeu/models/escape_test.rb +0 -87
@@ -9,20 +9,6 @@ module Vedeu
|
|
9
9
|
let(:described) { Vedeu::Cells::BottomRight }
|
10
10
|
let(:instance) { described.new }
|
11
11
|
|
12
|
-
describe '#position' do
|
13
|
-
let(:geometry) {
|
14
|
-
Vedeu::Geometries::Geometry.new(x: 5, xn: 15, y: 3, yn: 9)
|
15
|
-
}
|
16
|
-
|
17
|
-
subject { instance.position }
|
18
|
-
|
19
|
-
before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
|
20
|
-
|
21
|
-
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
22
|
-
it { subject.x.must_equal(15) }
|
23
|
-
it { subject.y.must_equal(9) }
|
24
|
-
end
|
25
|
-
|
26
12
|
describe '#type' do
|
27
13
|
subject { instance.type }
|
28
14
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Cells
|
6
|
+
|
7
|
+
describe Corner do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Cells::Corner }
|
10
|
+
|
11
|
+
describe '#position' do
|
12
|
+
let(:geometry) {
|
13
|
+
Vedeu::Geometries::Geometry.new(x: 5, xn: 15, y: 3, yn: 9)
|
14
|
+
}
|
15
|
+
|
16
|
+
before { instance.stubs(:geometry).returns(geometry) }
|
17
|
+
|
18
|
+
subject { instance.position }
|
19
|
+
|
20
|
+
context 'when providing the position for the bottom left corner' do
|
21
|
+
let(:instance) { Vedeu::Cells::BottomLeft.new }
|
22
|
+
|
23
|
+
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
24
|
+
it { subject.x.must_equal(5) }
|
25
|
+
it { subject.y.must_equal(9) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when providing the position for the bottom right corner' do
|
29
|
+
let(:instance) { Vedeu::Cells::BottomRight.new }
|
30
|
+
|
31
|
+
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
32
|
+
it { subject.x.must_equal(15) }
|
33
|
+
it { subject.y.must_equal(9) }
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when providing the position for the top left corner' do
|
37
|
+
let(:instance) { Vedeu::Cells::TopLeft.new }
|
38
|
+
|
39
|
+
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
40
|
+
it { subject.x.must_equal(5) }
|
41
|
+
it { subject.y.must_equal(3) }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when providing the position for the top right corner' do
|
45
|
+
let(:instance) { Vedeu::Cells::TopRight.new }
|
46
|
+
|
47
|
+
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
48
|
+
it { subject.x.must_equal(15) }
|
49
|
+
it { subject.y.must_equal(3) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end # Corner
|
54
|
+
|
55
|
+
end # Cells
|
56
|
+
|
57
|
+
end # Vedeu
|
@@ -9,20 +9,6 @@ module Vedeu
|
|
9
9
|
let(:described) { Vedeu::Cells::TopLeft }
|
10
10
|
let(:instance) { described.new }
|
11
11
|
|
12
|
-
describe '#position' do
|
13
|
-
let(:geometry) {
|
14
|
-
Vedeu::Geometries::Geometry.new(x: 5, xn: 15, y: 3, yn: 9)
|
15
|
-
}
|
16
|
-
|
17
|
-
subject { instance.position }
|
18
|
-
|
19
|
-
before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
|
20
|
-
|
21
|
-
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
22
|
-
it { subject.x.must_equal(5) }
|
23
|
-
it { subject.y.must_equal(3) }
|
24
|
-
end
|
25
|
-
|
26
12
|
describe '#type' do
|
27
13
|
subject { instance.type }
|
28
14
|
|
@@ -9,20 +9,6 @@ module Vedeu
|
|
9
9
|
let(:described) { Vedeu::Cells::TopRight }
|
10
10
|
let(:instance) { described.new }
|
11
11
|
|
12
|
-
describe '#position' do
|
13
|
-
let(:geometry) {
|
14
|
-
Vedeu::Geometries::Geometry.new(x: 5, xn: 15, y: 3, yn: 9)
|
15
|
-
}
|
16
|
-
|
17
|
-
subject { instance.position }
|
18
|
-
|
19
|
-
before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
|
20
|
-
|
21
|
-
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
22
|
-
it { subject.x.must_equal(15) }
|
23
|
-
it { subject.y.must_equal(3) }
|
24
|
-
end
|
25
|
-
|
26
12
|
describe '#type' do
|
27
13
|
subject { instance.type }
|
28
14
|
|
@@ -48,6 +48,39 @@ module Vedeu
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
describe '#to_hash' do
|
52
|
+
let(:position) { [1, 1] }
|
53
|
+
let(:colour) { Vedeu::Colours::Colour.new(background: '#000000') }
|
54
|
+
let(:expected) {
|
55
|
+
{
|
56
|
+
colour: "\e[48;2;0;0;0m",
|
57
|
+
style: '',
|
58
|
+
value: '',
|
59
|
+
position: "\e[1;1H",
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
subject { instance.to_hash }
|
64
|
+
|
65
|
+
it { subject.must_be_instance_of(Hash) }
|
66
|
+
it { subject.must_equal(expected) }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#to_html' do
|
70
|
+
subject { instance.to_html }
|
71
|
+
|
72
|
+
it { subject.must_be_instance_of(String) }
|
73
|
+
it { subject.must_equal('') }
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#to_s' do
|
77
|
+
subject { instance.to_s }
|
78
|
+
|
79
|
+
it { instance.must_respond_to(:to_str) }
|
80
|
+
it { subject.must_be_instance_of(String) }
|
81
|
+
it { subject.must_equal('') }
|
82
|
+
end
|
83
|
+
|
51
84
|
end # Empty
|
52
85
|
|
53
86
|
end # Cells
|
@@ -6,6 +6,80 @@ module Vedeu
|
|
6
6
|
|
7
7
|
describe Escape do
|
8
8
|
|
9
|
+
let(:described) { Vedeu::Cells::Escape }
|
10
|
+
let(:instance) { described.new(attributes) }
|
11
|
+
let(:attributes) {
|
12
|
+
{
|
13
|
+
position: position,
|
14
|
+
value: _value,
|
15
|
+
}
|
16
|
+
}
|
17
|
+
let(:position) { [2, 6] }
|
18
|
+
let(:_value) { "\e[?25h" }
|
19
|
+
|
20
|
+
describe '#initialize' do
|
21
|
+
it { instance.must_be_instance_of(described) }
|
22
|
+
it { instance.instance_variable_get('@position').must_equal(position) }
|
23
|
+
it { instance.instance_variable_get('@value').must_equal(_value) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#cell?' do
|
27
|
+
it { instance.cell?.must_equal(false) }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#null' do
|
31
|
+
it { instance.null.must_equal(nil) }
|
32
|
+
it { instance.background.must_equal(nil) }
|
33
|
+
it { instance.colour.must_equal(nil) }
|
34
|
+
it { instance.foreground.must_equal(nil) }
|
35
|
+
it { instance.style.must_equal(nil) }
|
36
|
+
end
|
37
|
+
|
38
|
+
# describe '#eql?' do
|
39
|
+
# let(:other) { instance }
|
40
|
+
|
41
|
+
# subject { instance.eql?(other) }
|
42
|
+
|
43
|
+
# it { subject.must_equal(true) }
|
44
|
+
|
45
|
+
# context 'when different to other' do
|
46
|
+
# let(:other) { described.new(value: 'b') }
|
47
|
+
|
48
|
+
# it { subject.must_equal(false) }
|
49
|
+
# end
|
50
|
+
|
51
|
+
# it { instance.must_respond_to(:==) }
|
52
|
+
# end
|
53
|
+
|
54
|
+
describe '#value' do
|
55
|
+
subject { instance.value }
|
56
|
+
|
57
|
+
it { subject.must_be_instance_of(String) }
|
58
|
+
it { subject.must_equal("\e[?25h") }
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#to_hash' do
|
62
|
+
subject { instance.to_hash }
|
63
|
+
|
64
|
+
it { subject.must_be_instance_of(Hash) }
|
65
|
+
it { subject.must_equal({}) }
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#to_html' do
|
69
|
+
subject { instance.to_html }
|
70
|
+
|
71
|
+
it { subject.must_be_instance_of(String) }
|
72
|
+
it { subject.must_equal('') }
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#to_s' do
|
76
|
+
subject { instance.to_s }
|
77
|
+
|
78
|
+
it { subject.must_be_instance_of(String) }
|
79
|
+
it { subject.must_equal("\e[2;6H\e[?25h") }
|
80
|
+
it { instance.must_respond_to(:to_str) }
|
81
|
+
end
|
82
|
+
|
9
83
|
end # Escape
|
10
84
|
|
11
85
|
end # Cells
|
@@ -102,19 +102,22 @@ module Vedeu
|
|
102
102
|
end
|
103
103
|
|
104
104
|
describe '#hide' do
|
105
|
-
let(:visible)
|
106
|
-
let(:
|
107
|
-
Vedeu::
|
108
|
-
|
105
|
+
let(:visible) { true }
|
106
|
+
let(:escape) {
|
107
|
+
Vedeu::Cells::Escape.
|
108
|
+
new(value: Vedeu::EscapeSequences::Esc.hide_cursor)
|
109
109
|
}
|
110
110
|
|
111
111
|
before do
|
112
|
-
Vedeu.stubs(:
|
112
|
+
Vedeu::Cells::Escape.stubs(:new).returns(escape)
|
113
113
|
end
|
114
114
|
|
115
115
|
subject { instance.hide }
|
116
116
|
|
117
|
-
it {
|
117
|
+
it {
|
118
|
+
Vedeu.expects(:render_output).with(escape)
|
119
|
+
subject
|
120
|
+
}
|
118
121
|
end
|
119
122
|
|
120
123
|
describe '#inspect' do
|
@@ -241,18 +244,21 @@ module Vedeu
|
|
241
244
|
|
242
245
|
describe '#show' do
|
243
246
|
let(:visible) { false }
|
244
|
-
let(:
|
245
|
-
Vedeu::
|
246
|
-
|
247
|
+
let(:escape) {
|
248
|
+
Vedeu::Cells::Escape.
|
249
|
+
new(value: Vedeu::EscapeSequences::Esc.show_cursor)
|
247
250
|
}
|
248
251
|
|
249
252
|
before do
|
250
|
-
Vedeu.stubs(:
|
253
|
+
Vedeu::Cells::Escape.stubs(:new).returns(escape)
|
251
254
|
end
|
252
255
|
|
253
256
|
subject { instance.show }
|
254
257
|
|
255
|
-
it {
|
258
|
+
it {
|
259
|
+
Vedeu.expects(:render_output).with(escape)
|
260
|
+
subject
|
261
|
+
}
|
256
262
|
end
|
257
263
|
|
258
264
|
describe '#to_a' do
|
@@ -91,7 +91,7 @@ module Vedeu
|
|
91
91
|
let(:output) {
|
92
92
|
Vedeu::Models::Page.coerce([
|
93
93
|
Vedeu::Views::Char.new(name: _name, value: 'N', position: [1, 1]),
|
94
|
-
Vedeu::
|
94
|
+
Vedeu::Cells::Escape.new(value: "\e[?25l"),
|
95
95
|
Vedeu::Views::Char.new(name: _name, value: 't', position: [1, 3]),
|
96
96
|
])
|
97
97
|
}
|
@@ -164,7 +164,7 @@ module Vedeu
|
|
164
164
|
let(:output) {
|
165
165
|
Vedeu::Models::Page.coerce([
|
166
166
|
Vedeu::Views::Char.new(name: _name, value: 'N'),
|
167
|
-
Vedeu::
|
167
|
+
Vedeu::Cells::Escape.new(value: "\e[?25l"),
|
168
168
|
Vedeu::Views::Char.new(name: _name, value: 't'),
|
169
169
|
])
|
170
170
|
}
|
@@ -42,7 +42,7 @@ module Vedeu
|
|
42
42
|
|
43
43
|
context 'when the output is not empty' do
|
44
44
|
let(:output) {
|
45
|
-
Vedeu::
|
45
|
+
Vedeu::Cells::Escape.new(value: "\e[?25h", position: [1, 1])
|
46
46
|
}
|
47
47
|
|
48
48
|
it do
|
@@ -62,7 +62,7 @@ module Vedeu
|
|
62
62
|
context 'when the output is not empty' do
|
63
63
|
context 'and the output is an escape sequence' do
|
64
64
|
let(:output) {
|
65
|
-
Vedeu::
|
65
|
+
Vedeu::Cells::Escape.new(value: "\e[?25h", position: [1, 1])
|
66
66
|
}
|
67
67
|
|
68
68
|
it do
|
@@ -78,7 +78,7 @@ module Vedeu
|
|
78
78
|
|
79
79
|
context 'when there is content' do
|
80
80
|
let(:output) {
|
81
|
-
Vedeu::
|
81
|
+
Vedeu::Cells::Escape
|
82
82
|
.new(value: Vedeu::EscapeSequences::Esc.hide_cursor)
|
83
83
|
}
|
84
84
|
|
@@ -93,7 +93,7 @@ module Vedeu
|
|
93
93
|
subject
|
94
94
|
end
|
95
95
|
|
96
|
-
it { subject.must_be_instance_of(Vedeu::
|
96
|
+
it { subject.must_be_instance_of(Vedeu::Cells::Escape) }
|
97
97
|
end
|
98
98
|
|
99
99
|
context 'when there is no content' do
|
@@ -13,17 +13,17 @@ module Vedeu
|
|
13
13
|
let(:output) {
|
14
14
|
Vedeu::Models::Page.coerce([
|
15
15
|
[
|
16
|
-
Vedeu::
|
16
|
+
Vedeu::Cells::Empty.new(position: [1, 1]),
|
17
17
|
Vedeu::Views::Char.new(name: _name, value: 'a', position: [1, 2]),
|
18
|
-
Vedeu::
|
18
|
+
Vedeu::Cells::Empty.new(position: [1, 3]),
|
19
19
|
], [
|
20
|
-
Vedeu::
|
20
|
+
Vedeu::Cells::Empty.new(position: [2, 1]),
|
21
21
|
Vedeu::Views::Char.new(name: _name, value: 'b', position: [2, 2]),
|
22
|
-
Vedeu::
|
22
|
+
Vedeu::Cells::Empty.new(position: [2, 3]),
|
23
23
|
], [
|
24
|
-
Vedeu::
|
24
|
+
Vedeu::Cells::Empty.new(position: [3, 1]),
|
25
25
|
Vedeu::Views::Char.new(name: _name, value: 'c', position: [3, 2]),
|
26
|
-
Vedeu::
|
26
|
+
Vedeu::Cells::Empty.new(position: [3, 3]),
|
27
27
|
],
|
28
28
|
])
|
29
29
|
}
|
@@ -329,10 +329,10 @@ class VedeuMaterialColoursApp
|
|
329
329
|
|
330
330
|
Vedeu.renders do
|
331
331
|
view 'main_interface' do
|
332
|
-
line {
|
333
|
-
line { centre '
|
334
|
-
line {
|
335
|
-
line {
|
332
|
+
line { left 'Left', background: '#f44336' }
|
333
|
+
line { centre 'Centre', background: '#e91e63' }
|
334
|
+
line { center 'Center', background: '#9c27b0' }
|
335
|
+
line { right 'Right', background: '#673ab7' }
|
336
336
|
line { centre 'Indigo', width: 20, background: '#3f51b5' }
|
337
337
|
line { centre 'Blue', width: 20, background: '#2196f3' }
|
338
338
|
line { centre 'Light Blue', width: 20, background: '#03a9f4' }
|
@@ -516,10 +516,10 @@ class VedeuMaterialColoursApp
|
|
516
516
|
view('custom_corners') do
|
517
517
|
border do
|
518
518
|
foreground '#000000'
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
519
|
+
top_left 'A', colour: { background: '#ff5722' }
|
520
|
+
top_right 'B', colour: { background: '#0000ff', foreground: '#ffffff' }
|
521
|
+
bottom_left 'C', colour: { background: '#ffff00', foreground: '#000000' }
|
522
|
+
bottom_right 'D', colour: { background: '#ffffff' }
|
523
523
|
end
|
524
524
|
lines do
|
525
525
|
line 'custom'
|
@@ -529,8 +529,11 @@ class VedeuMaterialColoursApp
|
|
529
529
|
view('custom_sides') do
|
530
530
|
border do
|
531
531
|
background '#ff5722'
|
532
|
-
|
533
|
-
|
532
|
+
|
533
|
+
top_horizontal '*', colour: { background: '#000000', foreground: '#ffffff' }
|
534
|
+
left_vertical '$', colour: { background: '#0000ff', foreground: '#ffffff' }
|
535
|
+
right_vertical '%', colour: { background: '#ffff00', foreground: '#000000' }
|
536
|
+
bottom_horizontal '&', colour: { background: '#ffffff' }
|
534
537
|
end
|
535
538
|
lines do
|
536
539
|
line 'custom'
|