vedeu 0.2.10 → 0.2.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/events.md +6 -0
- data/examples/{cursor_app/cursor_app.rb → cursor_app.rb} +1 -1
- data/examples/{lines_app/lines_app.rb → lines_app.rb} +1 -1
- data/lib/vedeu.rb +48 -28
- data/lib/vedeu/api/api.rb +8 -95
- data/lib/vedeu/application.rb +6 -2
- data/lib/vedeu/{models → colours}/background.rb +1 -1
- data/lib/vedeu/{models → colours}/colour.rb +0 -0
- data/lib/vedeu/{models → colours}/foreground.rb +2 -2
- data/lib/vedeu/{support/colour_translator.rb → colours/translator.rb} +7 -7
- data/lib/vedeu/input/input.rb +13 -5
- data/lib/vedeu/models/geometry.rb +30 -2
- data/lib/vedeu/models/key.rb +39 -0
- data/lib/vedeu/output/compositor.rb +30 -76
- data/lib/vedeu/output/output.rb +74 -0
- data/lib/vedeu/output/viewport.rb +36 -44
- data/lib/vedeu/repositories/buffers.rb +5 -18
- data/lib/vedeu/repositories/cursors.rb +16 -8
- data/lib/vedeu/repositories/events.rb +96 -9
- data/lib/vedeu/repositories/focus.rb +21 -20
- data/lib/vedeu/repositories/groups.rb +3 -11
- data/lib/vedeu/repositories/interfaces.rb +6 -9
- data/lib/vedeu/repositories/keymaps.rb +8 -3
- data/lib/vedeu/repositories/menus.rb +6 -21
- data/lib/vedeu/{models → repositories/models}/buffer.rb +62 -28
- data/lib/vedeu/{models → repositories/models}/cursor.rb +8 -2
- data/lib/vedeu/{models → repositories/models}/event.rb +7 -0
- data/lib/vedeu/repositories/models/group.rb +56 -0
- data/lib/vedeu/{models → repositories/models}/interface.rb +6 -0
- data/lib/vedeu/{models → repositories/models}/keymap.rb +7 -1
- data/lib/vedeu/{models → repositories/models}/menu.rb +9 -0
- data/lib/vedeu/{models → repositories/models}/offset.rb +8 -1
- data/lib/vedeu/repositories/offsets.rb +17 -12
- data/lib/vedeu/support/bounding_area.rb +127 -0
- data/lib/vedeu/support/common.rb +8 -0
- data/lib/vedeu/support/exceptions.rb +2 -12
- data/lib/vedeu/support/model.rb +14 -0
- data/lib/vedeu/support/refresh.rb +8 -7
- data/lib/vedeu/support/registrar.rb +7 -1
- data/lib/vedeu/support/repository.rb +31 -10
- data/lib/vedeu/support/sentence.rb +67 -0
- data/lib/vedeu/support/terminal.rb +19 -0
- data/lib/vedeu/support/trace.rb +2 -5
- data/test/integration/api/api_test.rb +97 -0
- data/test/integration/api_dsl/dsl_api_test.rb +4 -0
- data/test/integration/api_dsl/dsl_composition_test.rb +4 -0
- data/test/integration/api_dsl/dsl_defined_test.rb +4 -0
- data/test/integration/api_dsl/dsl_helpers_test.rb +4 -0
- data/test/integration/api_dsl/dsl_interface_test.rb +4 -0
- data/test/integration/api_dsl/dsl_keymap.rb +4 -0
- data/test/integration/api_dsl/dsl_line_test.rb +4 -0
- data/test/integration/api_dsl/dsl_menu_test.rb +4 -0
- data/test/integration/api_dsl/dsl_stream_test.rb +138 -0
- data/test/lib/vedeu/api/api_test.rb +1 -25
- data/test/lib/vedeu/api/helpers_test.rb +0 -10
- data/test/lib/vedeu/{models → colours}/background_test.rb +0 -0
- data/test/lib/vedeu/{models → colours}/colour_test.rb +0 -0
- data/test/lib/vedeu/{models → colours}/foreground_test.rb +0 -0
- data/test/lib/vedeu/{support/colour_translator_test.rb → colours/translator_test.rb} +3 -3
- data/test/lib/vedeu/input/input_test.rb +16 -47
- data/test/lib/vedeu/models/geometry_test.rb +46 -0
- data/test/lib/vedeu/models/group_test.rb +99 -0
- data/test/lib/vedeu/models/key_test.rb +41 -0
- data/test/lib/vedeu/output/compositor_test.rb +25 -101
- data/test/lib/vedeu/output/output_test.rb +108 -0
- data/test/lib/vedeu/repositories/buffers_test.rb +0 -8
- data/test/lib/vedeu/repositories/cursors_test.rb +34 -0
- data/test/lib/vedeu/repositories/focus_test.rb +37 -28
- data/test/lib/vedeu/repositories/interfaces_test.rb +1 -1
- data/test/lib/vedeu/repositories/keymaps_test.rb +6 -20
- data/test/lib/vedeu/repositories/menus_test.rb +0 -6
- data/test/lib/vedeu/{models → repositories/models}/buffer_test.rb +24 -27
- data/test/lib/vedeu/{models → repositories/models}/cursor_test.rb +0 -0
- data/test/lib/vedeu/{models → repositories/models}/event_test.rb +0 -0
- data/test/lib/vedeu/{models → repositories/models}/interface_test.rb +0 -0
- data/test/lib/vedeu/{models → repositories/models}/keymap_test.rb +0 -0
- data/test/lib/vedeu/{models → repositories/models}/menu_test.rb +0 -0
- data/test/lib/vedeu/{models → repositories/models}/offset_test.rb +0 -0
- data/test/lib/vedeu/support/bounding_area_test.rb +139 -0
- data/test/lib/vedeu/support/coercions_test.rb +6 -17
- data/test/lib/vedeu/support/grid_test.rb +1 -1
- data/test/lib/vedeu/support/model_test.rb +23 -0
- data/test/lib/vedeu/support/presentation_test.rb +0 -10
- data/test/lib/vedeu/support/refresh_test.rb +2 -2
- data/test/lib/vedeu/support/repository_test.rb +63 -64
- data/test/lib/vedeu/support/sentence_test.rb +48 -0
- data/test/lib/vedeu/support/terminal_test.rb +86 -6
- data/test/support/test_classes/all.rb +5 -0
- data/test/support/test_classes/coercions.rb +16 -0
- data/test/support/test_classes/helpers.rb +19 -0
- data/test/support/test_classes/model.rb +23 -0
- data/test/support/test_classes/presentation.rb +16 -0
- data/test/support/test_classes/repositories.rb +26 -0
- data/test/support/test_modules/all.rb +1 -0
- data/test/support/test_modules/repository.rb +16 -0
- data/test/test_helper.rb +4 -0
- data/vedeu.gemspec +3 -3
- metadata +95 -50
- data/lib/vedeu/output/clear.rb +0 -88
- data/lib/vedeu/output/render.rb +0 -50
- data/lib/vedeu/repositories/positional.rb +0 -23
- data/test/lib/vedeu/output/clear_test.rb +0 -56
- data/test/lib/vedeu/output/render_test.rb +0 -100
- data/test/lib/vedeu/repositories/positional_test.rb +0 -50
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Key do
|
6
|
+
|
7
|
+
let(:input) { '' }
|
8
|
+
let(:output) { proc { :output } }
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
it 'returns a new instance of Key' do
|
12
|
+
Key.new(input, output).must_be_instance_of(Key)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#input' do
|
17
|
+
it 'returns the key defined' do
|
18
|
+
Key.new('a', output).input.must_equal('a')
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'alias method #key' do
|
22
|
+
it { Key.new('a', output).key.must_equal('a') }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#output' do
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#press' do
|
30
|
+
it 'returns the result of calling the proc' do
|
31
|
+
Key.new(input, output).press.must_equal(:output)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns a :noop when the output is not a proc' do
|
35
|
+
Key.new(input, :output).press.must_equal(:noop)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end # Key
|
40
|
+
|
41
|
+
end # Vedeu
|
@@ -3,121 +3,45 @@ require 'test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
5
|
describe Compositor do
|
6
|
+
let(:interface) {
|
7
|
+
{
|
8
|
+
name: 'indium'
|
9
|
+
}
|
10
|
+
}
|
11
|
+
let(:buffer) {
|
12
|
+
Buffer.new({ name: 'indium' })
|
13
|
+
}
|
6
14
|
|
7
15
|
before do
|
8
|
-
|
9
|
-
Interfaces.reset
|
16
|
+
Focus.stubs(:cursor).returns("\e[?25l")
|
10
17
|
Terminal.console.stubs(:print)
|
11
18
|
end
|
12
19
|
|
13
|
-
describe '
|
14
|
-
|
15
|
-
Vedeu.interface('indium') do
|
16
|
-
width 10
|
17
|
-
height 1
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
subject { Compositor.render('indium') }
|
20
|
+
describe '#initialize' do
|
21
|
+
subject { Compositor.new(interface, buffer) }
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
proc { Compositor.render('') }.must_raise(BufferNotFound)
|
26
|
-
end
|
23
|
+
it 'returns an instance of Compositor' do
|
24
|
+
subject.must_be_instance_of(Compositor)
|
27
25
|
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'when there is new content' do
|
35
|
-
let(:back) {
|
36
|
-
{ name: 'indium', lines: [{ streams: [{ text: 'back' }] }] }
|
37
|
-
}
|
38
|
-
|
39
|
-
before { Buffers.add(back) }
|
40
|
-
|
41
|
-
it 'returns the current/front content' do
|
42
|
-
subject.must_equal([
|
43
|
-
"\e[1;1H \e[1;1H\e[1;1Hback",
|
44
|
-
"\e[1;1H\e[?25l"
|
45
|
-
])
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'swaps the new content with the current content' do
|
49
|
-
Buffers.find('indium').back.must_equal(back)
|
50
|
-
|
51
|
-
subject
|
52
|
-
|
53
|
-
Buffers.find('indium').back.must_equal({})
|
54
|
-
Buffers.find('indium').front.must_equal(back)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'when there is no new content' do
|
59
|
-
let(:front) {
|
60
|
-
{ name: 'indium', lines: [{ streams: [{ text: 'front' }] }] }
|
61
|
-
}
|
62
|
-
|
63
|
-
before do
|
64
|
-
Buffers.add(front)
|
65
|
-
Buffers.find('indium').swap
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'returns the current/front content' do
|
69
|
-
subject.must_equal([
|
70
|
-
"\e[1;1H \e[1;1H\e[1;1Hfront",
|
71
|
-
"\e[1;1H\e[?25l"
|
72
|
-
])
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context 'when there is no new or current content' do
|
77
|
-
let(:previous) {
|
78
|
-
{ name: 'indium', lines: [{ streams: [{ text: 'previous' }] }] }
|
79
|
-
}
|
80
|
-
|
81
|
-
before do
|
82
|
-
Buffers.add(previous) # puts 'previous' on to 'back'
|
83
|
-
Buffers.find('indium').swap # puts 'back' ('previous') on to 'front'
|
84
|
-
Buffers.find('indium').swap # puts 'front' ('previous') on to 'previous'
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'returns the previous content' do
|
88
|
-
subject.must_equal([
|
89
|
-
"\e[1;1H \e[1;1H\e[1;1Hprevious",
|
90
|
-
"\e[1;1H\e[?25l"
|
91
|
-
])
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'when there is no new, current or previous content' do
|
96
|
-
let(:clear) { { name: 'indium', lines: [] } }
|
97
|
-
|
98
|
-
before { Buffers.add(clear) }
|
27
|
+
it 'assigns the interface' do
|
28
|
+
subject.instance_variable_get("@interface").must_equal(interface)
|
29
|
+
end
|
99
30
|
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
31
|
+
it 'assigns the buffer' do
|
32
|
+
subject.instance_variable_get("@buffer").must_equal(buffer)
|
104
33
|
end
|
34
|
+
end
|
105
35
|
|
106
|
-
|
107
|
-
|
108
|
-
Interfaces.reset
|
109
|
-
Buffers.add({ name: 'indium' })
|
110
|
-
end
|
36
|
+
describe '#compose' do
|
37
|
+
subject { Compositor.new(interface, buffer).compose }
|
111
38
|
|
112
|
-
|
113
|
-
|
114
|
-
end
|
39
|
+
it 'returns an Array' do
|
40
|
+
subject.must_be_instance_of(Array)
|
115
41
|
end
|
116
|
-
end
|
117
42
|
|
118
|
-
|
119
|
-
|
120
|
-
Compositor.new('indium').must_be_instance_of(Compositor)
|
43
|
+
it 'returns the updated interface attributes' do
|
44
|
+
subject.must_equal([{}])
|
121
45
|
end
|
122
46
|
end
|
123
47
|
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Output do
|
6
|
+
# let(:interface) {
|
7
|
+
# Interface.new({
|
8
|
+
# name: 'flourine',
|
9
|
+
# geometry: {
|
10
|
+
# width: 32,
|
11
|
+
# height: 3,
|
12
|
+
# },
|
13
|
+
# lines: lines,
|
14
|
+
# colour: colour
|
15
|
+
# })
|
16
|
+
# }
|
17
|
+
# let(:lines) {
|
18
|
+
# [
|
19
|
+
# {
|
20
|
+
# streams: [{ text: 'this is the first' }]
|
21
|
+
# },
|
22
|
+
# {
|
23
|
+
# streams: [{ text: 'this is the second and it is long' }]
|
24
|
+
# },
|
25
|
+
# {
|
26
|
+
# streams: [{ text: 'this is the third, it is even longer and still truncated' }]
|
27
|
+
# },
|
28
|
+
# {
|
29
|
+
# streams: [{ text: 'this should not render' }]
|
30
|
+
# }
|
31
|
+
# ]
|
32
|
+
# }
|
33
|
+
# let(:colour) { {} }
|
34
|
+
|
35
|
+
# before do
|
36
|
+
# Buffers.reset
|
37
|
+
# Cursors.reset
|
38
|
+
# Interfaces.reset
|
39
|
+
|
40
|
+
# Terminal.console.stubs(:winsize).returns([5, 40])
|
41
|
+
# Terminal.console.stubs(:print)
|
42
|
+
# end
|
43
|
+
|
44
|
+
# describe '#initialize' do
|
45
|
+
# it 'returns an instance of itself' do
|
46
|
+
# Output.new(interface).must_be_instance_of(Output)
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
|
50
|
+
# describe '.render' do
|
51
|
+
# it 'returns the content for the interface' do
|
52
|
+
# Output.render(interface).must_equal(
|
53
|
+
# "\e[1;1H \e[1;1H" \
|
54
|
+
# "\e[2;1H \e[2;1H" \
|
55
|
+
# "\e[3;1H \e[3;1H" \
|
56
|
+
# "\e[1;1Hthis is the first" \
|
57
|
+
# "\e[2;1Hthis is the second and it is lon" \
|
58
|
+
# "\e[3;1Hthis is the third, it is even lo"
|
59
|
+
# )
|
60
|
+
# end
|
61
|
+
|
62
|
+
# context 'when there are no streams of text' do
|
63
|
+
# let(:lines) { [] }
|
64
|
+
|
65
|
+
# it 'returns a blank interface' do
|
66
|
+
# Output.render(interface).must_equal(
|
67
|
+
# "\e[1;1H \e[1;1H" \
|
68
|
+
# "\e[2;1H \e[2;1H" \
|
69
|
+
# "\e[3;1H \e[3;1H"
|
70
|
+
# )
|
71
|
+
# end
|
72
|
+
# end
|
73
|
+
|
74
|
+
# context 'when lines have streams which are empty' do
|
75
|
+
# let(:lines) {
|
76
|
+
# [
|
77
|
+
# {
|
78
|
+
# streams: [{ text: 'this is the first' }]
|
79
|
+
# }, {
|
80
|
+
# streams: { text: '' }
|
81
|
+
# }, {
|
82
|
+
# streams: [
|
83
|
+
# { text: 'this is the third, ' },
|
84
|
+
# { text: 'it is even longer ' },
|
85
|
+
# { text: 'and still truncated' }
|
86
|
+
# ]
|
87
|
+
# }, {
|
88
|
+
# streams: [{ text: 'this should not render' }]
|
89
|
+
# }
|
90
|
+
# ]
|
91
|
+
# }
|
92
|
+
|
93
|
+
# it 'skips lines' do
|
94
|
+
# Output.render(interface).must_equal(
|
95
|
+
# "\e[1;1H \e[1;1H" \
|
96
|
+
# "\e[2;1H \e[2;1H" \
|
97
|
+
# "\e[3;1H \e[3;1H" \
|
98
|
+
# "\e[1;1Hthis is the first" \
|
99
|
+
# "\e[2;1H" \
|
100
|
+
# "\e[3;1Hthis is the third, it is even lo"
|
101
|
+
# )
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
# end
|
105
|
+
|
106
|
+
end # Output
|
107
|
+
|
108
|
+
end # Vedeu
|
@@ -6,9 +6,43 @@ module Vedeu
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
Cursors.reset
|
9
|
+
Offsets.reset
|
9
10
|
Registrar.record({ name: 'chromium' })
|
10
11
|
end
|
11
12
|
|
13
|
+
describe '#add' do
|
14
|
+
let(:attributes) { { name: 'chromium' } }
|
15
|
+
|
16
|
+
it 'raises an exception if a :name attribute is not provided' do
|
17
|
+
proc { Offsets.add({ no_name: 'no_name' }) }
|
18
|
+
.must_raise(MissingRequired)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'returns a new instance of Offset once stored' do
|
22
|
+
Offsets.add({ name: 'praseodymium' }).must_be_instance_of(Offset)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns a new Cursor after registering' do
|
26
|
+
Cursors.add(attributes).must_be_instance_of(Cursor)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns a new Cursor after updating' do
|
30
|
+
Cursors.update(attributes).must_be_instance_of(Cursor)
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when the attributes do not have the :name key' do
|
34
|
+
let(:attributes) { { no_name_key: 'some_value' } }
|
35
|
+
|
36
|
+
it 'raises an exception' do
|
37
|
+
proc { Cursors.update(attributes) }.must_raise(MissingRequired)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'raises an exception' do
|
41
|
+
proc { Cursors.add(attributes) }.must_raise(MissingRequired)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
12
46
|
describe '#hide' do
|
13
47
|
it 'sets the state attribute of the Cursor to :hide' do
|
14
48
|
cursor = Cursors.hide
|
@@ -9,52 +9,46 @@ module Vedeu
|
|
9
9
|
|
10
10
|
describe '#add' do
|
11
11
|
it 'adds an interface to storage' do
|
12
|
-
Focus.add(
|
12
|
+
Focus.add('thallium').must_equal(['thallium'])
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'does not add it again if already exists' do
|
16
|
-
Focus.add(
|
17
|
-
Focus.add(
|
16
|
+
Focus.add('thallium')
|
17
|
+
Focus.add('thallium')
|
18
18
|
Focus.registered.must_equal(['thallium'])
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'adds the interface to storage focussed' do
|
22
|
-
Focus.add(
|
23
|
-
Focus.add(
|
22
|
+
Focus.add('thallium')
|
23
|
+
Focus.add('lead', true)
|
24
24
|
Focus.registered.must_equal(['lead', 'thallium'])
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'adds the interface to storage unfocussed' do
|
28
|
-
Focus.add(
|
29
|
-
Focus.add(
|
28
|
+
Focus.add('thallium')
|
29
|
+
Focus.add('lead')
|
30
30
|
Focus.registered.must_equal(['thallium', 'lead'])
|
31
31
|
end
|
32
|
-
|
33
|
-
it 'raises an exception if the attributes does not have a :name key' do
|
34
|
-
attributes = { no_name_key: '' }
|
35
|
-
|
36
|
-
proc { Focus.add(attributes) }.must_raise(MissingRequired)
|
37
|
-
end
|
38
32
|
end
|
39
33
|
|
40
34
|
describe '#by_name' do
|
41
35
|
it 'the named interface is focussed when the method is called' do
|
42
|
-
Focus.add(
|
43
|
-
Focus.add(
|
44
|
-
Focus.add(
|
36
|
+
Focus.add('thallium')
|
37
|
+
Focus.add('lead')
|
38
|
+
Focus.add('bismuth')
|
45
39
|
Focus.by_name('lead').must_equal('lead')
|
46
40
|
end
|
47
41
|
|
48
42
|
it 'raises an exception if the interface does not exist' do
|
49
|
-
proc { Focus.by_name('not_found') }.must_raise(
|
43
|
+
proc { Focus.by_name('not_found') }.must_raise(ModelNotFound)
|
50
44
|
end
|
51
45
|
end
|
52
46
|
|
53
47
|
describe '#current' do
|
54
48
|
it 'returns the name of the interface currently in focus' do
|
55
|
-
Focus.add(
|
56
|
-
Focus.add(
|
57
|
-
Focus.add(
|
49
|
+
Focus.add('thallium')
|
50
|
+
Focus.add('lead')
|
51
|
+
Focus.add('bismuth')
|
58
52
|
Focus.current.must_equal('thallium')
|
59
53
|
end
|
60
54
|
|
@@ -63,6 +57,18 @@ module Vedeu
|
|
63
57
|
end
|
64
58
|
end
|
65
59
|
|
60
|
+
describe '#cursor' do
|
61
|
+
before do
|
62
|
+
Interfaces.add({ name: 'thallium' })
|
63
|
+
Focus.add('thallium')
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns the escape sequence to render the cursor for the focussed ' \
|
67
|
+
'interface' do
|
68
|
+
Focus.cursor.must_equal("\e[1;1H\e[?25l")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
66
72
|
describe '#current?' do
|
67
73
|
before { Focus.stubs(:current).returns('lead') }
|
68
74
|
|
@@ -77,9 +83,9 @@ module Vedeu
|
|
77
83
|
|
78
84
|
describe '#next_item' do
|
79
85
|
it 'the next interface is focussed when the method is called' do
|
80
|
-
Focus.add(
|
81
|
-
Focus.add(
|
82
|
-
Focus.add(
|
86
|
+
Focus.add('thallium')
|
87
|
+
Focus.add('lead')
|
88
|
+
Focus.add('bismuth')
|
83
89
|
Focus.next_item.must_equal('lead')
|
84
90
|
end
|
85
91
|
|
@@ -90,9 +96,9 @@ module Vedeu
|
|
90
96
|
|
91
97
|
describe '#prev_item' do
|
92
98
|
it 'the previous interface is focussed when the method is called' do
|
93
|
-
Focus.add(
|
94
|
-
Focus.add(
|
95
|
-
Focus.add(
|
99
|
+
Focus.add('thallium')
|
100
|
+
Focus.add('lead')
|
101
|
+
Focus.add('bismuth')
|
96
102
|
Focus.prev_item.must_equal('bismuth')
|
97
103
|
end
|
98
104
|
|
@@ -102,9 +108,12 @@ module Vedeu
|
|
102
108
|
end
|
103
109
|
|
104
110
|
describe '#refresh' do
|
105
|
-
|
106
|
-
Focus.add(
|
111
|
+
before do
|
112
|
+
Focus.add('thallium')
|
113
|
+
Vedeu.stubs(:trigger).returns([])
|
114
|
+
end
|
107
115
|
|
116
|
+
it 'triggers the event to refresh the interface current in focus' do
|
108
117
|
Focus.refresh.must_equal([])
|
109
118
|
end
|
110
119
|
end
|