vedeu 0.4.22 → 0.4.23
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/Rakefile +5 -5
- data/examples/geometry_app.rb +2 -2
- data/lib/vedeu/bindings.rb +2 -15
- data/lib/vedeu/buffers/buffer.rb +2 -6
- data/lib/vedeu/configuration/cli.rb +4 -4
- data/lib/vedeu/dsl/components/border.rb +24 -8
- data/lib/vedeu/dsl/components/geometry.rb +10 -0
- data/lib/vedeu/events/event.rb +1 -2
- data/lib/vedeu/geometry/area.rb +4 -1
- data/lib/vedeu/geometry/geometry.rb +51 -18
- data/lib/vedeu/geometry/grid.rb +4 -28
- data/lib/vedeu/launcher.rb +6 -2
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/output/clear.rb +8 -8
- data/lib/vedeu/output/compressor.rb +1 -0
- data/lib/vedeu/output/esc.rb +29 -101
- data/lib/vedeu/output/html_char.rb +9 -9
- data/lib/vedeu/output/refresh.rb +17 -5
- data/lib/vedeu/output/renderers/all.rb +1 -9
- data/lib/vedeu/output/translator.rb +1 -1
- data/lib/vedeu/output/viewport.rb +1 -1
- data/lib/vedeu/repositories/repositories/colours.rb +6 -3
- data/lib/vedeu/support/all.rb +1 -0
- data/lib/vedeu/support/template.rb +2 -1
- data/lib/vedeu/support/terminal.rb +2 -0
- data/lib/vedeu/support/timer.rb +44 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +1 -7
- data/test/lib/vedeu/configuration/cli_test.rb +28 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +12 -0
- data/test/lib/vedeu/geometry/geometry_test.rb +8 -0
- data/test/lib/vedeu/geometry/grid_test.rb +0 -20
- data/test/lib/vedeu/geometry/position_test.rb +6 -0
- data/test/lib/vedeu/null/border_test.rb +6 -0
- data/test/lib/vedeu/output/clear_test.rb +12 -6
- data/test/lib/vedeu/output/compressor_test.rb +29 -0
- data/test/lib/vedeu/output/esc_test.rb +26 -26
- data/test/lib/vedeu/output/presentation_test.rb +22 -0
- data/test/lib/vedeu/output/translator_test.rb +18 -16
- data/test/lib/vedeu/output/viewport_test.rb +163 -97
- data/test/lib/vedeu/output/virtual_terminal_test.rb +6 -0
- data/test/lib/vedeu/repositories/repositories/colours_test.rb +29 -4
- data/test/lib/vedeu/repositories/repository_test.rb +6 -0
- data/vedeu.gemspec +4 -4
- metadata +3 -44
@@ -72,103 +72,169 @@ module Vedeu
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
75
|
+
describe '#to_s' do
|
76
|
+
let(:cursor) { Cursor.new(cursor_attributes) }
|
77
|
+
let(:cursor_attributes) {
|
78
|
+
{ name: 'lithium', ox: ox, oy: oy, visible: true, x: x, y: y }
|
79
|
+
}
|
80
|
+
let(:lines) { [] }
|
81
|
+
let(:ox) { 0 }
|
82
|
+
let(:oy) { 0 }
|
83
|
+
let(:x) { 1 }
|
84
|
+
let(:y) { 1 }
|
85
|
+
|
86
|
+
subject { instance.to_s }
|
87
|
+
|
88
|
+
it { subject.must_be_instance_of(String) }
|
89
|
+
|
90
|
+
context 'when there is no content' do
|
91
|
+
before { interface.stubs(:lines).returns([]) }
|
92
|
+
|
93
|
+
it { subject.must_equal('') }
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when there is content' do
|
97
|
+
context "when the cursor's y position is outside the viewable " \
|
98
|
+
"area - negative" do
|
99
|
+
let(:ox) { -4 }
|
100
|
+
let(:oy) { -4 }
|
101
|
+
|
102
|
+
it 'scrolls the content the correct position' do
|
103
|
+
subject.must_equal(
|
104
|
+
"\e[1;1Hb\e[1;1H\n" \
|
105
|
+
"\e[1;2Ha\e[1;2H\n" \
|
106
|
+
"\e[1;3Hr\e[1;3H\n" \
|
107
|
+
"\e[2;1Hc\e[2;1H\n" \
|
108
|
+
"\e[2;2Ha\e[2;2H\n" \
|
109
|
+
"\e[2;3Hr\e[2;3H\n" \
|
110
|
+
"\e[3;1Hh\e[3;1H\n" \
|
111
|
+
"\e[3;2He\e[3;2H\n" \
|
112
|
+
"\e[3;3Hl\e[3;3H"
|
113
|
+
)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when the cursor's y position is inside the viewable area" do
|
118
|
+
context "when there is not enough content to fill the height" do
|
119
|
+
let(:ox) { 3 }
|
120
|
+
let(:oy) { 7 }
|
121
|
+
|
122
|
+
it "renders the visible content" do
|
123
|
+
subject.must_equal(
|
124
|
+
"\e[1;1Hb\e[1;1H\n" \
|
125
|
+
"\e[1;2Ha\e[1;2H\n" \
|
126
|
+
"\e[1;3Hr\e[1;3H\n" \
|
127
|
+
"\e[2;1Hc\e[2;1H\n" \
|
128
|
+
"\e[2;2Ha\e[2;2H\n" \
|
129
|
+
"\e[2;3Hr\e[2;3H\n" \
|
130
|
+
"\e[3;1Hh\e[3;1H\n" \
|
131
|
+
"\e[3;2He\e[3;2H\n" \
|
132
|
+
"\e[3;3Hl\e[3;3H"
|
133
|
+
)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when there is more content than the height" do
|
138
|
+
let(:ox) { 3 }
|
139
|
+
let(:oy) { 3 }
|
140
|
+
|
141
|
+
it "is cropped to show only that which fits" do
|
142
|
+
subject.must_equal(
|
143
|
+
"\e[1;1Hb\e[1;1H\n" \
|
144
|
+
"\e[1;2Ha\e[1;2H\n" \
|
145
|
+
"\e[1;3Hr\e[1;3H\n" \
|
146
|
+
"\e[2;1Hc\e[2;1H\n" \
|
147
|
+
"\e[2;2Ha\e[2;2H\n" \
|
148
|
+
"\e[2;3Hr\e[2;3H\n" \
|
149
|
+
"\e[3;1Hh\e[3;1H\n" \
|
150
|
+
"\e[3;2He\e[3;2H\n" \
|
151
|
+
"\e[3;3Hl\e[3;3H"
|
152
|
+
)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context "when the cursor's x position is outside the viewable area" do
|
158
|
+
context "but inside the content" do
|
159
|
+
let(:ox) { 6 }
|
160
|
+
let(:oy) { 6 }
|
161
|
+
|
162
|
+
it 'scrolls the content the correct position' do
|
163
|
+
subject.must_equal(
|
164
|
+
"\e[1;1Hb\e[1;1H\n" \
|
165
|
+
"\e[1;2Ha\e[1;2H\n" \
|
166
|
+
"\e[1;3Hr\e[1;3H\n" \
|
167
|
+
"\e[2;1Hc\e[2;1H\n" \
|
168
|
+
"\e[2;2Ha\e[2;2H\n" \
|
169
|
+
"\e[2;3Hr\e[2;3H\n" \
|
170
|
+
"\e[3;1Hh\e[3;1H\n" \
|
171
|
+
"\e[3;2He\e[3;2H\n" \
|
172
|
+
"\e[3;3Hl\e[3;3H"
|
173
|
+
)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "and outside the content" do
|
178
|
+
let(:ox) { 7 }
|
179
|
+
let(:oy) { 7 }
|
180
|
+
|
181
|
+
it "scrolls the content the correct position" do
|
182
|
+
subject.must_equal(
|
183
|
+
"\e[1;1Hb\e[1;1H\n" \
|
184
|
+
"\e[1;2Ha\e[1;2H\n" \
|
185
|
+
"\e[1;3Hr\e[1;3H\n" \
|
186
|
+
"\e[2;1Hc\e[2;1H\n" \
|
187
|
+
"\e[2;2Ha\e[2;2H\n" \
|
188
|
+
"\e[2;3Hr\e[2;3H\n" \
|
189
|
+
"\e[3;1Hh\e[3;1H\n" \
|
190
|
+
"\e[3;2He\e[3;2H\n" \
|
191
|
+
"\e[3;3Hl\e[3;3H"
|
192
|
+
)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
context "when the cursor's x position is inside the viewable area" do
|
198
|
+
context "when there is not enough content to fill the width" do
|
199
|
+
let(:ox) { 7 }
|
200
|
+
let(:oy) { 3 }
|
201
|
+
|
202
|
+
it "renders the visible content" do
|
203
|
+
subject.must_equal(
|
204
|
+
"\e[1;1Hb\e[1;1H\n" \
|
205
|
+
"\e[1;2Ha\e[1;2H\n" \
|
206
|
+
"\e[1;3Hr\e[1;3H\n" \
|
207
|
+
"\e[2;1Hc\e[2;1H\n" \
|
208
|
+
"\e[2;2Ha\e[2;2H\n" \
|
209
|
+
"\e[2;3Hr\e[2;3H\n" \
|
210
|
+
"\e[3;1Hh\e[3;1H\n" \
|
211
|
+
"\e[3;2He\e[3;2H\n" \
|
212
|
+
"\e[3;3Hl\e[3;3H"
|
213
|
+
)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
context "when there is more content than the width" do
|
218
|
+
let(:ox) { 3 }
|
219
|
+
let(:oy) { 3 }
|
220
|
+
|
221
|
+
it "is cropped to show only that which fits" do
|
222
|
+
subject.must_equal(
|
223
|
+
"\e[1;1Hb\e[1;1H\n" \
|
224
|
+
"\e[1;2Ha\e[1;2H\n" \
|
225
|
+
"\e[1;3Hr\e[1;3H\n" \
|
226
|
+
"\e[2;1Hc\e[2;1H\n" \
|
227
|
+
"\e[2;2Ha\e[2;2H\n" \
|
228
|
+
"\e[2;3Hr\e[2;3H\n" \
|
229
|
+
"\e[3;1Hh\e[3;1H\n" \
|
230
|
+
"\e[3;2He\e[3;2H\n" \
|
231
|
+
"\e[3;3Hl\e[3;3H"
|
232
|
+
)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
172
238
|
|
173
239
|
end # Viewport
|
174
240
|
|
@@ -13,16 +13,30 @@ module Vedeu
|
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '#register' do
|
16
|
-
let(:colour) {}
|
17
|
-
let(:escape_sequence) {}
|
16
|
+
let(:colour) { 'ff0000' }
|
17
|
+
let(:escape_sequence) { 'fake_escape_sequence' }
|
18
18
|
|
19
19
|
subject { instance.register(colour, escape_sequence) }
|
20
|
+
|
21
|
+
it { subject.must_equal('fake_escape_sequence') }
|
20
22
|
end
|
21
23
|
|
22
24
|
describe '#registered?' do
|
23
25
|
let(:colour) {}
|
24
26
|
|
25
27
|
subject { instance.registered?(colour) }
|
28
|
+
|
29
|
+
context 'when the colour is registered' do
|
30
|
+
let(:colour) { '#aa0000' }
|
31
|
+
|
32
|
+
before { instance.register(colour, 'fake_escape_sequence') }
|
33
|
+
|
34
|
+
it { subject.must_equal(true) }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when the colour is not registered' do
|
38
|
+
it { subject.must_equal(false) }
|
39
|
+
end
|
26
40
|
end
|
27
41
|
|
28
42
|
describe '#reset!' do
|
@@ -39,6 +53,11 @@ module Vedeu
|
|
39
53
|
subject { instance.retrieve(colour) }
|
40
54
|
|
41
55
|
context 'when the colour can be found' do
|
56
|
+
let(:colour) { '#bb0000' }
|
57
|
+
|
58
|
+
before { instance.register(colour, 'fake_escape_sequence') }
|
59
|
+
|
60
|
+
it { subject.must_equal('fake_escape_sequence') }
|
42
61
|
end
|
43
62
|
|
44
63
|
context 'when the colour cannot be found' do
|
@@ -47,15 +66,21 @@ module Vedeu
|
|
47
66
|
end
|
48
67
|
|
49
68
|
describe '#retrieve_or_register' do
|
50
|
-
let(:colour) {}
|
51
|
-
let(:escape_sequence) {}
|
69
|
+
let(:colour) { '#cc0000' }
|
70
|
+
let(:escape_sequence) { 'escape_sequence' }
|
52
71
|
|
53
72
|
subject { instance.retrieve_or_register(colour, escape_sequence) }
|
54
73
|
|
55
74
|
context 'when the colour is registered' do
|
75
|
+
let(:colour) { '#cc0000' }
|
76
|
+
|
77
|
+
before { instance.register(colour, 'fake_escape_sequence') }
|
78
|
+
|
79
|
+
it { subject.must_equal('fake_escape_sequence') }
|
56
80
|
end
|
57
81
|
|
58
82
|
context 'when the colour is not registered' do
|
83
|
+
it { subject.must_equal('escape_sequence') }
|
59
84
|
end
|
60
85
|
end
|
61
86
|
|
@@ -60,6 +60,12 @@ module Vedeu
|
|
60
60
|
it { instance.instance_variable_get('@storage').must_equal(storage) }
|
61
61
|
end
|
62
62
|
|
63
|
+
describe '#current' do
|
64
|
+
subject { instance.current }
|
65
|
+
|
66
|
+
# it { subject.must_equal('') }
|
67
|
+
end
|
68
|
+
|
63
69
|
describe '#find' do
|
64
70
|
subject { instance.find(model_name) }
|
65
71
|
|
data/vedeu.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'vedeu'
|
7
|
-
spec.version = '0.4.
|
7
|
+
spec.version = '0.4.23'
|
8
8
|
spec.authors = ['Gavin Laking']
|
9
9
|
spec.email = ['gavinlaking@gmail.com']
|
10
10
|
spec.summary = 'A terminal case of wonderland.'
|
@@ -18,12 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'aruba', '0.6.2'
|
21
|
+
# spec.add_development_dependency 'aruba', '0.6.2'
|
22
22
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
23
|
-
spec.add_development_dependency 'cucumber', '2.0.0'
|
23
|
+
# spec.add_development_dependency 'cucumber', '2.0.0'
|
24
24
|
spec.add_development_dependency 'guard', '2.12.5'
|
25
25
|
spec.add_development_dependency 'guard-bundler', '2.1.0'
|
26
|
-
spec.add_development_dependency 'guard-cucumber', '1.6.0'
|
26
|
+
# spec.add_development_dependency 'guard-cucumber', '1.6.0'
|
27
27
|
spec.add_development_dependency 'guard-minitest', '2.4.4'
|
28
28
|
spec.add_development_dependency 'inch', '0.6.2'
|
29
29
|
spec.add_development_dependency 'minitest', '5.6.1'
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vedeu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: aruba
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.6.2
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.6.2
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +24,6 @@ dependencies:
|
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '1.8'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: cucumber
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0.0
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 2.0.0
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: guard
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +52,6 @@ dependencies:
|
|
80
52
|
- - '='
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: 2.1.0
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: guard-cucumber
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.6.0
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.6.0
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
56
|
name: guard-minitest
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -480,6 +438,7 @@ files:
|
|
480
438
|
- lib/vedeu/support/options.rb
|
481
439
|
- lib/vedeu/support/template.rb
|
482
440
|
- lib/vedeu/support/terminal.rb
|
441
|
+
- lib/vedeu/support/timer.rb
|
483
442
|
- lib/vedeu/support/trace.rb
|
484
443
|
- lib/vedeu/support/visibility.rb
|
485
444
|
- lib/vedeu/traps.rb
|