vedeu 0.2.11 → 0.2.12
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/examples/borders_app.rb +171 -0
- data/lib/vedeu.rb +1 -1
- data/lib/vedeu/api/interface.rb +12 -0
- data/lib/vedeu/api/menu.rb +1 -1
- data/lib/vedeu/colours/colour.rb +1 -1
- data/lib/vedeu/models/border.rb +238 -0
- data/lib/vedeu/models/char.rb +1 -1
- data/lib/vedeu/models/composition.rb +1 -1
- data/lib/vedeu/models/geometry.rb +1 -1
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/models/stream.rb +1 -1
- data/lib/vedeu/output/output.rb +1 -1
- data/lib/vedeu/output/viewport.rb +34 -3
- data/lib/vedeu/repositories/models/cursor.rb +34 -7
- data/lib/vedeu/repositories/models/event.rb +1 -1
- data/lib/vedeu/repositories/models/group.rb +1 -1
- data/lib/vedeu/repositories/models/interface.rb +14 -6
- data/lib/vedeu/repositories/models/keymap.rb +1 -1
- data/lib/vedeu/repositories/models/offset.rb +1 -1
- data/lib/vedeu/support/trace.rb +1 -1
- data/test/integration/views/basic_view_test.rb +19 -0
- data/test/lib/vedeu/api/api_test.rb +6 -5
- data/test/lib/vedeu/api/helpers_test.rb +2 -6
- data/test/lib/vedeu/api/interface_test.rb +53 -45
- data/test/lib/vedeu/api/menu_test.rb +6 -0
- data/test/lib/vedeu/api/stream_test.rb +1 -3
- data/test/lib/vedeu/application_test.rb +6 -12
- data/test/lib/vedeu/colours/colour_test.rb +16 -5
- data/test/lib/vedeu/colours/translator_test.rb +7 -2
- data/test/lib/vedeu/configuration/cli_test.rb +9 -0
- data/test/lib/vedeu/input/input_test.rb +5 -5
- data/test/lib/vedeu/launcher_test.rb +9 -3
- data/test/lib/vedeu/models/border_test.rb +197 -0
- data/test/lib/vedeu/models/char_test.rb +18 -15
- data/test/lib/vedeu/models/composition_test.rb +6 -7
- data/test/lib/vedeu/models/geometry_test.rb +43 -49
- data/test/lib/vedeu/models/key_test.rb +7 -5
- data/test/lib/vedeu/models/line_test.rb +12 -16
- data/test/lib/vedeu/models/stream_test.rb +20 -10
- data/test/lib/vedeu/models/style_test.rb +9 -10
- data/test/lib/vedeu/output/compositor_test.rb +7 -22
- data/test/lib/vedeu/output/output_test.rb +34 -33
- data/test/lib/vedeu/output/viewport_test.rb +6 -6
- data/test/lib/vedeu/repositories/models/buffer_test.rb +13 -18
- data/test/lib/vedeu/repositories/models/cursor_test.rb +21 -21
- data/test/lib/vedeu/repositories/models/event_test.rb +10 -4
- data/test/lib/vedeu/{models → repositories/models}/group_test.rb +8 -9
- data/test/lib/vedeu/repositories/models/interface_test.rb +37 -17
- data/test/lib/vedeu/repositories/models/keymap_test.rb +6 -6
- data/test/lib/vedeu/repositories/models/menu_test.rb +6 -3
- data/test/lib/vedeu/repositories/models/offset_test.rb +6 -3
- data/test/lib/vedeu/support/bounding_area_test.rb +28 -36
- data/test/lib/vedeu/support/grid_test.rb +8 -0
- data/test/lib/vedeu/support/keymap_validator_test.rb +5 -8
- data/test/lib/vedeu/support/position_test.rb +3 -3
- data/test/lib/vedeu/support/registrar_test.rb +13 -7
- data/test/lib/vedeu/support/sentence_test.rb +9 -2
- data/test/lib/vedeu/support/trace_test.rb +5 -3
- data/test/test_helper.rb +12 -0
- data/vedeu.gemspec +1 -1
- metadata +8 -7
- data/lib/vedeu/output/view.rb +0 -64
- data/test/lib/vedeu/output/view_test.rb +0 -21
@@ -3,34 +3,36 @@ require 'test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
5
|
describe Output do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
6
|
+
|
7
|
+
let(:described) { Output.new(interface) }
|
8
|
+
let(:interface) {
|
9
|
+
Interface.new({
|
10
|
+
name: 'flourine',
|
11
|
+
geometry: {
|
12
|
+
width: 32,
|
13
|
+
height: 3,
|
14
|
+
},
|
15
|
+
lines: lines,
|
16
|
+
colour: colour
|
17
|
+
})
|
18
|
+
}
|
19
|
+
let(:lines) {
|
20
|
+
[
|
21
|
+
{
|
22
|
+
streams: [{ text: 'this is the first' }]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
streams: [{ text: 'this is the second and it is long' }]
|
26
|
+
},
|
27
|
+
{
|
28
|
+
streams: [{ text: 'this is the third, it is even longer and still truncated' }]
|
29
|
+
},
|
30
|
+
{
|
31
|
+
streams: [{ text: 'this should not render' }]
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}
|
35
|
+
let(:colour) { {} }
|
34
36
|
|
35
37
|
# before do
|
36
38
|
# Buffers.reset
|
@@ -41,11 +43,10 @@ module Vedeu
|
|
41
43
|
# Terminal.console.stubs(:print)
|
42
44
|
# end
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
# end
|
46
|
+
describe '#initialize' do
|
47
|
+
it { return_type_for(described, Output) }
|
48
|
+
it { assigns(described, '@interface', interface) }
|
49
|
+
end
|
49
50
|
|
50
51
|
# describe '.render' do
|
51
52
|
# it 'returns the content for the interface' do
|
@@ -4,6 +4,7 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Viewport do
|
6
6
|
|
7
|
+
let(:described) { Viewport.new(interface) }
|
7
8
|
let(:interface) {
|
8
9
|
Interface.new({
|
9
10
|
name: 'fluorine',
|
@@ -32,15 +33,14 @@ module Vedeu
|
|
32
33
|
}
|
33
34
|
|
34
35
|
describe '#initialize' do
|
35
|
-
it
|
36
|
-
|
37
|
-
|
36
|
+
it { return_type_for(described, Viewport) }
|
37
|
+
it { assigns(described, '@interface', interface) }
|
38
|
+
it { assigns(described, '@top', 0) }
|
39
|
+
it { assigns(described, '@left', 0) }
|
38
40
|
end
|
39
41
|
|
40
42
|
describe '.show' do
|
41
|
-
it
|
42
|
-
Viewport.show(interface).must_be_instance_of(Array)
|
43
|
-
end
|
43
|
+
it { return_type_for(Viewport.show(interface), Array) }
|
44
44
|
|
45
45
|
context 'when there is no content' do
|
46
46
|
before { interface.stubs(:content).returns([]) }
|
@@ -4,6 +4,7 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Buffer do
|
6
6
|
|
7
|
+
let(:described) { Buffer.new(attributes) }
|
7
8
|
let(:attributes) {
|
8
9
|
{
|
9
10
|
name: '',
|
@@ -17,42 +18,36 @@ module Vedeu
|
|
17
18
|
let(:previous) { {} }
|
18
19
|
|
19
20
|
describe '#initialize' do
|
20
|
-
it
|
21
|
-
|
22
|
-
|
21
|
+
it { return_type_for(described, Buffer) }
|
22
|
+
it { assigns(described, '@name', '') }
|
23
|
+
it { assigns(described, '@back', {}) }
|
24
|
+
it { assigns(described, '@front', {}) }
|
25
|
+
it { assigns(described, '@previous', {}) }
|
23
26
|
end
|
24
27
|
|
25
28
|
describe '#back' do
|
26
|
-
|
27
|
-
|
28
|
-
it { subject.must_be_instance_of(Hash) }
|
29
|
+
it { return_type_for(described.back, Hash) }
|
29
30
|
end
|
30
31
|
|
31
32
|
describe '#front' do
|
32
|
-
|
33
|
-
|
34
|
-
it { subject.must_be_instance_of(Hash) }
|
33
|
+
it { return_type_for(described.front, Hash) }
|
35
34
|
|
36
35
|
context 'alias method: #current' do
|
37
|
-
|
38
|
-
|
39
|
-
it { subject.must_be_instance_of(Hash) }
|
36
|
+
it { return_type_for(described.current, Hash) }
|
40
37
|
end
|
41
38
|
end
|
42
39
|
|
43
40
|
describe '#name' do
|
44
|
-
|
45
|
-
|
46
|
-
it { subject.must_be_instance_of(String) }
|
41
|
+
it { return_type_for(described.name, String) }
|
47
42
|
end
|
48
43
|
|
49
44
|
describe '#previous' do
|
50
|
-
|
51
|
-
|
52
|
-
it { subject.must_be_instance_of(Hash) }
|
45
|
+
it { return_type_for(described.previous, Hash) }
|
53
46
|
end
|
54
47
|
|
55
48
|
describe '#content' do
|
49
|
+
it { return_type_for(described.content, Array) }
|
50
|
+
|
56
51
|
subject { Buffer.new(attributes).content }
|
57
52
|
|
58
53
|
context 'when there is content on the back buffer' do
|
@@ -4,6 +4,7 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Cursor do
|
6
6
|
|
7
|
+
let(:described) { Cursor.new(attributes) }
|
7
8
|
let(:attributes) {
|
8
9
|
{
|
9
10
|
name: 'silver',
|
@@ -25,23 +26,24 @@ module Vedeu
|
|
25
26
|
end
|
26
27
|
|
27
28
|
describe '#initialize' do
|
28
|
-
it
|
29
|
-
|
30
|
-
|
29
|
+
it { return_type_for(described, Cursor) }
|
30
|
+
it { assigns(described, '@attributes', attributes) }
|
31
|
+
it { assigns(described, '@name', 'silver') }
|
32
|
+
it { assigns(described, '@state', :show) }
|
33
|
+
it { assigns(described, '@x', 19) }
|
34
|
+
it { assigns(described, '@y', 8) }
|
31
35
|
end
|
32
36
|
|
33
37
|
describe '#attributes' do
|
34
38
|
it 'returns a hash containing the attributes of the instance' do
|
35
|
-
|
39
|
+
described.attributes.must_equal(
|
36
40
|
{ name: 'silver', state: :show, x: 19, y: 8 }
|
37
41
|
)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
45
|
describe '#x' do
|
42
|
-
it
|
43
|
-
Cursor.new(attributes).x.must_be_instance_of(Fixnum)
|
44
|
-
end
|
46
|
+
it { return_type_for(described.x, Fixnum) }
|
45
47
|
|
46
48
|
context 'when the cursors position is outside the interface' do
|
47
49
|
let(:attributes) { { name: 'silver', state: :show, x: 10, y: 8 } }
|
@@ -58,22 +60,20 @@ module Vedeu
|
|
58
60
|
|
59
61
|
it 'repositions the cursor at the end of the line' do
|
60
62
|
Cursor.new(attributes).attributes.must_equal(
|
61
|
-
{ name: 'silver', state: :show, x:
|
63
|
+
{ name: 'silver', state: :show, x: 22, y: 8 }
|
62
64
|
)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
67
69
|
describe '#y' do
|
68
|
-
it
|
69
|
-
Cursor.new(attributes).y.must_be_instance_of(Fixnum)
|
70
|
-
end
|
70
|
+
it { return_type_for(described.y, Fixnum) }
|
71
71
|
|
72
72
|
context 'when the cursors position is outside the interface' do
|
73
73
|
let(:attributes) { { name: 'silver', state: :show, x: 19, y: 3 } }
|
74
74
|
|
75
75
|
it 'repositions the cursor at the start of the line' do
|
76
|
-
|
76
|
+
described.attributes.must_equal(
|
77
77
|
{ name: 'silver', state: :show, x: 19, y: 5 }
|
78
78
|
)
|
79
79
|
end
|
@@ -83,8 +83,8 @@ module Vedeu
|
|
83
83
|
let(:attributes) { { name: 'silver', state: :show, x: 19, y: 12 } }
|
84
84
|
|
85
85
|
it 'repositions the cursor at the end of the line' do
|
86
|
-
|
87
|
-
{ name: 'silver', state: :show, x: 19, y:
|
86
|
+
described.attributes.must_equal(
|
87
|
+
{ name: 'silver', state: :show, x: 19, y: 9 }
|
88
88
|
)
|
89
89
|
end
|
90
90
|
end
|
@@ -92,7 +92,7 @@ module Vedeu
|
|
92
92
|
|
93
93
|
describe '#refresh' do
|
94
94
|
it 'returns a hash containing the attributes of the instance' do
|
95
|
-
|
95
|
+
described.refresh.must_equal(
|
96
96
|
{ name: 'silver', state: :show, x: 19, y: 8 }
|
97
97
|
)
|
98
98
|
end
|
@@ -100,7 +100,7 @@ module Vedeu
|
|
100
100
|
|
101
101
|
describe '#show' do
|
102
102
|
it 'sets the state attribute to :show' do
|
103
|
-
cursor =
|
103
|
+
cursor = described
|
104
104
|
cursor.hide
|
105
105
|
cursor.attributes.must_equal(
|
106
106
|
{ name: 'silver', state: :hide, x: 19, y: 8 }
|
@@ -114,7 +114,7 @@ module Vedeu
|
|
114
114
|
|
115
115
|
describe '#hide' do
|
116
116
|
it 'sets the state attribute to :hide' do
|
117
|
-
cursor =
|
117
|
+
cursor = described
|
118
118
|
cursor.hide
|
119
119
|
cursor.attributes.must_equal(
|
120
120
|
{ name: 'silver', state: :hide, x: 19, y: 8 }
|
@@ -126,7 +126,7 @@ module Vedeu
|
|
126
126
|
describe '#to_s' do
|
127
127
|
context 'when the cursor state is :show' do
|
128
128
|
it 'returns an escape sequence for showing the cursor (and position)' do
|
129
|
-
cursor =
|
129
|
+
cursor = described
|
130
130
|
cursor.show
|
131
131
|
cursor.to_s.must_equal("\e[8;19H\e[?25h")
|
132
132
|
end
|
@@ -134,7 +134,7 @@ module Vedeu
|
|
134
134
|
|
135
135
|
context 'when the cursor state is :hide' do
|
136
136
|
it 'returns an escape sequence for hiding the cursor (and position)' do
|
137
|
-
cursor =
|
137
|
+
cursor = described
|
138
138
|
cursor.hide
|
139
139
|
cursor.to_s.must_equal("\e[8;19H\e[?25l")
|
140
140
|
end
|
@@ -142,12 +142,12 @@ module Vedeu
|
|
142
142
|
|
143
143
|
it 'returns the escape sequence to position and set the visibility of ' \
|
144
144
|
'the cursor' do
|
145
|
-
|
145
|
+
described.to_s.must_equal("\e[8;19H\e[?25h")
|
146
146
|
end
|
147
147
|
|
148
148
|
it 'returns the escape sequence to position and set the visibility of ' \
|
149
149
|
'the cursor and returns to that position after yielding the block' do
|
150
|
-
|
150
|
+
described.to_s do
|
151
151
|
# ...
|
152
152
|
end.must_equal("\e[8;19H\e[?25h\e[8;19H\e[?25h")
|
153
153
|
end
|
@@ -4,15 +4,21 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Event do
|
6
6
|
|
7
|
+
let(:described) { Event.new(event_name, options, closure) }
|
7
8
|
let(:event_name) { :some_event }
|
8
9
|
let(:options) { {} }
|
9
10
|
let(:closure) { proc { :event_triggered } }
|
10
11
|
|
11
|
-
|
12
12
|
describe '#initialize' do
|
13
|
-
it
|
14
|
-
|
15
|
-
|
13
|
+
it { return_type_for(described, Event) }
|
14
|
+
it { assigns(described, '@name', :some_event) }
|
15
|
+
it { assigns(described, '@options', options) }
|
16
|
+
|
17
|
+
it { skip; assigns(described, '@closure', closure) }
|
18
|
+
|
19
|
+
it { assigns(described, '@deadline', 0) }
|
20
|
+
it { assigns(described, '@executed_at', 0) }
|
21
|
+
it { assigns(described, '@now', 0) }
|
16
22
|
end
|
17
23
|
|
18
24
|
describe '#trigger' do
|
@@ -4,10 +4,13 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Group do
|
6
6
|
|
7
|
+
let(:described) { Group.new('organics', *members) }
|
8
|
+
let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
|
9
|
+
|
7
10
|
describe '#initialize' do
|
8
|
-
it
|
9
|
-
|
10
|
-
|
11
|
+
it { return_type_for(described, Group) }
|
12
|
+
it { assigns(described, '@members', members.to_set) }
|
13
|
+
it { assigns(described, '@name', 'organics') }
|
11
14
|
end
|
12
15
|
|
13
16
|
describe '#add' do
|
@@ -33,9 +36,7 @@ module Vedeu
|
|
33
36
|
end
|
34
37
|
|
35
38
|
describe '#members' do
|
36
|
-
it
|
37
|
-
Group.new('organics').members.must_be_instance_of(Array)
|
38
|
-
end
|
39
|
+
it { return_type_for(described.members, Array) }
|
39
40
|
|
40
41
|
context 'when the group has no members' do
|
41
42
|
it 'returns an empty Set' do
|
@@ -83,9 +84,7 @@ module Vedeu
|
|
83
84
|
end
|
84
85
|
|
85
86
|
describe '#reset' do
|
86
|
-
it
|
87
|
-
Group.new('organics').reset.must_be_instance_of(Group)
|
88
|
-
end
|
87
|
+
it { return_type_for(described.reset, Group) }
|
89
88
|
|
90
89
|
it 'returns a Group with no members' do
|
91
90
|
group = Group.new('organics', 'nitrogen', 'carbon')
|
@@ -3,6 +3,9 @@ require 'test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
5
|
describe Interface do
|
6
|
+
let(:described) { Interface.new(attributes) }
|
7
|
+
let(:attributes) { {} }
|
8
|
+
|
6
9
|
let(:interface) { Vedeu.use('#initialize') }
|
7
10
|
|
8
11
|
before do
|
@@ -18,41 +21,60 @@ module Vedeu
|
|
18
21
|
end
|
19
22
|
|
20
23
|
describe '#initialize' do
|
21
|
-
it
|
22
|
-
|
23
|
-
|
24
|
+
it { return_type_for(described, Interface) }
|
25
|
+
it { assigns(described, '@attributes', {
|
26
|
+
border: {},
|
27
|
+
colour: {},
|
28
|
+
cursor: :hide,
|
29
|
+
delay: 0.0,
|
30
|
+
geometry: {},
|
31
|
+
group: '',
|
32
|
+
lines: [],
|
33
|
+
name: '',
|
34
|
+
parent: nil,
|
35
|
+
style: ''
|
36
|
+
})
|
37
|
+
}
|
38
|
+
it { assigns(described, '@cursor', :hide) }
|
39
|
+
it { assigns(described, '@delay', 0.0) }
|
40
|
+
it { assigns(described, '@group', '') }
|
41
|
+
it { assigns(described, '@name', '') }
|
42
|
+
it { assigns(described, '@parent', nil) }
|
24
43
|
end
|
25
44
|
|
26
45
|
describe '#attributes' do
|
27
46
|
it 'returns the value' do
|
28
47
|
interface.attributes.must_equal(
|
29
48
|
{
|
30
|
-
|
31
|
-
name: '#initialize',
|
32
|
-
group: 'my_group',
|
33
|
-
lines: [],
|
49
|
+
border: {},
|
34
50
|
colour: {
|
35
51
|
foreground: '#ff0000',
|
36
52
|
background: '#000000'
|
37
53
|
},
|
38
|
-
|
54
|
+
cursor: :hide,
|
55
|
+
delay: 0.0,
|
39
56
|
geometry: {
|
40
57
|
y: 3,
|
41
58
|
x: 5,
|
42
59
|
width: 10,
|
43
|
-
height: 15
|
60
|
+
height: 15,
|
44
61
|
},
|
45
|
-
|
46
|
-
|
62
|
+
group: 'my_group',
|
63
|
+
lines: [],
|
64
|
+
name: '#initialize',
|
65
|
+
parent: nil,
|
66
|
+
style: '',
|
47
67
|
}
|
48
68
|
)
|
49
69
|
end
|
50
70
|
end
|
51
71
|
|
72
|
+
describe '#border' do
|
73
|
+
it { return_type_for(described.border, Border) }
|
74
|
+
end
|
75
|
+
|
52
76
|
describe '#cursor' do
|
53
|
-
it
|
54
|
-
interface.cursor.must_be_instance_of(Cursor)
|
55
|
-
end
|
77
|
+
it { return_type_for(described.cursor, Cursor) }
|
56
78
|
end
|
57
79
|
|
58
80
|
describe '#name' do
|
@@ -88,9 +110,7 @@ module Vedeu
|
|
88
110
|
end
|
89
111
|
|
90
112
|
describe '#geometry' do
|
91
|
-
it
|
92
|
-
interface.geometry.must_be_instance_of(Geometry)
|
93
|
-
end
|
113
|
+
it { return_type_for(described.geometry, Geometry) }
|
94
114
|
end
|
95
115
|
|
96
116
|
describe '#delay' do
|