vedeu 0.1.19 → 0.2.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/docs/api.md +9 -5
- data/docs/events.md +64 -17
- data/lib/vedeu.rb +5 -0
- data/lib/vedeu/api/api.rb +36 -12
- data/lib/vedeu/api/menu.rb +111 -0
- data/lib/vedeu/launcher.rb +1 -0
- data/lib/vedeu/models/attributes/colour_translator.rb +1 -0
- data/lib/vedeu/models/colour.rb +1 -0
- data/lib/vedeu/models/composition.rb +1 -0
- data/lib/vedeu/models/geometry.rb +11 -1
- data/lib/vedeu/output/clear.rb +1 -0
- data/lib/vedeu/output/compositor.rb +1 -0
- data/lib/vedeu/output/render.rb +1 -0
- data/lib/vedeu/repositories/events.rb +10 -1
- data/lib/vedeu/repositories/interfaces.rb +3 -1
- data/lib/vedeu/repositories/menus.rb +111 -0
- data/lib/vedeu/support/cursor.rb +17 -1
- data/lib/vedeu/support/event.rb +10 -1
- data/lib/vedeu/support/grid.rb +1 -0
- data/lib/vedeu/support/menu.rb +11 -22
- data/test/lib/vedeu/api/api_test.rb +28 -12
- data/test/lib/vedeu/api/defined_test.rb +4 -4
- data/test/lib/vedeu/api/menu_test.rb +68 -0
- data/test/lib/vedeu/repositories/groups_test.rb +37 -19
- data/test/lib/vedeu/repositories/interfaces_test.rb +79 -0
- data/test/lib/vedeu/repositories/menus_test.rb +244 -0
- data/test/lib/vedeu/support/menu_test.rb +0 -6
- data/test/test_helper.rb +0 -29
- data/vedeu.gemspec +3 -3
- metadata +12 -6
@@ -2,11 +2,22 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
describe Groups do
|
5
|
-
|
6
|
-
|
5
|
+
describe '#add' do
|
6
|
+
before { Groups.reset }
|
7
|
+
|
8
|
+
it 'returns false if the group name is empty' do
|
9
|
+
Groups.add({ group: '', name: 'gallium', delay: 0.0 }).must_equal(false)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'adds the interface name to the group in storage' do
|
13
|
+
Groups.add({ group: 'elements', name: 'germanium', delay: 0.0 })
|
14
|
+
Groups.all.must_equal({ 'elements' => Set['germanium'] })
|
15
|
+
end
|
16
|
+
end
|
7
17
|
|
8
18
|
describe '#all' do
|
9
19
|
before do
|
20
|
+
Groups.reset
|
10
21
|
Groups.add({ group: 'elements', name: 'cobalt', delay: 0.0 })
|
11
22
|
Groups.add({ group: 'elements', name: 'nickel', delay: 0.0 })
|
12
23
|
Groups.add({ group: 'elements', name: 'copper', delay: 0.0 })
|
@@ -19,8 +30,24 @@ module Vedeu
|
|
19
30
|
end
|
20
31
|
end
|
21
32
|
|
33
|
+
describe '#find' do
|
34
|
+
before do
|
35
|
+
Groups.reset
|
36
|
+
Groups.add({ group: 'elements', name: 'zinc', delay: 0.0 })
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'raises an exception if the group cannot be found' do
|
40
|
+
proc { Groups.find('not_found') }.must_raise(GroupNotFound)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns a collection of interface names belonging to the group' do
|
44
|
+
Groups.find('elements').must_equal(Set['zinc'])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
22
48
|
describe '#registered' do
|
23
49
|
before do
|
50
|
+
Groups.reset
|
24
51
|
Groups.add({ group: 'elements', name: 'cobalt', delay: 0.0 })
|
25
52
|
Groups.add({ group: 'minerals', name: 'ruby', delay: 0.0 })
|
26
53
|
Groups.add({ group: 'elements', name: 'copper', delay: 0.0 })
|
@@ -32,30 +59,21 @@ module Vedeu
|
|
32
59
|
end
|
33
60
|
end
|
34
61
|
|
35
|
-
describe '#
|
36
|
-
|
37
|
-
|
38
|
-
it 'raises an exception if the group cannot be found' do
|
39
|
-
proc { Groups.find('not_found') }.must_raise(GroupNotFound)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'returns a collection of interface names belonging to the group' do
|
43
|
-
Groups.find('elements').must_equal(Set['zinc'])
|
44
|
-
end
|
45
|
-
end
|
62
|
+
describe '#registered?' do
|
63
|
+
it 'returns true when the group is registered' do
|
64
|
+
Groups.add({ group: 'registered' })
|
46
65
|
|
47
|
-
|
48
|
-
it 'returns false if the group name is empty' do
|
49
|
-
Groups.add({ group: '', name: 'gallium', delay: 0.0 }).must_equal(false)
|
66
|
+
Groups.registered?('registered').must_equal(true)
|
50
67
|
end
|
51
68
|
|
52
|
-
it '
|
53
|
-
Groups.
|
54
|
-
Groups.all.must_equal({ 'elements' => Set['germanium'] })
|
69
|
+
it 'returns false when the group is not registered' do
|
70
|
+
Groups.registered?('not_registered').must_equal(false)
|
55
71
|
end
|
56
72
|
end
|
57
73
|
|
58
74
|
describe '#reset' do
|
75
|
+
before { Groups.reset }
|
76
|
+
|
59
77
|
it 'removes all known groups from the storage' do
|
60
78
|
Groups.add({ group: 'elements', name: 'bromine', delay: 0.0 })
|
61
79
|
Groups.all.must_equal({ 'elements' => Set['bromine'] })
|
@@ -2,5 +2,84 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
describe Interfaces do
|
5
|
+
|
6
|
+
describe '#add' do
|
7
|
+
before { Interfaces.reset }
|
8
|
+
|
9
|
+
it 'returns false if the interface name is empty' do
|
10
|
+
Interfaces.add({ name: '' }).must_equal(false)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'adds the interface to the storage' do
|
14
|
+
Interfaces.add({ name: 'germanium' })
|
15
|
+
Interfaces.all.must_equal({ 'germanium' => { name: 'germanium' } })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#all' do
|
20
|
+
before do
|
21
|
+
Interfaces.reset
|
22
|
+
Interfaces.add({ name: 'cobalt' })
|
23
|
+
Interfaces.add({ name: 'nickel' })
|
24
|
+
Interfaces.add({ name: 'copper' })
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns the storage' do
|
28
|
+
Interfaces.all.must_equal(
|
29
|
+
{
|
30
|
+
'cobalt' => { name: 'cobalt' },
|
31
|
+
'nickel' => { name: 'nickel' },
|
32
|
+
'copper' => { name: 'copper' }
|
33
|
+
}
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#find' do
|
39
|
+
before { Interfaces.add({ name: 'zinc' }) }
|
40
|
+
|
41
|
+
it 'raises an exception if the interface cannot be found' do
|
42
|
+
proc { Interfaces.find('not_found') }.must_raise(InterfaceNotFound)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns the attributes of the named interface' do
|
46
|
+
Interfaces.find('zinc').must_equal({ name: 'zinc' })
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#registered' do
|
51
|
+
before do
|
52
|
+
Interfaces.reset
|
53
|
+
Interfaces.add({ name: 'cobalt' })
|
54
|
+
Interfaces.add({ name: 'ruby' })
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns all the registered interfaces from storage' do
|
58
|
+
Interfaces.registered.must_equal(['cobalt', 'ruby'])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#registered?' do
|
63
|
+
it 'returns true when the interface is registered' do
|
64
|
+
Interfaces.add({ name: 'registered' })
|
65
|
+
|
66
|
+
Interfaces.registered?('registered').must_equal(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'returns false when the interface is not registered' do
|
70
|
+
Interfaces.registered?('not_registered').must_equal(false)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#reset' do
|
75
|
+
before { Interfaces.reset }
|
76
|
+
|
77
|
+
it 'removes all known interfaces from the storage' do
|
78
|
+
Interfaces.add({ name: 'bromine' })
|
79
|
+
Interfaces.all.must_equal({ 'bromine' => { name: 'bromine' } })
|
80
|
+
Interfaces.reset.must_be_empty
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
5
84
|
end
|
6
85
|
end
|
@@ -0,0 +1,244 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Menus do
|
6
|
+
|
7
|
+
describe 'System events defined by Menus' do
|
8
|
+
before do
|
9
|
+
Menus.reset
|
10
|
+
Menus.add({ name: 'elements',
|
11
|
+
items: Vedeu::Menu.new([:sulphur, :gold, :tin, :helium]) })
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'raises an exception when triggered with an unregistered name' do
|
15
|
+
proc {
|
16
|
+
Vedeu.trigger(:_menu_current_, 'unknown')
|
17
|
+
}.must_raise(MenuNotFound)
|
18
|
+
end
|
19
|
+
|
20
|
+
it '_menu_current_' do
|
21
|
+
Vedeu.trigger(:_menu_current_, 'elements').must_equal(:sulphur)
|
22
|
+
end
|
23
|
+
|
24
|
+
it '_menu_selected_ when no item is selected' do
|
25
|
+
Vedeu.trigger(:_menu_selected_, 'elements').must_equal([nil])
|
26
|
+
end
|
27
|
+
|
28
|
+
it '_menu_selected_ when an item is selected' do
|
29
|
+
Vedeu.trigger(:_menu_next_, 'elements')
|
30
|
+
Vedeu.trigger(:_menu_select_, 'elements')
|
31
|
+
Vedeu.trigger(:_menu_selected_, 'elements').must_equal(:gold)
|
32
|
+
end
|
33
|
+
|
34
|
+
it '_menu_next_' do
|
35
|
+
Vedeu.trigger(:_menu_next_, 'elements').must_equal(
|
36
|
+
[
|
37
|
+
[false, false, :sulphur],
|
38
|
+
[false, true, :gold],
|
39
|
+
[false, false, :tin],
|
40
|
+
[false, false, :helium]
|
41
|
+
]
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
it '_menu_prev_' do
|
46
|
+
Vedeu.trigger(:_menu_prev_, 'elements').must_equal(
|
47
|
+
[
|
48
|
+
[false, true, :sulphur],
|
49
|
+
[false, false, :gold],
|
50
|
+
[false, false, :tin],
|
51
|
+
[false, false, :helium]
|
52
|
+
]
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
it '_menu_top_' do
|
57
|
+
Vedeu.trigger(:_menu_top_, 'elements').must_equal(
|
58
|
+
[
|
59
|
+
[false, true, :sulphur],
|
60
|
+
[false, false, :gold],
|
61
|
+
[false, false, :tin],
|
62
|
+
[false, false, :helium]
|
63
|
+
]
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
it '_menu_bottom_' do
|
68
|
+
Vedeu.trigger(:_menu_bottom_, 'elements').must_equal(
|
69
|
+
[
|
70
|
+
[false, false, :sulphur],
|
71
|
+
[false, false, :gold],
|
72
|
+
[false, false, :tin],
|
73
|
+
[false, true, :helium]
|
74
|
+
]
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
it '_menu_select_' do
|
79
|
+
Vedeu.trigger(:_menu_select_, 'elements').must_equal(
|
80
|
+
[
|
81
|
+
[true, true, :sulphur],
|
82
|
+
[false, false, :gold],
|
83
|
+
[false, false, :tin],
|
84
|
+
[false, false, :helium]
|
85
|
+
]
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
it '_menu_deselect_' do
|
90
|
+
Vedeu.trigger(:_menu_deselect_, 'elements').must_equal(
|
91
|
+
[
|
92
|
+
[false, true, :sulphur],
|
93
|
+
[false, false, :gold],
|
94
|
+
[false, false, :tin],
|
95
|
+
[false, false, :helium]
|
96
|
+
]
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
100
|
+
it '_menu_items_' do
|
101
|
+
Vedeu.trigger(:_menu_items_, 'elements').must_equal(
|
102
|
+
[
|
103
|
+
[false, true, :sulphur],
|
104
|
+
[false, false, :gold],
|
105
|
+
[false, false, :tin],
|
106
|
+
[false, false, :helium]
|
107
|
+
]
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
it '_menu_view_' do
|
112
|
+
Vedeu.trigger(:_menu_view_, 'elements').must_equal(
|
113
|
+
[
|
114
|
+
[false, true, :sulphur],
|
115
|
+
[false, false, :gold],
|
116
|
+
[false, false, :tin],
|
117
|
+
[false, false, :helium]
|
118
|
+
]
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe '#add' do
|
124
|
+
before { Menus.reset }
|
125
|
+
|
126
|
+
it 'returns false if the menu name is empty' do
|
127
|
+
Menus.add({ name: '' }).must_equal(false)
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'adds the menu to the storage' do
|
131
|
+
collection = [:hydrogen, :helium, :beryllium, :lithium]
|
132
|
+
items = Vedeu::Menu.new(collection)
|
133
|
+
|
134
|
+
Menus.add({ name: 'elements', items: items })
|
135
|
+
Menus.all.must_equal(
|
136
|
+
{
|
137
|
+
'elements' => { name: 'elements', items: items }
|
138
|
+
}
|
139
|
+
)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '#all' do
|
144
|
+
before do
|
145
|
+
Menus.reset
|
146
|
+
Menus.add({ name: 'barium' })
|
147
|
+
Menus.add({ name: 'lanthanum' })
|
148
|
+
Menus.add({ name: 'cerium' })
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'returns the storage' do
|
152
|
+
Menus.all.must_equal(
|
153
|
+
{
|
154
|
+
'barium' => { name: 'barium' },
|
155
|
+
'lanthanum' => { name: 'lanthanum' },
|
156
|
+
'cerium' => { name: 'cerium' }
|
157
|
+
}
|
158
|
+
)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '#find' do
|
163
|
+
before { Menus.add({ name: 'erbium' }) }
|
164
|
+
|
165
|
+
it 'raises an exception if the menu cannot be found' do
|
166
|
+
proc { Menus.find('not_found') }.must_raise(MenuNotFound)
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'returns the attributes of the named menu' do
|
170
|
+
Menus.find('erbium').must_equal({ name: 'erbium' })
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '#registered' do
|
175
|
+
before do
|
176
|
+
Menus.reset
|
177
|
+
Menus.add({ name: 'barium' })
|
178
|
+
Menus.add({ name: 'caesium' })
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'returns all the registered menus from storage' do
|
182
|
+
Menus.registered.must_equal(['barium', 'caesium'])
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe '#registered?' do
|
187
|
+
it 'returns true when the menu is registered' do
|
188
|
+
Menus.add({ name: 'registered' })
|
189
|
+
|
190
|
+
Menus.registered?('registered').must_equal(true)
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'returns false when the menu is not registered' do
|
194
|
+
Menus.registered?('not_registered').must_equal(false)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe '#remove' do
|
199
|
+
it 'returns false when the menu is not registered' do
|
200
|
+
Menus.remove('not_registered').must_equal(false)
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'removes the menu from the repository' do
|
204
|
+
Menus.add({ name: 'antimony' })
|
205
|
+
Menus.registered?('antimony').must_equal(true)
|
206
|
+
Menus.remove('antimony')
|
207
|
+
Menus.registered?('antimony').must_equal(false)
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'returns true when the menu was registered and is now removed' do
|
211
|
+
Menus.add({ name: 'tellurium' })
|
212
|
+
Menus.remove('tellurium').must_equal(true)
|
213
|
+
Menus.registered?('tellurium').must_equal(false)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe '#reset' do
|
218
|
+
before { Menus.reset }
|
219
|
+
|
220
|
+
it 'removes all known menus from the storage' do
|
221
|
+
Menus.add({ name: 'uranium' })
|
222
|
+
Menus.all.must_equal({ 'uranium' => { name: 'uranium' } })
|
223
|
+
Menus.reset.must_be_empty
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
describe '#use' do
|
228
|
+
it 'returns the Vedeu::Menu instance stored when the named menu exists' do
|
229
|
+
collection = [:calcium, :fermium, :nitrogen, :palladium]
|
230
|
+
items = Vedeu::Menu.new(collection)
|
231
|
+
Menus.add({ name: 'elements', items: items })
|
232
|
+
|
233
|
+
Menus.use('elements').must_equal(items)
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'raises an exception if there are no items' do
|
237
|
+
Menus.add({ name: 'elements' })
|
238
|
+
|
239
|
+
proc { Menus.use('elements') }.must_raise(MenuNotFound)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
end
|
@@ -5,12 +5,6 @@ module Vedeu
|
|
5
5
|
let(:collection) { ['hydrogen', 'carbon', 'nitrogen', 'oxygen'] }
|
6
6
|
let(:menu) { Menu.new(collection) }
|
7
7
|
|
8
|
-
describe '#events' do
|
9
|
-
it 'returns the events defined for menus' do
|
10
|
-
menu.events.must_be_instance_of(Hash)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
8
|
describe '#current' do
|
15
9
|
it 'returns the current index' do
|
16
10
|
menu.current.must_equal(0)
|
data/test/test_helper.rb
CHANGED
@@ -25,35 +25,6 @@ ENV['VEDEU_TERM'] = 'xterm-truecolor'
|
|
25
25
|
|
26
26
|
require 'vedeu'
|
27
27
|
|
28
|
-
module Vedeu
|
29
|
-
def self.reset_all!
|
30
|
-
Vedeu::Buffers.reset
|
31
|
-
Vedeu::Configuration.reset
|
32
|
-
Vedeu.events.reset
|
33
|
-
Vedeu::Focus.reset
|
34
|
-
Vedeu::Groups.reset
|
35
|
-
Vedeu::Interfaces.reset
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
module MyMiniTestPlugin
|
40
|
-
# Code to run before every test case
|
41
|
-
def before_setup
|
42
|
-
super
|
43
|
-
Vedeu.reset_all!
|
44
|
-
end
|
45
|
-
|
46
|
-
# Code to run after every test case
|
47
|
-
def after_teardown
|
48
|
-
Vedeu.reset_all!
|
49
|
-
super
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class MiniTest::Spec
|
54
|
-
include MyMiniTestPlugin
|
55
|
-
end
|
56
|
-
|
57
28
|
# commented out by default (makes tests slower)
|
58
29
|
# require 'minitest/reporters'
|
59
30
|
# Minitest::Reporters.use!(
|