vedeu 0.1.19 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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!(
|