vedeu 0.2.10 → 0.2.11
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/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
@@ -4,9 +4,9 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Keymaps do
|
6
6
|
|
7
|
-
|
8
|
-
before { Keymaps.reset }
|
7
|
+
before { Keymaps.reset }
|
9
8
|
|
9
|
+
describe '#add' do
|
10
10
|
it 'returns false when there are no keys defined' do
|
11
11
|
attributes = {}
|
12
12
|
|
@@ -28,10 +28,7 @@ module Vedeu
|
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
31
|
-
before
|
32
|
-
Keymaps.reset
|
33
|
-
Keymaps.add(attributes)
|
34
|
-
end
|
31
|
+
before { Keymaps.add(attributes) }
|
35
32
|
|
36
33
|
it 'returns false when the named keymap cannot be found' do
|
37
34
|
Keymaps.find('vanadium').must_equal({})
|
@@ -43,10 +40,7 @@ module Vedeu
|
|
43
40
|
end
|
44
41
|
|
45
42
|
describe '#global_key?' do
|
46
|
-
before
|
47
|
-
Keymaps.reset
|
48
|
-
Keymaps.stubs(:global_keys).returns(['i', 'j'])
|
49
|
-
end
|
43
|
+
before { Keymaps.stubs(:global_keys).returns(['i', 'j']) }
|
50
44
|
|
51
45
|
it 'returns false when the key is not registered as a global key' do
|
52
46
|
Keymaps.global_key?('h').must_equal(false)
|
@@ -72,10 +66,7 @@ module Vedeu
|
|
72
66
|
}
|
73
67
|
}
|
74
68
|
|
75
|
-
before
|
76
|
-
Keymaps.reset
|
77
|
-
Keymaps.add(attributes)
|
78
|
-
end
|
69
|
+
before { Keymaps.add(attributes) }
|
79
70
|
|
80
71
|
it 'returns the defined global keys' do
|
81
72
|
Keymaps.global_keys.must_equal(['a', 'b', 'c'])
|
@@ -83,10 +74,7 @@ module Vedeu
|
|
83
74
|
end
|
84
75
|
|
85
76
|
describe '#interface_key?' do
|
86
|
-
before
|
87
|
-
Keymaps.reset
|
88
|
-
Keymaps.stubs(:interface_keys).returns(['g', 'h'])
|
89
|
-
end
|
77
|
+
before { Keymaps.stubs(:interface_keys).returns(['g', 'h']) }
|
90
78
|
|
91
79
|
it 'returns false when the key is not registered with an interface' do
|
92
80
|
Keymaps.interface_key?('f').must_equal(false)
|
@@ -140,7 +128,6 @@ module Vedeu
|
|
140
128
|
}
|
141
129
|
|
142
130
|
before do
|
143
|
-
Keymaps.reset
|
144
131
|
Keymaps.add(rhodium_attributes)
|
145
132
|
Keymaps.add(magnesium_attributes)
|
146
133
|
end
|
@@ -198,7 +185,6 @@ module Vedeu
|
|
198
185
|
}
|
199
186
|
|
200
187
|
before do
|
201
|
-
Keymaps.reset
|
202
188
|
Keymaps.add(meitnerium_attributes)
|
203
189
|
Keymaps.add(global_attributes)
|
204
190
|
Vedeu::Focus.stubs(:current).returns('meitnerium')
|
@@ -15,12 +15,6 @@ module Vedeu
|
|
15
15
|
Vedeu::Menu.stubs(:new).returns(instance)
|
16
16
|
end
|
17
17
|
|
18
|
-
it 'raises an exception when triggered with an unregistered name' do
|
19
|
-
proc {
|
20
|
-
Vedeu.trigger(:_menu_current_, 'unknown')
|
21
|
-
}.must_raise(MenuNotFound)
|
22
|
-
end
|
23
|
-
|
24
18
|
it '_menu_current_' do
|
25
19
|
Vedeu.trigger(:_menu_current_, 'elements').must_equal(:sulphur)
|
26
20
|
end
|
@@ -52,71 +52,68 @@ module Vedeu
|
|
52
52
|
it { subject.must_be_instance_of(Hash) }
|
53
53
|
end
|
54
54
|
|
55
|
-
describe '#
|
56
|
-
subject { Buffer.new(attributes).
|
55
|
+
describe '#content' do
|
56
|
+
subject { Buffer.new(attributes).content }
|
57
57
|
|
58
58
|
context 'when there is content on the back buffer' do
|
59
59
|
let(:back) { { lines: [{ streams: [{ text: 'back' }] }] } }
|
60
|
+
let(:buffer) { :back }
|
60
61
|
|
61
|
-
it { subject.must_equal(
|
62
|
+
it { subject.must_equal([{}, back]) }
|
62
63
|
end
|
63
64
|
|
64
65
|
context 'when there is no content on the back buffer' do
|
65
|
-
|
66
|
+
let(:buffer) { :back }
|
67
|
+
|
68
|
+
it { subject.must_equal([{}]) }
|
66
69
|
end
|
67
70
|
|
68
71
|
context 'when there is no content on the back buffer' do
|
69
72
|
let(:back) { { lines: [] } }
|
73
|
+
let(:buffer) { :back }
|
70
74
|
|
71
|
-
it { subject.must_equal(
|
75
|
+
it { subject.must_equal([{}]) }
|
72
76
|
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe '#front?' do
|
76
|
-
subject { Buffer.new(attributes).front? }
|
77
77
|
|
78
78
|
context 'when there is content on the front buffer' do
|
79
|
+
let(:buffer) { :front }
|
79
80
|
let(:front) { { lines: [{ streams: [{ text: 'front' }] }] } }
|
80
81
|
|
81
|
-
it { subject.must_equal(
|
82
|
+
it { subject.must_equal([front]) }
|
82
83
|
end
|
83
84
|
|
84
85
|
context 'when there is no content on the front buffer' do
|
85
|
-
|
86
|
+
let(:buffer) { :front }
|
87
|
+
|
88
|
+
it { subject.must_equal([{}]) }
|
86
89
|
end
|
87
90
|
|
88
91
|
context 'when there is no content on the front buffer' do
|
89
|
-
let(:
|
90
|
-
|
91
|
-
it { subject.must_equal(false) }
|
92
|
-
end
|
92
|
+
let(:buffer) { :front }
|
93
93
|
|
94
|
-
|
95
|
-
subject { Buffer.new(attributes).current? }
|
94
|
+
let(:front) { { lines: [] } }
|
96
95
|
|
97
|
-
|
98
|
-
it { subject.must_equal(false) }
|
99
|
-
end
|
96
|
+
it { subject.must_equal([{}]) }
|
100
97
|
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe '#previous?' do
|
104
|
-
subject { Buffer.new(attributes).previous? }
|
105
98
|
|
106
99
|
context 'when there is content on the previous buffer' do
|
100
|
+
let(:buffer) { :previous }
|
107
101
|
let(:previous) { { lines: [{ streams: [{ text: 'previous' }] }] } }
|
108
102
|
|
109
|
-
it { subject.must_equal(
|
103
|
+
it { subject.must_equal([previous]) }
|
110
104
|
end
|
111
105
|
|
112
106
|
context 'when there is no content on the previous buffer' do
|
113
|
-
|
107
|
+
let(:buffer) { :previous }
|
108
|
+
|
109
|
+
it { subject.must_equal([{}]) }
|
114
110
|
end
|
115
111
|
|
116
112
|
context 'when there is no content on the previous buffer' do
|
113
|
+
let(:buffer) { :previous }
|
117
114
|
let(:previous) { { lines: [] } }
|
118
115
|
|
119
|
-
it { subject.must_equal(
|
116
|
+
it { subject.must_equal([{}]) }
|
120
117
|
end
|
121
118
|
end
|
122
119
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe BoundingArea do
|
6
|
+
|
7
|
+
let(:height) { 15 }
|
8
|
+
let(:width) { 40 }
|
9
|
+
let(:described_instance) { BoundingArea.new(height, width) }
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
it 'returns an instance of itself' do
|
13
|
+
described_instance.must_be_instance_of(BoundingArea)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'assigns the height' do
|
17
|
+
described_instance.instance_variable_get("@height").must_equal(height)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'assigns the width' do
|
21
|
+
described_instance.instance_variable_get("@width").must_equal(width)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#height' do
|
26
|
+
it 'returns the height' do
|
27
|
+
described_instance.height.must_equal(height)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#width' do
|
32
|
+
it 'returns the width' do
|
33
|
+
described_instance.width.must_equal(width)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#top' do
|
38
|
+
context 'when an offset is provided' do
|
39
|
+
it 'returns the new top with the offset applied' do
|
40
|
+
described_instance.top(5).must_equal(6)
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when the offset is greater or equal to the height' do
|
44
|
+
it 'returns the height' do
|
45
|
+
described_instance.top(20).must_equal(15)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when the offset is less than or equal to 1' do
|
50
|
+
it { described_instance.top(-1).must_equal(1) }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when an offset is not provided' do
|
55
|
+
it { described_instance.top.must_equal(1) }
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'alias_method #y' do
|
59
|
+
it { described_instance.y.must_equal(1) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#bottom' do
|
64
|
+
context 'when an offset is provided' do
|
65
|
+
it 'returns the new bottom with the offset applied' do
|
66
|
+
described_instance.bottom(5).must_equal(10)
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when the offset is greater or equal to the height' do
|
70
|
+
it { described_instance.bottom(30).must_equal(1) }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when the offset is less than 0' do
|
74
|
+
it { described_instance.bottom(-1).must_equal(height) }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when an offset is not provided' do
|
79
|
+
it { described_instance.bottom.must_equal(15) }
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'alias_method #yn' do
|
83
|
+
it { described_instance.yn.must_equal(15) }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#left' do
|
88
|
+
context 'when an offset is provided' do
|
89
|
+
it 'returns the new left with the offset applied' do
|
90
|
+
described_instance.left(5).must_equal(6)
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when the offset is greater or equal to the width' do
|
94
|
+
it 'returns the width' do
|
95
|
+
described_instance.left(50).must_equal(40)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'when the offset is less than or equal to 1' do
|
100
|
+
it { described_instance.left(-1).must_equal(1) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when an offset is not provided' do
|
105
|
+
it { described_instance.left.must_equal(1) }
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'alias_method #x' do
|
109
|
+
it { described_instance.x.must_equal(1) }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#right' do
|
114
|
+
context 'when an offset is provided' do
|
115
|
+
it 'returns the new right with the offset applied' do
|
116
|
+
described_instance.right(5).must_equal(35)
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'when the offset is greater or equal to the width' do
|
120
|
+
it { described_instance.right(50).must_equal(1) }
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'when the offset is less than 0' do
|
124
|
+
it { described_instance.right(-1).must_equal(40) }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'when an offset is not provided' do
|
129
|
+
it { described_instance.right.must_equal(40) }
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'alias_method #xn' do
|
133
|
+
it { described_instance.xn.must_equal(40) }
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end # BoundingArea
|
138
|
+
|
139
|
+
end # Vedeu
|
@@ -2,40 +2,29 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
|
-
class TestClass
|
6
|
-
include Coercions
|
7
|
-
|
8
|
-
attr_reader :attributes
|
9
|
-
|
10
|
-
def initialize(attributes = {})
|
11
|
-
@attributes = attributes
|
12
|
-
@name = attributes[:name]
|
13
|
-
end
|
14
|
-
end # TestClass
|
15
|
-
|
16
5
|
describe Coercions do
|
17
6
|
|
18
7
|
describe '.coercer' do
|
19
8
|
[nil, [], {}].each do |empty_value|
|
20
9
|
it 'returns an empty collection when nil or empty' do
|
21
|
-
|
10
|
+
CoercionsTestClass.coercer(empty_value).must_equal([])
|
22
11
|
end
|
23
12
|
end
|
24
13
|
|
25
14
|
it 'returns when an object' do
|
26
|
-
klass =
|
15
|
+
klass = CoercionsTestClass.new
|
27
16
|
|
28
|
-
|
17
|
+
CoercionsTestClass.coercer([klass]).must_equal([klass])
|
29
18
|
end
|
30
19
|
|
31
20
|
it 'returns a collection of models when a single hash' do
|
32
|
-
coerced =
|
21
|
+
coerced = CoercionsTestClass.coercer({ :name => 'test1' })
|
33
22
|
coerced.must_be_instance_of(Array)
|
34
23
|
coerced.first.attributes.must_equal({ name: "test1" })
|
35
24
|
end
|
36
25
|
|
37
26
|
it 'returns a collection of models when multiple hashes' do
|
38
|
-
coerced =
|
27
|
+
coerced = CoercionsTestClass.coercer([
|
39
28
|
{ :name => 'test1' }, { :name => 'test2' }
|
40
29
|
])
|
41
30
|
coerced.size.must_equal(2)
|
@@ -45,7 +34,7 @@ module Vedeu
|
|
45
34
|
end
|
46
35
|
|
47
36
|
it 'returns a collection of models when a single array' do
|
48
|
-
coerced =
|
37
|
+
coerced = CoercionsTestClass.coercer([{ :name => 'test3' }])
|
49
38
|
coerced.size.must_equal(1)
|
50
39
|
coerced.first.attributes.must_equal({ name: "test3" })
|
51
40
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Model do
|
6
|
+
|
7
|
+
describe '#store' do
|
8
|
+
let(:attributes) {
|
9
|
+
{
|
10
|
+
name: 'hydrogen'
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
subject { ModelTestClass.new(attributes).store }
|
15
|
+
|
16
|
+
it 'returns the model' do
|
17
|
+
subject.must_be_instance_of(ModelTestClass)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end # Model
|
22
|
+
|
23
|
+
end # Vedeu
|
@@ -1,16 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module Vedeu
|
4
|
-
class PresentationTestClass
|
5
|
-
include Presentation
|
6
|
-
|
7
|
-
def attributes
|
8
|
-
{
|
9
|
-
colour: { background: '#000033', foreground: '#aadd00' },
|
10
|
-
style: ['bold']
|
11
|
-
}
|
12
|
-
end
|
13
|
-
end # PresentationTestClass
|
14
4
|
|
15
5
|
describe Presentation do
|
16
6
|
|