vedeu 0.4.22 → 0.4.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +5 -5
  3. data/examples/geometry_app.rb +2 -2
  4. data/lib/vedeu/bindings.rb +2 -15
  5. data/lib/vedeu/buffers/buffer.rb +2 -6
  6. data/lib/vedeu/configuration/cli.rb +4 -4
  7. data/lib/vedeu/dsl/components/border.rb +24 -8
  8. data/lib/vedeu/dsl/components/geometry.rb +10 -0
  9. data/lib/vedeu/events/event.rb +1 -2
  10. data/lib/vedeu/geometry/area.rb +4 -1
  11. data/lib/vedeu/geometry/geometry.rb +51 -18
  12. data/lib/vedeu/geometry/grid.rb +4 -28
  13. data/lib/vedeu/launcher.rb +6 -2
  14. data/lib/vedeu/models/line.rb +1 -1
  15. data/lib/vedeu/output/clear.rb +8 -8
  16. data/lib/vedeu/output/compressor.rb +1 -0
  17. data/lib/vedeu/output/esc.rb +29 -101
  18. data/lib/vedeu/output/html_char.rb +9 -9
  19. data/lib/vedeu/output/refresh.rb +17 -5
  20. data/lib/vedeu/output/renderers/all.rb +1 -9
  21. data/lib/vedeu/output/translator.rb +1 -1
  22. data/lib/vedeu/output/viewport.rb +1 -1
  23. data/lib/vedeu/repositories/repositories/colours.rb +6 -3
  24. data/lib/vedeu/support/all.rb +1 -0
  25. data/lib/vedeu/support/template.rb +2 -1
  26. data/lib/vedeu/support/terminal.rb +2 -0
  27. data/lib/vedeu/support/timer.rb +44 -0
  28. data/test/lib/vedeu/buffers/buffer_test.rb +1 -7
  29. data/test/lib/vedeu/configuration/cli_test.rb +28 -0
  30. data/test/lib/vedeu/dsl/components/geometry_test.rb +12 -0
  31. data/test/lib/vedeu/geometry/geometry_test.rb +8 -0
  32. data/test/lib/vedeu/geometry/grid_test.rb +0 -20
  33. data/test/lib/vedeu/geometry/position_test.rb +6 -0
  34. data/test/lib/vedeu/null/border_test.rb +6 -0
  35. data/test/lib/vedeu/output/clear_test.rb +12 -6
  36. data/test/lib/vedeu/output/compressor_test.rb +29 -0
  37. data/test/lib/vedeu/output/esc_test.rb +26 -26
  38. data/test/lib/vedeu/output/presentation_test.rb +22 -0
  39. data/test/lib/vedeu/output/translator_test.rb +18 -16
  40. data/test/lib/vedeu/output/viewport_test.rb +163 -97
  41. data/test/lib/vedeu/output/virtual_terminal_test.rb +6 -0
  42. data/test/lib/vedeu/repositories/repositories/colours_test.rb +29 -4
  43. data/test/lib/vedeu/repositories/repository_test.rb +6 -0
  44. data/vedeu.gemspec +4 -4
  45. metadata +3 -44
@@ -68,13 +68,7 @@ module Vedeu
68
68
  describe '#clear' do
69
69
  subject { instance.clear }
70
70
 
71
- context 'when the clear buffer is empty' do
72
- it { subject.must_be_instance_of(NilClass) }
73
- end
74
-
75
- context 'when the clear buffer is not empty' do
76
- # it { subject.must_be_instance_of(Array) }
77
- end
71
+ it { subject.must_be_instance_of(Array) }
78
72
  end
79
73
 
80
74
  describe '#hide' do
@@ -55,6 +55,34 @@ module Vedeu
55
55
  end
56
56
  end
57
57
 
58
+ # describe '#drb_height' do
59
+ # it '--drb-height' do
60
+ # Configuration.configure(['--drb-height'])
61
+ # Configuration.drb_height.must_equal(true)
62
+ # end
63
+ # end
64
+
65
+ # describe '#drb_host' do
66
+ # it '--drb-host' do
67
+ # Configuration.configure(['--drb-host'])
68
+ # Configuration.drb_host.must_equal(true)
69
+ # end
70
+ # end
71
+
72
+ # describe '#drb_port' do
73
+ # it '--drb-port' do
74
+ # Configuration.configure(['--drb-port'])
75
+ # Configuration.drb_port.must_equal(true)
76
+ # end
77
+ # end
78
+
79
+ # describe '#drb_width' do
80
+ # it '--drb-width' do
81
+ # Configuration.configure(['--drb-width'])
82
+ # Configuration.drb_width.must_equal(true)
83
+ # end
84
+ # end
85
+
58
86
  describe '#interactive?' do
59
87
  it '--interactive' do
60
88
  Configuration.configure(['--interactive'])
@@ -53,6 +53,12 @@ module Vedeu
53
53
  end
54
54
  end
55
55
 
56
+ describe '#columns' do
57
+ subject { instance.columns(3) }
58
+
59
+ it { subject.must_equal(18) }
60
+ end
61
+
56
62
  describe '#height' do
57
63
  subject { instance.height(6) }
58
64
 
@@ -75,6 +81,12 @@ module Vedeu
75
81
  end
76
82
  end
77
83
 
84
+ describe '#rows' do
85
+ subject { instance.rows(3) }
86
+
87
+ it { subject.must_equal(6) }
88
+ end
89
+
78
90
  describe '#width' do
79
91
  subject { instance.width(25) }
80
92
 
@@ -51,6 +51,14 @@ module Vedeu
51
51
  end
52
52
  end
53
53
 
54
+ describe '#inspect' do
55
+ subject { instance.inspect }
56
+
57
+ it { subject.must_be_instance_of(String) }
58
+
59
+ it { subject.must_equal('<Vedeu::Geometry x:1 xn:40 y:1 yn:12 maximise:false>') }
60
+ end
61
+
54
62
  describe '#maximise' do
55
63
  let(:attributes) {
56
64
  {
@@ -1,25 +1,5 @@
1
1
  require 'test_helper'
2
2
 
3
- describe Fixnum do
4
-
5
- describe '#columns' do
6
- it 'returns the width if the value is in range' do
7
- IO.console.stub :winsize, [25, 60] do
8
- 1.columns.must_equal(5)
9
- end
10
- end
11
- end
12
-
13
- describe '#rows' do
14
- it 'returns the height if the value is in range' do
15
- IO.console.stub :winsize, [25, 60] do
16
- 1.rows.must_equal(2)
17
- end
18
- end
19
- end
20
-
21
- end # Fixnum
22
-
23
3
  module Vedeu
24
4
 
25
5
  describe Grid do
@@ -72,6 +72,12 @@ module Vedeu
72
72
  end
73
73
  end
74
74
 
75
+ describe '#to_a' do
76
+ subject { Position.new.to_a }
77
+
78
+ it { subject.must_equal([1, 1]) }
79
+ end
80
+
75
81
  describe '#to_s' do
76
82
  # subject { described.new.to_s }
77
83
 
@@ -48,6 +48,12 @@ module Vedeu
48
48
  it { subject.must_equal(12) }
49
49
  end
50
50
 
51
+ describe '#enabled?' do
52
+ subject { instance.enabled? }
53
+
54
+ it { subject.must_be_instance_of(FalseClass) }
55
+ end
56
+
51
57
  describe '#height' do
52
58
  subject { instance.height }
53
59
 
@@ -36,12 +36,7 @@ module Vedeu
36
36
  subject { described.clear(interface, options) }
37
37
 
38
38
  context 'when the interface is visible' do
39
- context 'when DRb is enabled' do
40
- let(:drb) { true }
41
- end
42
-
43
- context 'when DRb is not enabled' do
44
- end
39
+ # it { subject.must_be_instance_of(Array) }
45
40
  end
46
41
 
47
42
  context 'when the interface is not visible' do
@@ -60,6 +55,7 @@ module Vedeu
60
55
  it { subject.flatten.size.must_equal(9) }
61
56
 
62
57
  context 'when the interface is visible' do
58
+ # it { subject.must_be_instance_of(Array) }
63
59
  end
64
60
 
65
61
  context 'when the interface is not visible' do
@@ -71,6 +67,16 @@ module Vedeu
71
67
 
72
68
  describe '#write' do
73
69
  subject { instance.write }
70
+
71
+ context 'when the interface is visible' do
72
+ # it { subject.must_be_instance_of(Array) }
73
+ end
74
+
75
+ context 'when the interface is not visible' do
76
+ let(:visible) { false }
77
+
78
+ it { subject.must_be_instance_of(NilClass) }
79
+ end
74
80
  end
75
81
 
76
82
  end # Clear
@@ -20,8 +20,37 @@ module Vedeu
20
20
 
21
21
  it { subject.must_be_instance_of(String) }
22
22
 
23
+ context 'when the output is not a collection' do
24
+ let(:output) { 'abcd' }
25
+
26
+ it { subject.must_equal('abcd') }
27
+ end
28
+
23
29
  context 'when the output is all Vedeu::Char elements' do
30
+ let(:output) {
31
+ [
32
+ Vedeu::Char.new(value: 'Y', colour: { foreground: '#ff0000' }),
33
+ Vedeu::Char.new(value: 'e', colour: { foreground: '#ff0000' }),
34
+ Vedeu::Char.new(value: 's', colour: { foreground: '#ff0000' }),
35
+ ]
36
+ }
37
+ it 'converts the non-Vedeu::Char elements into String elements' do
38
+ subject.must_equal("\e[38;2;255;0;0mYes")
39
+ end
40
+ end
24
41
 
42
+ context 'when the output is all Vedeu::Char elements' do
43
+ let(:output) {
44
+ [
45
+ Vedeu::Char.new(value: 'a', colour: { foreground: '#ff0000' }),
46
+ Vedeu::Char.new(value: 'b', colour: { foreground: '#ff0000' }),
47
+ Vedeu::Char.new(value: 'c', colour: { foreground: '#0000ff' }),
48
+ Vedeu::Char.new(value: 'd', colour: { foreground: '#0000ff' }),
49
+ ]
50
+ }
51
+ it 'compresses multiple colours and styles where possible' do
52
+ subject.must_equal("\e[38;2;255;0;0mab\e[38;2;0;0;255mcd")
53
+ end
25
54
  end
26
55
 
27
56
  context 'when the output is not all Vedeu::Char elements' do
@@ -12,23 +12,23 @@ module Vedeu
12
12
 
13
13
  describe 'colours defined via define_method' do
14
14
  it 'returns an escape sequence for the foreground colour' do
15
- Esc.magenta.must_equal("\e[35m")
15
+ described.magenta.must_equal("\e[35m")
16
16
  end
17
17
 
18
18
  it 'returns an escape sequence for the foreground colour and resets ' \
19
19
  'after calling the block' do
20
- Esc.cyan do
20
+ described.cyan do
21
21
  'ununpentium'
22
22
  end.must_equal("\e[36mununpentium\e[39m")
23
23
  end
24
24
 
25
25
  it 'returns an escape sequence for the background colour' do
26
- Esc.on_yellow.must_equal("\e[43m")
26
+ described.on_yellow.must_equal("\e[43m")
27
27
  end
28
28
 
29
29
  it 'returns an escape sequence for the background colour and resets ' \
30
30
  'after calling the block' do
31
- Esc.on_red do
31
+ described.on_red do
32
32
  'livermorium'
33
33
  end.must_equal("\e[41mlivermorium\e[49m")
34
34
  end
@@ -37,7 +37,7 @@ module Vedeu
37
37
  describe '.escape' do
38
38
  let(:stream) { "\e[0m\e[38;2;39m\e[48;2;49m\e[2J\e[?25l" }
39
39
 
40
- subject { Esc.escape(stream) }
40
+ subject { described.escape(stream) }
41
41
 
42
42
  it { subject.must_be_instance_of(String) }
43
43
 
@@ -68,87 +68,87 @@ module Vedeu
68
68
 
69
69
  describe '.string' do
70
70
  it 'returns an empty string when the style is not provided' do
71
- Esc.string.must_equal('')
71
+ described.string.must_equal('')
72
72
  end
73
73
 
74
74
  it 'returns an escape sequence when the style is bg_reset' do
75
- Esc.string('bg_reset').must_equal("\e[49m")
75
+ described.string('bg_reset').must_equal("\e[49m")
76
76
  end
77
77
 
78
78
  it 'returns an escape sequence when the style is blink' do
79
- Esc.string('blink').must_equal("\e[5m")
79
+ described.string('blink').must_equal("\e[5m")
80
80
  end
81
81
 
82
82
  it 'returns an escape sequence when the style is blink off' do
83
- Esc.string('blink_off').must_equal("\e[25m")
83
+ described.string('blink_off').must_equal("\e[25m")
84
84
  end
85
85
 
86
86
  it 'returns an escape sequence when the style is bold' do
87
- Esc.string('bold').must_equal("\e[1m")
87
+ described.string('bold').must_equal("\e[1m")
88
88
  end
89
89
 
90
90
  it 'returns an escape sequence when the style is bold off' do
91
- Esc.string('bold_off').must_equal("\e[22m")
91
+ described.string('bold_off').must_equal("\e[22m")
92
92
  end
93
93
 
94
94
  it 'returns an escape sequence when the style is clear' do
95
- Esc.string('clear').must_equal("\e[39m\e[49m\e[2J")
95
+ described.string('clear').must_equal("\e[39m\e[49m\e[2J")
96
96
  end
97
97
 
98
98
  it 'returns an escape sequence when the style is clear_line' do
99
- Esc.string('clear_line').must_equal("\e[39m\e[49m\e[2K")
99
+ described.string('clear_line').must_equal("\e[39m\e[49m\e[2K")
100
100
  end
101
101
 
102
102
  it 'returns an escape sequence when the style is colour_reset' do
103
- Esc.string('colour_reset').must_equal("\e[39m\e[49m")
103
+ described.string('colour_reset').must_equal("\e[39m\e[49m")
104
104
  end
105
105
 
106
106
  it 'returns an escape sequence when the style is fg_reset' do
107
- Esc.string('fg_reset').must_equal("\e[39m")
107
+ described.string('fg_reset').must_equal("\e[39m")
108
108
  end
109
109
 
110
110
  it 'returns an escape sequence when the style is hide_cursor' do
111
- Esc.string('hide_cursor').must_equal("\e[?25l")
111
+ described.string('hide_cursor').must_equal("\e[?25l")
112
112
  end
113
113
 
114
114
  it 'returns an escape sequence when the style is screen_init' do
115
- Esc.string('screen_init').must_equal("\e[0m\e[39m\e[49m\e[2J\e[?25l")
115
+ described.string('screen_init').must_equal("\e[0m\e[39m\e[49m\e[2J\e[?25l")
116
116
  end
117
117
 
118
118
  it 'returns an escape sequence when the style is screen_exit' do
119
- Esc.string('screen_exit').must_equal("\e[?25h\e[39m\e[49m\e[0m")
119
+ described.string('screen_exit').must_equal("\e[?25h\e[39m\e[49m\e[0m")
120
120
  end
121
121
 
122
122
  it 'returns an escape sequence when the style is negative' do
123
- Esc.string('negative').must_equal("\e[7m")
123
+ described.string('negative').must_equal("\e[7m")
124
124
  end
125
125
 
126
126
  it 'returns an escape sequence when the style is positive' do
127
- Esc.string('positive').must_equal("\e[27m")
127
+ described.string('positive').must_equal("\e[27m")
128
128
  end
129
129
 
130
130
  it 'returns an escape sequence when the style is reset' do
131
- Esc.string('reset').must_equal("\e[0m")
131
+ described.string('reset').must_equal("\e[0m")
132
132
  end
133
133
 
134
134
  it 'returns an escape sequence when the style is normal' do
135
- Esc.string('normal').must_equal("\e[24m\e[22m\e[27m")
135
+ described.string('normal').must_equal("\e[24m\e[22m\e[27m")
136
136
  end
137
137
 
138
138
  it 'returns an escape sequence when the style is dim' do
139
- Esc.string('dim').must_equal("\e[2m")
139
+ described.string('dim').must_equal("\e[2m")
140
140
  end
141
141
 
142
142
  it 'returns an escape sequence when the style is show_cursor' do
143
- Esc.string('show_cursor').must_equal("\e[?25h")
143
+ described.string('show_cursor').must_equal("\e[?25h")
144
144
  end
145
145
 
146
146
  it 'returns an escape sequence when the style is underline' do
147
- Esc.string('underline').must_equal("\e[4m")
147
+ described.string('underline').must_equal("\e[4m")
148
148
  end
149
149
 
150
150
  it 'returns an escape sequence when the style is underline off' do
151
- Esc.string('underline_off').must_equal("\e[24m")
151
+ described.string('underline_off').must_equal("\e[24m")
152
152
  end
153
153
  end
154
154
 
@@ -59,6 +59,17 @@ module Vedeu
59
59
  end
60
60
  end
61
61
 
62
+ describe '#background=' do
63
+ subject { receiver.background = '#987654' }
64
+
65
+ it { subject.must_equal('#987654') }
66
+
67
+ it do
68
+ subject
69
+ receiver.attributes[:background].must_equal('#987654')
70
+ end
71
+ end
72
+
62
73
  describe '#foreground' do
63
74
  subject { receiver.foreground }
64
75
 
@@ -74,6 +85,17 @@ module Vedeu
74
85
  end
75
86
  end
76
87
 
88
+ describe '#foreground=' do
89
+ subject { receiver.foreground = '#123456' }
90
+
91
+ it { subject.must_equal('#123456') }
92
+
93
+ it do
94
+ subject
95
+ receiver.attributes[:foreground].must_equal('#123456')
96
+ end
97
+ end
98
+
77
99
  describe '#parent_background' do
78
100
  subject { receiver.parent_background }
79
101
 
@@ -24,27 +24,29 @@ module Vedeu
24
24
  describe '.coerce' do
25
25
  let(:_value) {}
26
26
 
27
- subject { described.coerce(value) }
27
+ subject { described.coerce(_value) }
28
28
 
29
- # context 'when the value is nil' do
30
- # it { subject.must_equal(nil) }
31
- # end
29
+ context 'when the value is nil' do
30
+ it { subject.must_be_instance_of(String) }
31
+ end
32
+
33
+ context 'when the value is a Vedeu::Background' do
34
+ let(:_value) { Vedeu::Background.new }
35
+
36
+ it { subject.must_equal(_value) }
37
+ end
32
38
 
33
- # context 'when the value is a Vedeu::Colour' do
34
- # it { subject.must_be_instance_of(Vedeu::Colour) }
35
- # end
39
+ context 'when the value is a Vedeu::Foreground' do
40
+ let(:_value) { Vedeu::Foreground.new }
36
41
 
37
- # context 'when the value is a Vedeu::Background' do
38
- # it { subject.must_be_instance_of(Vedeu::Background) }
39
- # end
42
+ it { subject.must_equal(_value) }
43
+ end
40
44
 
41
- # context 'when the value is a Vedeu::Foreground' do
42
- # it { subject.must_be_instance_of(Vedeu::Foreground) }
43
- # end
45
+ context 'when the value is not a polymorphic Colour' do
46
+ let(:_value) { '#aadd00' }
44
47
 
45
- # context 'when the value is not a polymorphic Colour' do
46
- # it { subject.must_be_instance_of(Vedeu::Colour) }
47
- # end
48
+ it { subject.must_be_instance_of(Vedeu::Translator) }
49
+ end
48
50
  end
49
51
 
50
52
  describe '#eql?' do