vedeu 0.3.4 → 0.3.5
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/README.md +1 -1
- data/Rakefile +6 -0
- data/bin/vedeu_drb_client +8 -3
- data/bin/vedeu_drb_server +113 -0
- data/bin/vedeu_test +1 -1
- data/docs/events.md +0 -127
- data/examples/borders_app.rb +17 -7
- data/examples/configuration_app.rb +1 -1
- data/examples/cursor_app.rb +4 -2
- data/examples/drb_app.rb +113 -0
- data/examples/focus_app.rb +1 -1
- data/examples/geometry_app.rb +1 -1
- data/examples/hello_world.rb +1 -1
- data/examples/lines_app.rb +1 -1
- data/features/start_stop.feature +1 -1
- data/inch.yml +5 -0
- data/lib/vedeu/all.rb +2 -0
- data/lib/vedeu/api.rb +1 -0
- data/lib/vedeu/application.rb +17 -36
- data/lib/vedeu/bindings.rb +134 -27
- data/lib/vedeu/buffers/display_buffer.rb +1 -4
- data/lib/vedeu/configuration/api.rb +15 -14
- data/lib/vedeu/configuration/cli.rb +17 -16
- data/lib/vedeu/configuration/configuration.rb +3 -1
- data/lib/vedeu/cursor/cursor.rb +6 -8
- data/lib/vedeu/cursor/move_cursor.rb +1 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +1 -0
- data/lib/vedeu/debug.rb +23 -0
- data/lib/vedeu/distributed/all.rb +1 -1
- data/lib/vedeu/distributed/client.rb +55 -13
- data/lib/vedeu/distributed/server.rb +207 -0
- data/lib/vedeu/distributed/subprocess.rb +22 -21
- data/lib/vedeu/distributed/templates/default_application.vedeu +3 -1
- data/lib/vedeu/distributed/test_application.rb +2 -1
- data/lib/vedeu/distributed/uri.rb +1 -0
- data/lib/vedeu/dsl/all.rb +4 -2
- data/lib/vedeu/dsl/components/border.rb +11 -10
- data/lib/vedeu/dsl/components/geometry.rb +1 -0
- data/lib/vedeu/dsl/components/keymap.rb +1 -0
- data/lib/vedeu/dsl/components/menu.rb +1 -0
- data/lib/vedeu/dsl/interface.rb +1 -0
- data/lib/vedeu/dsl/line.rb +3 -1
- data/lib/vedeu/dsl/shared/colour.rb +1 -0
- data/lib/vedeu/dsl/shared/style.rb +1 -0
- data/lib/vedeu/dsl/shared/text.rb +2 -0
- data/lib/vedeu/dsl/shared/use.rb +3 -0
- data/lib/vedeu/dsl/stream.rb +3 -1
- data/lib/vedeu/dsl/view.rb +1 -0
- data/lib/vedeu/events/event.rb +9 -6
- data/lib/vedeu/events/trigger.rb +18 -7
- data/lib/vedeu/exceptions.rb +4 -1
- data/lib/vedeu/input/input.rb +1 -0
- data/lib/vedeu/input/key.rb +0 -1
- data/lib/vedeu/input/keymap.rb +5 -3
- data/lib/vedeu/input/keys.rb +1 -0
- data/lib/vedeu/input/mapper.rb +1 -0
- data/lib/vedeu/launcher.rb +35 -12
- data/lib/vedeu/main_loop.rb +53 -0
- data/lib/vedeu/models/collection.rb +11 -3
- data/lib/vedeu/models/focus.rb +3 -3
- data/lib/vedeu/models/geometry.rb +8 -16
- data/lib/vedeu/models/group.rb +1 -0
- data/lib/vedeu/models/menu.rb +2 -1
- data/lib/vedeu/models/model.rb +7 -1
- data/lib/vedeu/models/view/char.rb +52 -44
- data/lib/vedeu/models/view/chars.rb +1 -0
- data/lib/vedeu/models/view/composition.rb +2 -1
- data/lib/vedeu/models/view/interface.rb +5 -3
- data/lib/vedeu/models/view/interfaces.rb +1 -0
- data/lib/vedeu/models/view/line.rb +2 -1
- data/lib/vedeu/models/view/stream.rb +2 -1
- data/lib/vedeu/models/view/streams.rb +1 -0
- data/lib/vedeu/output/all.rb +4 -0
- data/lib/vedeu/output/border.rb +75 -206
- data/lib/vedeu/output/compositor.rb +1 -0
- data/lib/vedeu/output/html_char.rb +119 -0
- data/lib/vedeu/output/html_renderer.rb +89 -0
- data/lib/vedeu/output/output.rb +48 -44
- data/lib/vedeu/output/position_index.rb +12 -1
- data/lib/vedeu/output/renderer.rb +28 -0
- data/lib/vedeu/output/viewport.rb +14 -14
- data/lib/vedeu/output/virtual_buffer.rb +56 -0
- data/lib/vedeu/output/virtual_terminal.rb +42 -34
- data/lib/vedeu/output/wordwrap.rb +3 -0
- data/lib/vedeu/output/writer.rb +13 -1
- data/lib/vedeu/presentation/background.rb +1 -0
- data/lib/vedeu/presentation/colour.rb +8 -7
- data/lib/vedeu/presentation/foreground.rb +1 -0
- data/lib/vedeu/presentation/presentation.rb +43 -7
- data/lib/vedeu/presentation/translator.rb +12 -0
- data/lib/vedeu/repositories/repository.rb +8 -8
- data/lib/vedeu/support/bounding_area.rb +2 -0
- data/lib/vedeu/support/coercions.rb +2 -1
- data/lib/vedeu/support/common.rb +1 -0
- data/lib/vedeu/support/console.rb +17 -23
- data/lib/vedeu/support/content_geometry.rb +2 -0
- data/lib/vedeu/support/coordinate.rb +1 -0
- data/lib/vedeu/support/esc.rb +58 -29
- data/lib/vedeu/support/grid.rb +1 -0
- data/lib/vedeu/support/limit.rb +9 -0
- data/lib/vedeu/support/log.rb +31 -9
- data/lib/vedeu/support/node.rb +8 -18
- data/lib/vedeu/support/position.rb +13 -34
- data/lib/vedeu/support/position_validator.rb +3 -0
- data/lib/vedeu/support/read.rb +1 -0
- data/lib/vedeu/support/refresh.rb +3 -2
- data/lib/vedeu/support/terminal.rb +11 -5
- data/lib/vedeu/support/trace.rb +16 -1
- data/lib/vedeu/support/visible.rb +2 -0
- data/lib/vedeu/support/write.rb +1 -0
- data/lib/vedeu/traps.rb +1 -0
- data/lib/vedeu.rb +2 -0
- data/test/integration/distributed_test.rb +10 -8
- data/test/lib/vedeu/api_test.rb +3 -7
- data/test/lib/vedeu/application_test.rb +2 -5
- data/test/lib/vedeu/configuration/api_test.rb +12 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +2 -0
- data/test/lib/vedeu/distributed/client_test.rb +17 -7
- data/test/lib/vedeu/distributed/server_test.rb +56 -0
- data/test/lib/vedeu/distributed/test_application_test.rb +7 -3
- data/test/lib/vedeu/dsl/components/border_test.rb +10 -2
- data/test/lib/vedeu/dsl/interface_test.rb +6 -0
- data/test/lib/vedeu/dsl/line_test.rb +19 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -26
- data/test/lib/vedeu/dsl/shared/text_test.rb +8 -1
- data/test/lib/vedeu/dsl/stream_test.rb +13 -1
- data/test/lib/vedeu/input/input_test.rb +1 -1
- data/test/lib/vedeu/input/key_test.rb +3 -16
- data/test/lib/vedeu/launcher_test.rb +11 -1
- data/test/lib/vedeu/main_loop_test.rb +41 -0
- data/test/lib/vedeu/models/geometry_test.rb +15 -34
- data/test/lib/vedeu/models/view/char_test.rb +44 -45
- data/test/lib/vedeu/models/view/interface_test.rb +6 -0
- data/test/lib/vedeu/models/view/line_test.rb +1 -1
- data/test/lib/vedeu/models/view/stream_test.rb +1 -1
- data/test/lib/vedeu/output/border_test.rb +6 -5
- data/test/lib/vedeu/output/compositor_test.rb +2 -20
- data/test/lib/vedeu/output/html_char_test.rb +85 -0
- data/test/lib/vedeu/output/html_renderer_test.rb +37 -0
- data/test/lib/vedeu/output/position_index_test.rb +2 -10
- data/test/lib/vedeu/output/renderer_test.rb +24 -0
- data/test/lib/vedeu/output/virtual_buffer_test.rb +53 -0
- data/test/lib/vedeu/output/virtual_terminal_test.rb +32 -2
- data/test/lib/vedeu/presentation/background_test.rb +41 -1
- data/test/lib/vedeu/presentation/colour_test.rb +10 -6
- data/test/lib/vedeu/presentation/foreground_test.rb +46 -6
- data/test/lib/vedeu/presentation/presentation_test.rb +44 -1
- data/test/lib/vedeu/presentation/translator_test.rb +34 -0
- data/test/lib/vedeu/repositories/repository_test.rb +1 -1
- data/test/lib/vedeu/support/bounding_area_test.rb +4 -12
- data/test/lib/vedeu/support/console_test.rb +9 -50
- data/test/lib/vedeu/support/esc_test.rb +7 -7
- data/test/lib/vedeu/support/position_test.rb +42 -0
- data/test/lib/vedeu/support/terminal_test.rb +5 -20
- data/test/lib/vedeu/support/write_test.rb +42 -18
- data/test/support/helpers/all.rb +0 -1
- data/test/support/helpers/repository_test_module.rb +1 -0
- data/test/test_helper.rb +5 -2
- data/vedeu.gemspec +7 -5
- metadata +60 -14
- data/lib/vedeu/distributed/application.rb +0 -91
- data/test/lib/vedeu/distributed/application_test.rb +0 -24
- data/test/support/helpers/presentation.rb +0 -16
@@ -2,12 +2,15 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
|
+
class FakeRenderer; end
|
6
|
+
|
5
7
|
describe VirtualTerminal do
|
6
8
|
|
7
9
|
let(:described) { Vedeu::VirtualTerminal }
|
8
|
-
let(:instance) { described.new(height, width) }
|
10
|
+
let(:instance) { described.new(height, width, renderer) }
|
9
11
|
let(:height) { 5 }
|
10
12
|
let(:width) { 10 }
|
13
|
+
let(:renderer) { Vedeu::HTMLRenderer }
|
11
14
|
|
12
15
|
describe '#initialize' do
|
13
16
|
it { instance.must_be_instance_of(Vedeu::VirtualTerminal) }
|
@@ -15,8 +18,21 @@ module Vedeu
|
|
15
18
|
it { instance.instance_variable_get('@cell_width').must_equal(9) }
|
16
19
|
it { instance.instance_variable_get('@height').must_equal(5) }
|
17
20
|
it { instance.instance_variable_get('@width').must_equal(10) }
|
21
|
+
it { instance.instance_variable_get('@renderer').must_equal(Vedeu::HTMLRenderer) }
|
18
22
|
end
|
19
23
|
|
24
|
+
describe 'attr_accessor' do
|
25
|
+
context '#renderer' do
|
26
|
+
subject { instance.renderer }
|
27
|
+
|
28
|
+
it { subject.must_equal(Vedeu::HTMLRenderer) }
|
29
|
+
end
|
30
|
+
context '#renderer=' do
|
31
|
+
subject { instance.renderer=(Vedeu::FakeRenderer) }
|
32
|
+
|
33
|
+
it { subject.must_equal(Vedeu::FakeRenderer) }
|
34
|
+
end
|
35
|
+
end
|
20
36
|
describe 'attr_reader' do
|
21
37
|
context '#cell_height' do
|
22
38
|
subject { instance.cell_height }
|
@@ -81,8 +97,22 @@ module Vedeu
|
|
81
97
|
end
|
82
98
|
end
|
83
99
|
|
100
|
+
describe '#output' do
|
101
|
+
let(:data) {}
|
102
|
+
|
103
|
+
subject { instance.output(data) }
|
104
|
+
|
105
|
+
it { subject.must_be_instance_of(Array) }
|
106
|
+
end
|
107
|
+
|
108
|
+
describe '#reset' do
|
109
|
+
subject { instance.reset }
|
110
|
+
|
111
|
+
it { subject.must_be_instance_of(Array) }
|
112
|
+
end
|
113
|
+
|
84
114
|
describe '#write' do
|
85
|
-
let(:data) { Vedeu::Char.new('a') }
|
115
|
+
let(:data) { Vedeu::Char.new({ value: 'a' }) }
|
86
116
|
|
87
117
|
subject { instance.write(y, x, data) }
|
88
118
|
|
@@ -4,6 +4,10 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Background do
|
6
6
|
|
7
|
+
let(:described) { Vedeu::Background }
|
8
|
+
let(:instance) { described.new(colour) }
|
9
|
+
let(:colour) {}
|
10
|
+
|
7
11
|
describe '.escape_sequence' do
|
8
12
|
describe 'when the colour is empty' do
|
9
13
|
it 'returns an empty String' do
|
@@ -16,7 +20,7 @@ module Vedeu
|
|
16
20
|
red: "\e[41m",
|
17
21
|
yellow: "\e[43m",
|
18
22
|
magenta: "\e[45m",
|
19
|
-
white: "\e[
|
23
|
+
white: "\e[107m",
|
20
24
|
default: "\e[49m",
|
21
25
|
unknown: '',
|
22
26
|
}.map do |colour, result|
|
@@ -82,6 +86,42 @@ module Vedeu
|
|
82
86
|
end
|
83
87
|
end
|
84
88
|
|
89
|
+
describe '.to_html' do
|
90
|
+
subject { instance.to_html }
|
91
|
+
|
92
|
+
context 'when the colour is empty' do
|
93
|
+
let(:colour) {}
|
94
|
+
|
95
|
+
it 'returns an empty String' do
|
96
|
+
subject.must_equal('')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'when the colour is named (3-bit / 8 colours)' do
|
101
|
+
let(:colour) { :red }
|
102
|
+
|
103
|
+
it 'returns an empty String' do
|
104
|
+
subject.must_equal('')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'when the colour is numbered (8-bit / 256 colours)' do
|
109
|
+
let(:colour) { 118 }
|
110
|
+
|
111
|
+
it 'returns an empty String' do
|
112
|
+
subject.must_equal('')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when the colour is a CSS value' do
|
117
|
+
let(:colour) { '#afd700' }
|
118
|
+
|
119
|
+
it 'returns the colour as a CSS value' do
|
120
|
+
subject.must_equal('#afd700')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
85
125
|
end # Background
|
86
126
|
|
87
127
|
end # Vedeu
|
@@ -21,7 +21,7 @@ module Vedeu
|
|
21
21
|
describe '#background' do
|
22
22
|
subject { instance.background }
|
23
23
|
|
24
|
-
it { subject.must_be_instance_of(
|
24
|
+
it { subject.must_be_instance_of(Vedeu::Background) }
|
25
25
|
|
26
26
|
context 'with a background' do
|
27
27
|
let(:attributes) {
|
@@ -30,20 +30,22 @@ module Vedeu
|
|
30
30
|
}
|
31
31
|
}
|
32
32
|
|
33
|
-
it { subject.must_equal("\e[48;2;0;0;0m") }
|
33
|
+
it { subject.to_s.must_equal("\e[48;2;0;0;0m") }
|
34
|
+
it { subject.to_html.must_equal('#000000') }
|
34
35
|
end
|
35
36
|
|
36
37
|
context 'without a background' do
|
37
38
|
let(:attributes) { {} }
|
38
39
|
|
39
|
-
it { subject.must_equal('') }
|
40
|
+
it { subject.to_s.must_equal('') }
|
41
|
+
it { subject.to_html.must_equal('') }
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
45
|
describe '#foreground' do
|
44
46
|
subject { instance.foreground }
|
45
47
|
|
46
|
-
it { subject.must_be_instance_of(
|
48
|
+
it { subject.must_be_instance_of(Vedeu::Foreground) }
|
47
49
|
|
48
50
|
context 'with a foreground' do
|
49
51
|
let(:attributes) {
|
@@ -52,13 +54,15 @@ module Vedeu
|
|
52
54
|
}
|
53
55
|
}
|
54
56
|
|
55
|
-
it { subject.must_equal("\e[38;2;255;0;0m") }
|
57
|
+
it { subject.to_s.must_equal("\e[38;2;255;0;0m") }
|
58
|
+
it { subject.to_html.must_equal('#ff0000') }
|
56
59
|
end
|
57
60
|
|
58
61
|
context 'without a foreground' do
|
59
62
|
let(:attributes) { {} }
|
60
63
|
|
61
|
-
it { subject.must_equal('') }
|
64
|
+
it { subject.to_s.must_equal('') }
|
65
|
+
it { subject.to_html.must_equal('') }
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
@@ -4,19 +4,23 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Foreground do
|
6
6
|
|
7
|
+
let(:described) { Vedeu::Foreground }
|
8
|
+
let(:instance) { described.new(colour) }
|
9
|
+
let(:colour) {}
|
10
|
+
|
7
11
|
describe '.escape_sequence' do
|
8
|
-
|
12
|
+
context 'when the colour is empty' do
|
9
13
|
it 'returns an empty String' do
|
10
14
|
Foreground.escape_sequence('').must_equal('')
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
|
18
|
+
context 'when the colour is named (3-bit / 8 colours)' do
|
15
19
|
{
|
16
20
|
red: "\e[31m",
|
17
21
|
yellow: "\e[33m",
|
18
22
|
magenta: "\e[35m",
|
19
|
-
white: "\e[
|
23
|
+
white: "\e[97m",
|
20
24
|
default: "\e[39m",
|
21
25
|
unknown: '',
|
22
26
|
}.map do |colour, result|
|
@@ -26,7 +30,7 @@ module Vedeu
|
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
|
-
|
33
|
+
context 'when the colour is numbered (8-bit / 256 colours)' do
|
30
34
|
{
|
31
35
|
24 => "\e[38;5;24m",
|
32
36
|
56 => "\e[38;5;56m",
|
@@ -43,7 +47,7 @@ module Vedeu
|
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
|
-
|
50
|
+
context 'when the colour is a CSS value (8-bit / 256 colours)' do
|
47
51
|
before { Configuration.stubs(:colour_mode).returns(8) }
|
48
52
|
|
49
53
|
{
|
@@ -63,7 +67,7 @@ module Vedeu
|
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
66
|
-
|
70
|
+
context 'when the colour is a CSS value (24-bit / 16.8mil colours)' do
|
67
71
|
{
|
68
72
|
'#5f0000' => "\e[38;2;95;0;0m",
|
69
73
|
'#008700' => "\e[38;2;0;135;0m",
|
@@ -82,6 +86,42 @@ module Vedeu
|
|
82
86
|
end
|
83
87
|
end
|
84
88
|
|
89
|
+
describe '.to_html' do
|
90
|
+
subject { instance.to_html }
|
91
|
+
|
92
|
+
context 'when the colour is empty' do
|
93
|
+
let(:colour) {}
|
94
|
+
|
95
|
+
it 'returns an empty String' do
|
96
|
+
subject.must_equal('')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'when the colour is named (3-bit / 8 colours)' do
|
101
|
+
let(:colour) { :red }
|
102
|
+
|
103
|
+
it 'returns an empty String' do
|
104
|
+
subject.must_equal('')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'when the colour is numbered (8-bit / 256 colours)' do
|
109
|
+
let(:colour) { 118 }
|
110
|
+
|
111
|
+
it 'returns an empty String' do
|
112
|
+
subject.must_equal('')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when the colour is a CSS value' do
|
117
|
+
let(:colour) { '#afd700' }
|
118
|
+
|
119
|
+
it 'returns the colour as a CSS value' do
|
120
|
+
subject.must_equal('#afd700')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
85
125
|
end # Foreground
|
86
126
|
|
87
127
|
end # Vedeu
|
@@ -2,10 +2,47 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
|
5
|
+
class PresentationTestClass
|
6
|
+
include Presentation
|
7
|
+
|
8
|
+
def attributes
|
9
|
+
{
|
10
|
+
colour: { background: '#000033', foreground: '#aadd00' },
|
11
|
+
style: ['bold']
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end # PresentationTestClass
|
15
|
+
|
5
16
|
describe Presentation do
|
6
17
|
|
7
18
|
let(:receiver) { PresentationTestClass.new }
|
8
19
|
|
20
|
+
describe '#background' do
|
21
|
+
subject { receiver.background }
|
22
|
+
|
23
|
+
it { subject.must_be_instance_of(Vedeu::Background) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#foreground' do
|
27
|
+
subject { receiver.foreground }
|
28
|
+
|
29
|
+
it { subject.must_be_instance_of(Vedeu::Foreground) }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#parent_background' do
|
33
|
+
subject { receiver.parent_background }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#parent_foreground' do
|
37
|
+
subject { receiver.parent_foreground }
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#colour' do
|
41
|
+
subject { receiver.colour }
|
42
|
+
|
43
|
+
it { subject.must_be_instance_of(Vedeu::Colour) }
|
44
|
+
end
|
45
|
+
|
9
46
|
describe '#colour=' do
|
10
47
|
let(:colour) { Colour.new({ foreground: '#00ff00', background: '#000000' }) }
|
11
48
|
|
@@ -14,6 +51,12 @@ module Vedeu
|
|
14
51
|
it { subject.must_be_instance_of(Colour) }
|
15
52
|
end
|
16
53
|
|
54
|
+
describe '#style' do
|
55
|
+
subject { receiver.style }
|
56
|
+
|
57
|
+
it { subject.must_be_instance_of(Vedeu::Style) }
|
58
|
+
end
|
59
|
+
|
17
60
|
describe '#style=' do
|
18
61
|
let(:style) { Style.new('normal') }
|
19
62
|
|
@@ -26,7 +69,7 @@ module Vedeu
|
|
26
69
|
let(:line) {
|
27
70
|
Vedeu::Line.new({
|
28
71
|
streams: [],
|
29
|
-
parent:
|
72
|
+
parent: Vedeu::Interface.new,
|
30
73
|
colour: Colour.new({ foreground: '#00ff00', background: '#000000' }),
|
31
74
|
style: Style.new('normal')
|
32
75
|
})
|
@@ -56,6 +56,40 @@ module Vedeu
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
describe '#to_html' do
|
60
|
+
subject { instance.to_html }
|
61
|
+
|
62
|
+
context 'when no colour is given' do
|
63
|
+
let(:colour) {}
|
64
|
+
|
65
|
+
it { subject.must_equal('') }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when the colour is a terminal named colour; e.g. :red' do
|
69
|
+
let(:colour) { :red }
|
70
|
+
|
71
|
+
it { subject.must_equal('') }
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when the colour is a terminal numbered colour; e.g. 122' do
|
75
|
+
let(:colour) { 122 }
|
76
|
+
|
77
|
+
it { subject.must_equal('') }
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when the colour is a HTML/CSS colour (RGB specified)' do
|
81
|
+
let(:colour) { '#ff0000' }
|
82
|
+
|
83
|
+
it { subject.must_equal('#ff0000') }
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when the colour is not supported' do
|
87
|
+
let(:colour) { [:not_supported] }
|
88
|
+
|
89
|
+
it { subject.must_equal('') }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
59
93
|
end # Translator
|
60
94
|
|
61
95
|
end # Vedeu
|
@@ -47,9 +47,7 @@ module Vedeu
|
|
47
47
|
it { described.top.must_equal(1) }
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
it { described.y.must_equal(1) }
|
52
|
-
end
|
50
|
+
it { described.must_respond_to(:y) }
|
53
51
|
end
|
54
52
|
|
55
53
|
describe '#bottom' do
|
@@ -71,9 +69,7 @@ module Vedeu
|
|
71
69
|
it { described.bottom.must_equal(15) }
|
72
70
|
end
|
73
71
|
|
74
|
-
|
75
|
-
it { described.yn.must_equal(15) }
|
76
|
-
end
|
72
|
+
it { described.must_respond_to(:yn) }
|
77
73
|
end
|
78
74
|
|
79
75
|
describe '#left' do
|
@@ -97,9 +93,7 @@ module Vedeu
|
|
97
93
|
it { described.left.must_equal(1) }
|
98
94
|
end
|
99
95
|
|
100
|
-
|
101
|
-
it { described.x.must_equal(1) }
|
102
|
-
end
|
96
|
+
it { described.must_respond_to(:x) }
|
103
97
|
end
|
104
98
|
|
105
99
|
describe '#right' do
|
@@ -121,9 +115,7 @@ module Vedeu
|
|
121
115
|
it { described.right.must_equal(40) }
|
122
116
|
end
|
123
117
|
|
124
|
-
|
125
|
-
it { described.xn.must_equal(40) }
|
126
|
-
end
|
118
|
+
it { described.must_respond_to(:xn) }
|
127
119
|
end
|
128
120
|
|
129
121
|
end # BoundingArea
|
@@ -77,17 +77,8 @@ module Vedeu
|
|
77
77
|
|
78
78
|
it { subject.must_be_instance_of(Fixnum) }
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
it { subject.must_be_instance_of(Fixnum) }
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'alias method #yn' do
|
87
|
-
subject { instance.yn }
|
88
|
-
|
89
|
-
it { subject.must_be_instance_of(Fixnum) }
|
90
|
-
end
|
80
|
+
it { instance.must_respond_to(:tyn) }
|
81
|
+
it { instance.must_respond_to(:yn) }
|
91
82
|
end
|
92
83
|
|
93
84
|
describe '#origin' do
|
@@ -96,29 +87,10 @@ module Vedeu
|
|
96
87
|
it { subject.must_be_instance_of(Fixnum) }
|
97
88
|
it { subject.must_equal(1) }
|
98
89
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'alias method #y' do
|
106
|
-
subject { instance.y }
|
107
|
-
|
108
|
-
it { subject.must_be_instance_of(Fixnum) }
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'alias method #tx' do
|
112
|
-
subject { instance.tx }
|
113
|
-
|
114
|
-
it { subject.must_be_instance_of(Fixnum) }
|
115
|
-
end
|
116
|
-
|
117
|
-
context 'alias method #ty' do
|
118
|
-
subject { instance.ty }
|
119
|
-
|
120
|
-
it { subject.must_be_instance_of(Fixnum) }
|
121
|
-
end
|
90
|
+
it { instance.must_respond_to(:x) }
|
91
|
+
it { instance.must_respond_to(:y) }
|
92
|
+
it { instance.must_respond_to(:tx) }
|
93
|
+
it { instance.must_respond_to(:ty) }
|
122
94
|
end
|
123
95
|
|
124
96
|
describe '#raw' do
|
@@ -135,11 +107,7 @@ module Vedeu
|
|
135
107
|
it { subject.must_be_instance_of(Array) }
|
136
108
|
it { subject.must_equal([24, 32]) }
|
137
109
|
|
138
|
-
|
139
|
-
subject { instance.winsize }
|
140
|
-
|
141
|
-
it { subject.must_be_instance_of(Array) }
|
142
|
-
end
|
110
|
+
it { instance.must_respond_to(:winsize) }
|
143
111
|
end
|
144
112
|
|
145
113
|
describe '#width' do
|
@@ -147,17 +115,8 @@ module Vedeu
|
|
147
115
|
|
148
116
|
it { subject.must_be_instance_of(Fixnum) }
|
149
117
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
it { subject.must_be_instance_of(Fixnum) }
|
154
|
-
end
|
155
|
-
|
156
|
-
context 'alias method #xn' do
|
157
|
-
subject { instance.xn }
|
158
|
-
|
159
|
-
it { subject.must_be_instance_of(Fixnum) }
|
160
|
-
end
|
118
|
+
it { instance.must_respond_to(:txn) }
|
119
|
+
it { instance.must_respond_to(:xn) }
|
161
120
|
end
|
162
121
|
|
163
122
|
end # Console
|
@@ -52,7 +52,7 @@ module Vedeu
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'returns an escape sequence when the style is bg_reset' do
|
55
|
-
Esc.string('bg_reset').must_equal("\e[
|
55
|
+
Esc.string('bg_reset').must_equal("\e[49m")
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'returns an escape sequence when the style is blink' do
|
@@ -72,19 +72,19 @@ module Vedeu
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'returns an escape sequence when the style is clear' do
|
75
|
-
Esc.string('clear').must_equal("\e[
|
75
|
+
Esc.string('clear').must_equal("\e[39m\e[49m\e[2J")
|
76
76
|
end
|
77
77
|
|
78
78
|
it 'returns an escape sequence when the style is clear_line' do
|
79
|
-
Esc.string('clear_line').must_equal("\e[
|
79
|
+
Esc.string('clear_line').must_equal("\e[39m\e[49m\e[2K")
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'returns an escape sequence when the style is colour_reset' do
|
83
|
-
Esc.string('colour_reset').must_equal("\e[
|
83
|
+
Esc.string('colour_reset').must_equal("\e[39m\e[49m")
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'returns an escape sequence when the style is fg_reset' do
|
87
|
-
Esc.string('fg_reset').must_equal("\e[
|
87
|
+
Esc.string('fg_reset').must_equal("\e[39m")
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'returns an escape sequence when the style is hide_cursor' do
|
@@ -92,11 +92,11 @@ module Vedeu
|
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'returns an escape sequence when the style is screen_init' do
|
95
|
-
Esc.string('screen_init').must_equal("\e[0m\e[
|
95
|
+
Esc.string('screen_init').must_equal("\e[0m\e[39m\e[49m\e[2J\e[?25l")
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'returns an escape sequence when the style is screen_exit' do
|
99
|
-
Esc.string('screen_exit').must_equal("\e[?25h\e[
|
99
|
+
Esc.string('screen_exit').must_equal("\e[?25h\e[39m\e[49m\e[0m")
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'returns an escape sequence when the style is negative' do
|
@@ -15,12 +15,54 @@ module Vedeu
|
|
15
15
|
it { instance.instance_variable_get('@x').must_equal(x) }
|
16
16
|
end
|
17
17
|
|
18
|
+
describe '.coerce' do
|
19
|
+
let(:value) {}
|
20
|
+
|
21
|
+
subject { described.coerce(value) }
|
22
|
+
|
23
|
+
context 'when the value is already a Position' do
|
24
|
+
let(:value) { instance }
|
25
|
+
|
26
|
+
it { subject.must_equal(instance) }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when the value is an Array' do
|
30
|
+
let(:value) { [2, 8] }
|
31
|
+
|
32
|
+
it { subject.must_be_instance_of(described) }
|
33
|
+
it { subject.y.must_equal(2) }
|
34
|
+
it { subject.x.must_equal(8) }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when the value is something unhandled' do
|
38
|
+
it { subject.must_be_instance_of(NilClass) }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
18
42
|
describe '#inspect' do
|
19
43
|
subject { instance.inspect }
|
20
44
|
|
21
45
|
it { subject.must_equal("<Vedeu::Position (y:12 x:19)>") }
|
22
46
|
end
|
23
47
|
|
48
|
+
describe '#==' do
|
49
|
+
let(:other) {}
|
50
|
+
|
51
|
+
subject { instance == other }
|
52
|
+
|
53
|
+
context 'when they are equal' do
|
54
|
+
let(:other) { described.new(12, 19) }
|
55
|
+
|
56
|
+
it { subject.must_equal(true) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when they are not equal' do
|
60
|
+
let(:other) { described.new(2, 9) }
|
61
|
+
|
62
|
+
it { subject.must_equal(false) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
24
66
|
describe '#to_s' do
|
25
67
|
# subject { described.new.to_s }
|
26
68
|
|
@@ -98,7 +98,7 @@ module Vedeu
|
|
98
98
|
subject { Terminal.clear }
|
99
99
|
|
100
100
|
it 'clears the screen' do
|
101
|
-
subject.must_equal(["\e[
|
101
|
+
subject.must_equal(["\e[39m\e[49m\e[2J"])
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
@@ -193,15 +193,8 @@ module Vedeu
|
|
193
193
|
Terminal.origin.must_equal(1)
|
194
194
|
end
|
195
195
|
|
196
|
-
|
197
|
-
|
198
|
-
Terminal.x.must_equal(1)
|
199
|
-
end
|
200
|
-
|
201
|
-
it 'returns 1' do
|
202
|
-
Terminal.y.must_equal(1)
|
203
|
-
end
|
204
|
-
end
|
196
|
+
it { Terminal.must_respond_to(:x) }
|
197
|
+
it { Terminal.must_respond_to(:y) }
|
205
198
|
end
|
206
199
|
|
207
200
|
describe '.width' do
|
@@ -218,11 +211,7 @@ module Vedeu
|
|
218
211
|
end
|
219
212
|
end
|
220
213
|
|
221
|
-
|
222
|
-
it 'returns the xn coordinate of the terminal' do
|
223
|
-
Terminal.xn.must_equal(80)
|
224
|
-
end
|
225
|
-
end
|
214
|
+
it { Terminal.must_respond_to(:xn) }
|
226
215
|
end
|
227
216
|
|
228
217
|
describe '.height' do
|
@@ -239,11 +228,7 @@ module Vedeu
|
|
239
228
|
end
|
240
229
|
end
|
241
230
|
|
242
|
-
|
243
|
-
it 'returns the yn coordinate of the terminal' do
|
244
|
-
Terminal.yn.must_equal(25)
|
245
|
-
end
|
246
|
-
end
|
231
|
+
it { Terminal.must_respond_to(:yn) }
|
247
232
|
end
|
248
233
|
|
249
234
|
describe '.size' do
|