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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +6 -0
  4. data/bin/vedeu_drb_client +8 -3
  5. data/bin/vedeu_drb_server +113 -0
  6. data/bin/vedeu_test +1 -1
  7. data/docs/events.md +0 -127
  8. data/examples/borders_app.rb +17 -7
  9. data/examples/configuration_app.rb +1 -1
  10. data/examples/cursor_app.rb +4 -2
  11. data/examples/drb_app.rb +113 -0
  12. data/examples/focus_app.rb +1 -1
  13. data/examples/geometry_app.rb +1 -1
  14. data/examples/hello_world.rb +1 -1
  15. data/examples/lines_app.rb +1 -1
  16. data/features/start_stop.feature +1 -1
  17. data/inch.yml +5 -0
  18. data/lib/vedeu/all.rb +2 -0
  19. data/lib/vedeu/api.rb +1 -0
  20. data/lib/vedeu/application.rb +17 -36
  21. data/lib/vedeu/bindings.rb +134 -27
  22. data/lib/vedeu/buffers/display_buffer.rb +1 -4
  23. data/lib/vedeu/configuration/api.rb +15 -14
  24. data/lib/vedeu/configuration/cli.rb +17 -16
  25. data/lib/vedeu/configuration/configuration.rb +3 -1
  26. data/lib/vedeu/cursor/cursor.rb +6 -8
  27. data/lib/vedeu/cursor/move_cursor.rb +1 -0
  28. data/lib/vedeu/cursor/toggle_cursor.rb +1 -0
  29. data/lib/vedeu/debug.rb +23 -0
  30. data/lib/vedeu/distributed/all.rb +1 -1
  31. data/lib/vedeu/distributed/client.rb +55 -13
  32. data/lib/vedeu/distributed/server.rb +207 -0
  33. data/lib/vedeu/distributed/subprocess.rb +22 -21
  34. data/lib/vedeu/distributed/templates/default_application.vedeu +3 -1
  35. data/lib/vedeu/distributed/test_application.rb +2 -1
  36. data/lib/vedeu/distributed/uri.rb +1 -0
  37. data/lib/vedeu/dsl/all.rb +4 -2
  38. data/lib/vedeu/dsl/components/border.rb +11 -10
  39. data/lib/vedeu/dsl/components/geometry.rb +1 -0
  40. data/lib/vedeu/dsl/components/keymap.rb +1 -0
  41. data/lib/vedeu/dsl/components/menu.rb +1 -0
  42. data/lib/vedeu/dsl/interface.rb +1 -0
  43. data/lib/vedeu/dsl/line.rb +3 -1
  44. data/lib/vedeu/dsl/shared/colour.rb +1 -0
  45. data/lib/vedeu/dsl/shared/style.rb +1 -0
  46. data/lib/vedeu/dsl/shared/text.rb +2 -0
  47. data/lib/vedeu/dsl/shared/use.rb +3 -0
  48. data/lib/vedeu/dsl/stream.rb +3 -1
  49. data/lib/vedeu/dsl/view.rb +1 -0
  50. data/lib/vedeu/events/event.rb +9 -6
  51. data/lib/vedeu/events/trigger.rb +18 -7
  52. data/lib/vedeu/exceptions.rb +4 -1
  53. data/lib/vedeu/input/input.rb +1 -0
  54. data/lib/vedeu/input/key.rb +0 -1
  55. data/lib/vedeu/input/keymap.rb +5 -3
  56. data/lib/vedeu/input/keys.rb +1 -0
  57. data/lib/vedeu/input/mapper.rb +1 -0
  58. data/lib/vedeu/launcher.rb +35 -12
  59. data/lib/vedeu/main_loop.rb +53 -0
  60. data/lib/vedeu/models/collection.rb +11 -3
  61. data/lib/vedeu/models/focus.rb +3 -3
  62. data/lib/vedeu/models/geometry.rb +8 -16
  63. data/lib/vedeu/models/group.rb +1 -0
  64. data/lib/vedeu/models/menu.rb +2 -1
  65. data/lib/vedeu/models/model.rb +7 -1
  66. data/lib/vedeu/models/view/char.rb +52 -44
  67. data/lib/vedeu/models/view/chars.rb +1 -0
  68. data/lib/vedeu/models/view/composition.rb +2 -1
  69. data/lib/vedeu/models/view/interface.rb +5 -3
  70. data/lib/vedeu/models/view/interfaces.rb +1 -0
  71. data/lib/vedeu/models/view/line.rb +2 -1
  72. data/lib/vedeu/models/view/stream.rb +2 -1
  73. data/lib/vedeu/models/view/streams.rb +1 -0
  74. data/lib/vedeu/output/all.rb +4 -0
  75. data/lib/vedeu/output/border.rb +75 -206
  76. data/lib/vedeu/output/compositor.rb +1 -0
  77. data/lib/vedeu/output/html_char.rb +119 -0
  78. data/lib/vedeu/output/html_renderer.rb +89 -0
  79. data/lib/vedeu/output/output.rb +48 -44
  80. data/lib/vedeu/output/position_index.rb +12 -1
  81. data/lib/vedeu/output/renderer.rb +28 -0
  82. data/lib/vedeu/output/viewport.rb +14 -14
  83. data/lib/vedeu/output/virtual_buffer.rb +56 -0
  84. data/lib/vedeu/output/virtual_terminal.rb +42 -34
  85. data/lib/vedeu/output/wordwrap.rb +3 -0
  86. data/lib/vedeu/output/writer.rb +13 -1
  87. data/lib/vedeu/presentation/background.rb +1 -0
  88. data/lib/vedeu/presentation/colour.rb +8 -7
  89. data/lib/vedeu/presentation/foreground.rb +1 -0
  90. data/lib/vedeu/presentation/presentation.rb +43 -7
  91. data/lib/vedeu/presentation/translator.rb +12 -0
  92. data/lib/vedeu/repositories/repository.rb +8 -8
  93. data/lib/vedeu/support/bounding_area.rb +2 -0
  94. data/lib/vedeu/support/coercions.rb +2 -1
  95. data/lib/vedeu/support/common.rb +1 -0
  96. data/lib/vedeu/support/console.rb +17 -23
  97. data/lib/vedeu/support/content_geometry.rb +2 -0
  98. data/lib/vedeu/support/coordinate.rb +1 -0
  99. data/lib/vedeu/support/esc.rb +58 -29
  100. data/lib/vedeu/support/grid.rb +1 -0
  101. data/lib/vedeu/support/limit.rb +9 -0
  102. data/lib/vedeu/support/log.rb +31 -9
  103. data/lib/vedeu/support/node.rb +8 -18
  104. data/lib/vedeu/support/position.rb +13 -34
  105. data/lib/vedeu/support/position_validator.rb +3 -0
  106. data/lib/vedeu/support/read.rb +1 -0
  107. data/lib/vedeu/support/refresh.rb +3 -2
  108. data/lib/vedeu/support/terminal.rb +11 -5
  109. data/lib/vedeu/support/trace.rb +16 -1
  110. data/lib/vedeu/support/visible.rb +2 -0
  111. data/lib/vedeu/support/write.rb +1 -0
  112. data/lib/vedeu/traps.rb +1 -0
  113. data/lib/vedeu.rb +2 -0
  114. data/test/integration/distributed_test.rb +10 -8
  115. data/test/lib/vedeu/api_test.rb +3 -7
  116. data/test/lib/vedeu/application_test.rb +2 -5
  117. data/test/lib/vedeu/configuration/api_test.rb +12 -0
  118. data/test/lib/vedeu/cursor/cursor_test.rb +2 -0
  119. data/test/lib/vedeu/distributed/client_test.rb +17 -7
  120. data/test/lib/vedeu/distributed/server_test.rb +56 -0
  121. data/test/lib/vedeu/distributed/test_application_test.rb +7 -3
  122. data/test/lib/vedeu/dsl/components/border_test.rb +10 -2
  123. data/test/lib/vedeu/dsl/interface_test.rb +6 -0
  124. data/test/lib/vedeu/dsl/line_test.rb +19 -0
  125. data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -26
  126. data/test/lib/vedeu/dsl/shared/text_test.rb +8 -1
  127. data/test/lib/vedeu/dsl/stream_test.rb +13 -1
  128. data/test/lib/vedeu/input/input_test.rb +1 -1
  129. data/test/lib/vedeu/input/key_test.rb +3 -16
  130. data/test/lib/vedeu/launcher_test.rb +11 -1
  131. data/test/lib/vedeu/main_loop_test.rb +41 -0
  132. data/test/lib/vedeu/models/geometry_test.rb +15 -34
  133. data/test/lib/vedeu/models/view/char_test.rb +44 -45
  134. data/test/lib/vedeu/models/view/interface_test.rb +6 -0
  135. data/test/lib/vedeu/models/view/line_test.rb +1 -1
  136. data/test/lib/vedeu/models/view/stream_test.rb +1 -1
  137. data/test/lib/vedeu/output/border_test.rb +6 -5
  138. data/test/lib/vedeu/output/compositor_test.rb +2 -20
  139. data/test/lib/vedeu/output/html_char_test.rb +85 -0
  140. data/test/lib/vedeu/output/html_renderer_test.rb +37 -0
  141. data/test/lib/vedeu/output/position_index_test.rb +2 -10
  142. data/test/lib/vedeu/output/renderer_test.rb +24 -0
  143. data/test/lib/vedeu/output/virtual_buffer_test.rb +53 -0
  144. data/test/lib/vedeu/output/virtual_terminal_test.rb +32 -2
  145. data/test/lib/vedeu/presentation/background_test.rb +41 -1
  146. data/test/lib/vedeu/presentation/colour_test.rb +10 -6
  147. data/test/lib/vedeu/presentation/foreground_test.rb +46 -6
  148. data/test/lib/vedeu/presentation/presentation_test.rb +44 -1
  149. data/test/lib/vedeu/presentation/translator_test.rb +34 -0
  150. data/test/lib/vedeu/repositories/repository_test.rb +1 -1
  151. data/test/lib/vedeu/support/bounding_area_test.rb +4 -12
  152. data/test/lib/vedeu/support/console_test.rb +9 -50
  153. data/test/lib/vedeu/support/esc_test.rb +7 -7
  154. data/test/lib/vedeu/support/position_test.rb +42 -0
  155. data/test/lib/vedeu/support/terminal_test.rb +5 -20
  156. data/test/lib/vedeu/support/write_test.rb +42 -18
  157. data/test/support/helpers/all.rb +0 -1
  158. data/test/support/helpers/repository_test_module.rb +1 -0
  159. data/test/test_helper.rb +5 -2
  160. data/vedeu.gemspec +7 -5
  161. metadata +60 -14
  162. data/lib/vedeu/distributed/application.rb +0 -91
  163. data/test/lib/vedeu/distributed/application_test.rb +0 -24
  164. data/test/support/helpers/presentation.rb +0 -16
@@ -6,7 +6,14 @@ module Vedeu
6
6
 
7
7
  describe Text do
8
8
 
9
-
9
+ describe '#text' do
10
+
11
+ # it { described.must_respond_to(:align) }
12
+ # it { described.must_respond_to(:center) }
13
+ # it { described.must_respond_to(:centre) }
14
+ # it { described.must_respond_to(:left) }
15
+ # it { described.must_respond_to(:right) }
16
+ end
10
17
 
11
18
  end # Text
12
19
 
@@ -8,7 +8,7 @@ module Vedeu
8
8
 
9
9
  let(:described) { Vedeu::DSL::Stream }
10
10
  let(:instance) { described.new(model) }
11
- let(:model) { mock('Vedeu::Stream') }
11
+ let(:model) { Vedeu::Stream.new }
12
12
  let(:client) {}
13
13
 
14
14
  describe '#initialize' do
@@ -17,6 +17,18 @@ module Vedeu
17
17
  it { instance.instance_variable_get('@client').must_equal(client) }
18
18
  end
19
19
 
20
+ describe '#stream' do
21
+ subject { instance.stream { } }
22
+
23
+ # it { subject.must_be_instance_of(Vedeu::Stream) }
24
+
25
+ context 'when the block is not given' do
26
+ subject { instance.stream }
27
+
28
+ it { proc { subject }.must_raise(InvalidSyntax) }
29
+ end
30
+ end
31
+
20
32
  end # Stream
21
33
 
22
34
  end # DSL
@@ -4,7 +4,7 @@ module Vedeu
4
4
 
5
5
  describe Input do
6
6
 
7
- let(:reader) { mock }
7
+ let(:reader) { Vedeu::Terminal }
8
8
  let(:keypress) { 'a' }
9
9
  let(:described) { Vedeu::Input }
10
10
  let(:instance) { described.new(reader) }
@@ -38,11 +38,7 @@ module Vedeu
38
38
  subject.must_equal('a')
39
39
  end
40
40
 
41
- context 'alias method #key' do
42
- subject { instance.key }
43
-
44
- it { subject.must_equal('a') }
45
- end
41
+ it { instance.must_respond_to(:key) }
46
42
  end
47
43
 
48
44
  describe '#output' do
@@ -52,17 +48,8 @@ module Vedeu
52
48
  subject.must_equal(:output)
53
49
  end
54
50
 
55
- context 'alias method #action' do
56
- subject { instance.action }
57
-
58
- it { subject.must_equal(:output) }
59
- end
60
-
61
- context 'alias method #press' do
62
- subject { instance.press }
63
-
64
- it { subject.must_equal(:output) }
65
- end
51
+ it { instance.must_respond_to(:action) }
52
+ it { instance.must_respond_to(:press) }
66
53
  end
67
54
 
68
55
  end # Key
@@ -24,6 +24,16 @@ module Vedeu
24
24
  it { instance.instance_variable_get('@exit_code').must_equal(1) }
25
25
  end
26
26
 
27
+ describe '#debug_execute!' do
28
+ subject { instance.debug_execute! }
29
+
30
+ context 'when debugging is enabled in the configuration' do
31
+ end
32
+
33
+ context 'when debugging is not enabled in the configuration' do
34
+ end
35
+ end
36
+
27
37
  describe '#execute!' do
28
38
  subject { instance.execute! }
29
39
 
@@ -38,7 +48,7 @@ module Vedeu
38
48
 
39
49
  # it 'displays the exception' do
40
50
  # capture_io do
41
- # Launcher.new.execute!
51
+ # Launcher.execute!
42
52
  # end.must_equal(["", ""])
43
53
  # end
44
54
  # end
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe MainLoop do
6
+
7
+ let(:described) { Vedeu::MainLoop }
8
+
9
+ describe '.start!' do
10
+ before do
11
+ # subject.expects(:while).yields do
12
+ # String.expects(:new).returns("samantha")
13
+ # end
14
+ end
15
+
16
+ subject { described.start! { } }
17
+
18
+ # it { subject; described.instance_variable_get('@started').must_equal(true) }
19
+ # it { subject; described.instance_variable_get('@loop').must_equal(true) }
20
+ end
21
+
22
+ describe '.stop!' do
23
+ subject { described.stop! }
24
+
25
+ it { subject; described.instance_variable_get('@loop').must_equal(false) }
26
+ end
27
+
28
+ describe '.safe_exit_point!' do
29
+ subject { described.safe_exit_point! }
30
+
31
+ context 'when we wish to continue' do
32
+ end
33
+
34
+ context 'when we wish to stop' do
35
+ # it { proc { subject }.must_raise(VedeuInterrupt) }
36
+ end
37
+ end
38
+
39
+ end # MainLoop
40
+
41
+ end # Vedeu
@@ -143,58 +143,39 @@ module Vedeu
143
143
  describe '#origin' do
144
144
  it 'returns the origin for the interface' do
145
145
  geometry = Geometry.new({ width: 5, height: 5 })
146
- geometry.origin.must_equal("\e[1;1H")
146
+ geometry.origin.must_be_instance_of(Vedeu::Position)
147
+ geometry.origin.y.must_equal(1)
148
+ geometry.origin.x.must_equal(1)
147
149
  end
148
150
 
149
151
  it 'returns the origin for the interface' do
150
152
  geometry = Geometry.new({ width: 5, height: 5, centred: true })
151
- geometry.origin.must_equal("\e[10;38H")
153
+ geometry.origin.must_be_instance_of(Vedeu::Position)
154
+ geometry.origin.y.must_equal(10)
155
+ geometry.origin.x.must_equal(38)
152
156
  end
153
157
 
154
158
  it 'returns the line position relative to the origin' do
155
159
  geometry = Geometry.new({ width: 5, height: 5 })
156
- geometry.origin(3).must_equal("\e[4;1H")
160
+ geometry.origin(3).must_be_instance_of(Vedeu::Position)
161
+ geometry.origin(3).y.must_equal(4)
162
+ geometry.origin(3).x.must_equal(1)
157
163
  end
158
164
 
159
165
  it 'returns the origin for the interface when the interface' \
160
166
  ' is at a custom position' do
161
167
  geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
162
- geometry.origin.must_equal("\e[6;3H")
168
+ geometry.origin.must_be_instance_of(Vedeu::Position)
169
+ geometry.origin.y.must_equal(6)
170
+ geometry.origin.x.must_equal(3)
163
171
  end
164
172
 
165
173
  it 'returns the line position relative to the origin when the' \
166
174
  ' interface is at a custom position' do
167
175
  geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
168
- geometry.origin(3).must_equal("\e[9;3H")
169
- end
170
- end
171
-
172
- describe '#raw_origin' do
173
- it 'returns the origin for the interface' do
174
- geometry = Geometry.new({ width: 5, height: 5 })
175
- geometry.raw_origin.must_equal([1, 1])
176
- end
177
-
178
- it 'returns the origin for the interface' do
179
- geometry = Geometry.new({ width: 5, height: 5, centred: true })
180
- geometry.raw_origin.must_equal([10, 38])
181
- end
182
-
183
- it 'returns the line position relative to the origin' do
184
- geometry = Geometry.new({ width: 5, height: 5 })
185
- geometry.raw_origin(3).must_equal([4, 1])
186
- end
187
-
188
- it 'returns the origin for the interface when the interface' \
189
- ' is at a custom position' do
190
- geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
191
- geometry.raw_origin.must_equal([6, 3])
192
- end
193
-
194
- it 'returns the line position relative to the origin when the' \
195
- ' interface is at a custom position' do
196
- geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
197
- geometry.raw_origin(3).must_equal([9, 3])
176
+ geometry.origin(3).must_be_instance_of(Vedeu::Position)
177
+ geometry.origin(3).y.must_equal(9)
178
+ geometry.origin(3).x.must_equal(3)
198
179
  end
199
180
  end
200
181
 
@@ -5,7 +5,16 @@ module Vedeu
5
5
  describe Char do
6
6
 
7
7
  let(:described) { Vedeu::Char }
8
- let(:instance) { described.new(value, parent, colour, style, position) }
8
+ let(:instance) { described.new(attributes) }
9
+ let(:attributes) {
10
+ {
11
+ colour: colour,
12
+ parent: parent,
13
+ position: position,
14
+ style: style,
15
+ value: value,
16
+ }
17
+ }
9
18
  let(:value) { 'a' }
10
19
  let(:parent) { Line.new(parent_attributes) }
11
20
  let(:parent_attributes) {
@@ -22,42 +31,6 @@ module Vedeu
22
31
  let(:parent_colour) { nil }
23
32
  let(:parent_style) { nil }
24
33
 
25
- describe '.coerce' do
26
- subject { described.coerce(value, parent, colour, style, position) }
27
-
28
- context 'when the value is already a Char' do
29
- let(:value) { described.new('b') }
30
-
31
- it { subject.must_equal(value) }
32
- end
33
-
34
- context 'when the value is an Array' do
35
- context 'and the Array contains instances of Char' do
36
- let(:value) { [described.new('b')] }
37
-
38
- it { subject.must_equal(value) }
39
- end
40
-
41
- context 'and the Array contains instances of String' do
42
- let(:value) { ['carbon'] }
43
-
44
- it { subject.must_be_instance_of(Array) }
45
- end
46
-
47
- context 'and the Array contains instances of NilClass' do
48
- let(:value) { [] }
49
-
50
- it { subject.must_be_instance_of(NilClass) }
51
- end
52
- end
53
-
54
- context 'when the value is not a Char or Array' do
55
- let(:value) { {} }
56
-
57
- it { subject.must_be_instance_of(NilClass) }
58
- end
59
- end
60
-
61
34
  describe '#initialize' do
62
35
  it { instance.must_be_instance_of(Char) }
63
36
  it { instance.instance_variable_get('@colour').must_be_instance_of(Vedeu::Colour) }
@@ -84,13 +57,13 @@ module Vedeu
84
57
 
85
58
  context 'when the value is set' do
86
59
  it { subject.must_equal('a') }
60
+ end
61
+ end
87
62
 
88
- context 'and the value is more than one character' do
89
- let(:value) { 'multi' }
63
+ describe '#to_html' do
64
+ subject { instance.to_html }
90
65
 
91
- it { subject.must_equal('m') }
92
- end
93
- end
66
+ it { subject.must_be_instance_of(String) }
94
67
  end
95
68
 
96
69
  describe '#to_s' do
@@ -159,11 +132,37 @@ module Vedeu
159
132
 
160
133
  it { subject.must_equal("") }
161
134
  end
135
+ end
136
+
137
+ describe '#x' do
138
+ let(:position) { Position.new(17, 2) }
139
+
140
+ subject { instance.x }
141
+
142
+ context 'when a position is set' do
143
+ it { subject.must_equal(2) }
144
+ end
162
145
 
163
- context 'when the value is more than one character' do
164
- let(:value) { 'multi' }
146
+ context 'when a position is not set' do
147
+ let(:position) {}
148
+
149
+ it { subject.must_equal(nil) }
150
+ end
151
+ end
152
+
153
+ describe '#y' do
154
+ let(:position) { Position.new(17, 2) }
155
+
156
+ subject { instance.y }
157
+
158
+ context 'when a position is set' do
159
+ it { subject.must_equal(17) }
160
+ end
161
+
162
+ context 'when a position is not set' do
163
+ let(:position) {}
165
164
 
166
- it { subject.must_equal("m") }
165
+ it { subject.must_equal(nil) }
167
166
  end
168
167
  end
169
168
 
@@ -102,6 +102,12 @@ module Vedeu
102
102
 
103
103
  # context 'when the interface has a group' do
104
104
  # it { skip }
105
+ #
106
+ # context 'when the group exists' do
107
+ # end
108
+ #
109
+ # context 'when the group does not exist' do
110
+ # end
105
111
  # end
106
112
  # end
107
113
  end
@@ -33,7 +33,7 @@ module Vedeu
33
33
 
34
34
  let(:streams_parent) { Line.new({ streams: nil, parent: parent, colour: colour, style: style }) }
35
35
 
36
- let(:parent) { mock('Interface') }
36
+ let(:parent) { Vedeu::Interface.new }
37
37
  let(:colour) { Colour.new({ foreground: '#ff0000', background: '#000000' }) }
38
38
  let(:style) { Style.new('normal') }
39
39
 
@@ -25,7 +25,7 @@ module Vedeu
25
25
  }
26
26
  let(:colour) { Colour.new({ background: '#ff0000', foreground: '#000000' }) }
27
27
  let(:style) { Style.new('normal') }
28
- let(:line_parent) { mock('Vedeu::Interface') }
28
+ let(:line_parent) { Vedeu::Interface.new }
29
29
 
30
30
  describe '#initialize' do
31
31
  it { instance.must_be_instance_of(described) }
@@ -14,6 +14,7 @@ module Vedeu
14
14
 
15
15
  before do
16
16
  Vedeu.interfaces.reset
17
+ Vedeu.borders.reset
17
18
  Vedeu.interface 'borders' do
18
19
  geometry do
19
20
  height 5
@@ -280,11 +281,11 @@ module Vedeu
280
281
 
281
282
  it 'returns the escape sequences to draw a border' do
282
283
  subject.must_equal(
283
- "\e(0l\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0k\e(B\n" \
284
- "\e(0x\e(BBeryll\e(0x\e(B\n" \
285
- "\e(0x\e(BMagnes\e(0x\e(B\n" \
286
- "\e(0x\e(BPluton\e(0x\e(B\n" \
287
- "\e(0m\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0j\e(B"
284
+ "\e(0l\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0k\e(B
285
+ \e(0x\e(BBeryll\e(0x\e(B
286
+ \e(0x\e(BMagnes\e(0x\e(B
287
+ \e(0x\e(BPluton\e(0x\e(B
288
+ \e(0m\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0q\e(B\e(0j\e(B"
288
289
  )
289
290
  end
290
291
  end
@@ -12,6 +12,7 @@ module Vedeu
12
12
  let(:buffer) { Buffer.new(_name, interface) }
13
13
  let(:interface) {
14
14
  Vedeu.interface(_name) do
15
+ border!
15
16
  geometry do
16
17
  height 5
17
18
  width 10
@@ -50,26 +51,7 @@ module Vedeu
50
51
  end
51
52
 
52
53
  context 'when the view has not redefined the geometry' do
53
- it 'returns the escape sequences and content sent to the console' do
54
- subject.must_equal(
55
- [
56
- [
57
- "\e[1;1H \e[1;1H" \
58
- "\e[2;1H \e[2;1H" \
59
- "\e[3;1H \e[3;1H" \
60
- "\e[4;1H \e[4;1H" \
61
- "\e[5;1H \e[5;1H" \
62
- "\e[1;1HSome text." \
63
- "\e[2;1H " \
64
- "\e[3;1H " \
65
- "\e[4;1H " \
66
- "\e[5;1H ",
67
-
68
- "\e[1;1H\e[?25l"
69
- ]
70
- ]
71
- )
72
- end
54
+ # it { skip }
73
55
  end
74
56
  end
75
57
  end
@@ -0,0 +1,85 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe HTMLChar do
6
+
7
+ let(:described) { Vedeu::HTMLChar }
8
+ let(:instance) { described.new(char) }
9
+ let(:char) { Vedeu::Char.new(attributes) }
10
+ let(:attributes) {
11
+ {
12
+ border: border,
13
+ colour: colour,
14
+ parent: parent,
15
+ value: value
16
+ }
17
+ }
18
+ let(:border) {}
19
+ let(:colour) {}
20
+ let(:parent) { Vedeu::Line.new({ colour: parent_colour }) }
21
+ let(:parent_colour) {}
22
+ let(:value) {}
23
+
24
+ describe '#initialize' do
25
+ it { instance.must_be_instance_of(Vedeu::HTMLChar) }
26
+ it { instance.instance_variable_get('@char').must_equal(char) }
27
+ end
28
+
29
+ describe '.render' do
30
+ subject { described.render(char) }
31
+
32
+ it { subject.must_be_instance_of(String) }
33
+
34
+ context 'when there is a border' do
35
+ let(:border) { :top_left }
36
+
37
+ context 'when there is a colour' do
38
+ let(:colour) { Vedeu::Colour.new({ background: '#220022', foreground: '#aadd00' }) }
39
+
40
+ it { subject.must_equal(
41
+ "<td style='background:#220022;color:#aadd00;border:1px #220022 solid;border-top:1px #aadd00 solid;border-left:1px #aadd00 solid;'>&nbsp;</td>"
42
+ ) }
43
+ end
44
+
45
+ context 'when there is no colour' do
46
+ context 'when there is a parent colour' do
47
+ let(:parent_colour) { Vedeu::Colour.new({ background: '#002222', foreground: '#dd2200' }) }
48
+
49
+ it { subject.must_equal(
50
+ "<td style='background:#002222;color:#dd2200;border:1px #002222 solid;border-top:1px #dd2200 solid;border-left:1px #dd2200 solid;'>&nbsp;</td>"
51
+ ) }
52
+ end
53
+
54
+ context 'when there is no parent colour' do
55
+ it { subject.must_equal(
56
+ "<td style='background:#000;color:#222;border:1px #000 solid;border-top:1px #222 solid;border-left:1px #222 solid;'>&nbsp;</td>"
57
+ ) }
58
+ end
59
+ end
60
+ end
61
+
62
+ context 'when there is no border' do
63
+ context 'when there is no value' do
64
+ it { subject.must_equal("<td>&nbsp;</td>") }
65
+ end
66
+
67
+ context 'when the value is empty' do
68
+ let(:value) { '' }
69
+
70
+ it { subject.must_equal("<td>&nbsp;</td>") }
71
+ end
72
+
73
+ context 'when there is a value' do
74
+ let(:value) { 'a' }
75
+
76
+ it { subject.must_equal(
77
+ "<td style='background:#000;color:#222;border:1px #000 solid;'>a</td>"
78
+ ) }
79
+ end
80
+ end
81
+ end
82
+
83
+ end # HTMLChar
84
+
85
+ end # Vedeu
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe HTMLRenderer do
6
+
7
+ let(:described) { Vedeu::HTMLRenderer }
8
+ let(:instance) { described.new(output) }
9
+ let(:output) {}
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::HTMLRenderer) }
13
+ it { instance.instance_variable_get('@output').must_equal(output) }
14
+ end
15
+
16
+ describe '#render' do
17
+ subject { instance.render }
18
+
19
+ it { subject.must_be_instance_of(String) }
20
+ end
21
+
22
+ describe '#to_file' do
23
+ let(:path) {}
24
+
25
+ subject { instance.to_file(path) }
26
+
27
+ context 'when a path is given' do
28
+ let(:path) { '/tmp/test_vedeu_html_renderer.html' }
29
+ end
30
+
31
+ context 'when a path is not given' do
32
+ end
33
+ end
34
+
35
+ end # HTMLRenderer
36
+
37
+ end # Vedeu
@@ -47,11 +47,7 @@ module Vedeu
47
47
 
48
48
  it { subject.must_equal(5) }
49
49
 
50
- context 'alias method: first' do
51
- subject { instance.first }
52
-
53
- it { subject.must_equal(5) }
54
- end
50
+ it { instance.must_respond_to(:first) }
55
51
  end
56
52
 
57
53
  context '#x' do
@@ -59,11 +55,7 @@ module Vedeu
59
55
 
60
56
  it { subject.must_equal(16) }
61
57
 
62
- context 'alias method: last' do
63
- subject { instance.last }
64
-
65
- it { subject.must_equal(16) }
66
- end
58
+ it { instance.must_respond_to(:last) }
67
59
  end
68
60
  end
69
61
 
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Renderer do
6
+
7
+ let(:described) { Vedeu::Renderer }
8
+ let(:instance) { described.new(output) }
9
+ let(:output) {}
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::Renderer) }
13
+ it { instance.instance_variable_get('@output').must_equal([output]) }
14
+ end
15
+
16
+ describe '.render' do
17
+ subject { described.render }
18
+
19
+ it { subject.must_be_instance_of(String) }
20
+ end
21
+
22
+ end # Renderer
23
+
24
+ end # Vedeu
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe VirtualBuffer do
6
+
7
+ let(:described) { Vedeu::VirtualBuffer }
8
+
9
+ before { described.clear }
10
+
11
+ describe '#retrieve' do
12
+ subject { described.retrieve }
13
+
14
+ context 'when no buffers are stored' do
15
+ it { subject.must_be_instance_of(NilClass) }
16
+ end
17
+
18
+ context 'when buffers are stored' do
19
+ before { described.store([[Vedeu::Char.new]]) }
20
+
21
+ it { subject.must_be_instance_of(Array) }
22
+ end
23
+ end
24
+
25
+ describe '#store' do
26
+ let(:data) { :data }
27
+
28
+ subject { described.store(data) }
29
+
30
+ it { subject.must_be_instance_of(Array) }
31
+
32
+ it { subject.wont_be_empty }
33
+ end
34
+
35
+ describe '#size' do
36
+ subject { described.size }
37
+
38
+ it { subject.must_be_instance_of(Fixnum) }
39
+ end
40
+
41
+ describe '#clear' do
42
+ subject { described.clear }
43
+
44
+ it { subject.must_be_instance_of(Array) }
45
+
46
+ it { subject.must_be_empty }
47
+
48
+ it { described.must_respond_to(:reset) }
49
+ end
50
+
51
+ end # VirtualBuffer
52
+
53
+ end # Vedeu