vedeu 0.4.13 → 0.4.14

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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/.travis.yml +2 -1
  4. data/Guardfile +6 -5
  5. data/README.md +3 -30
  6. data/Rakefile +5 -5
  7. data/bin/vedeu_drb_client +1 -1
  8. data/bin/vedeu_drb_server +91 -89
  9. data/bin/vedeu_test +4 -0
  10. data/config/rubocop_enabled.yml +5 -10
  11. data/examples/borders_app.rb +2 -1
  12. data/examples/colours_app.rb +13 -8
  13. data/examples/configuration_app.rb +3 -2
  14. data/examples/cursor_app.rb +16 -11
  15. data/examples/drb_app.rb +88 -89
  16. data/examples/focus_app.rb +31 -32
  17. data/examples/geometry_app.rb +2 -1
  18. data/examples/hello_world.rb +2 -1
  19. data/examples/lines_app.rb +2 -1
  20. data/examples/material_colours_app.rb +126 -0
  21. data/examples/typed_commands/typed_commands_app.rb +5 -1
  22. data/examples/view_templates_app/view_templates_app.rb +6 -3
  23. data/lib/vedeu/all.rb +1 -1
  24. data/lib/vedeu/api.rb +18 -10
  25. data/lib/vedeu/application.rb +0 -1
  26. data/lib/vedeu/bindings.rb +77 -16
  27. data/lib/vedeu/buffers/all.rb +2 -5
  28. data/lib/vedeu/buffers/buffer.rb +69 -25
  29. data/lib/vedeu/buffers/display_buffer.rb +3 -7
  30. data/lib/vedeu/configuration/all.rb +3 -6
  31. data/lib/vedeu/configuration/api.rb +28 -4
  32. data/lib/vedeu/configuration/cli.rb +9 -9
  33. data/lib/vedeu/configuration/configuration.rb +11 -7
  34. data/lib/vedeu/cursor/all.rb +3 -6
  35. data/lib/vedeu/cursor/cursor.rb +22 -14
  36. data/lib/vedeu/cursor/move.rb +32 -22
  37. data/lib/vedeu/cursor/refresh_cursor.rb +1 -1
  38. data/lib/vedeu/debug.rb +2 -1
  39. data/lib/vedeu/distributed/client.rb +1 -7
  40. data/lib/vedeu/distributed/server.rb +0 -4
  41. data/lib/vedeu/distributed/subprocess.rb +1 -1
  42. data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -1
  43. data/lib/vedeu/distributed/test_application.rb +3 -5
  44. data/lib/vedeu/distributed/uri.rb +2 -2
  45. data/lib/vedeu/dsl/all.rb +6 -6
  46. data/lib/vedeu/dsl/components/all.rb +0 -3
  47. data/lib/vedeu/dsl/components/border.rb +20 -12
  48. data/lib/vedeu/dsl/components/geometry.rb +68 -3
  49. data/lib/vedeu/dsl/components/keymap.rb +1 -2
  50. data/lib/vedeu/dsl/composition.rb +8 -1
  51. data/lib/vedeu/dsl/interface.rb +61 -11
  52. data/lib/vedeu/dsl/line.rb +12 -12
  53. data/lib/vedeu/dsl/shared/all.rb +4 -7
  54. data/lib/vedeu/dsl/shared/colour.rb +2 -2
  55. data/lib/vedeu/dsl/shared/text.rb +2 -35
  56. data/lib/vedeu/dsl/shared/use.rb +2 -2
  57. data/lib/vedeu/dsl/view.rb +4 -4
  58. data/lib/vedeu/events/all.rb +3 -5
  59. data/lib/vedeu/events/event.rb +5 -5
  60. data/lib/vedeu/geometry/all.rb +11 -16
  61. data/lib/vedeu/geometry/area.rb +2 -5
  62. data/lib/vedeu/geometry/canvas.rb +12 -16
  63. data/lib/vedeu/geometry/dimension.rb +20 -22
  64. data/lib/vedeu/geometry/geometry.rb +28 -30
  65. data/lib/vedeu/geometry/grid.rb +1 -1
  66. data/lib/vedeu/geometry/index_position.rb +7 -0
  67. data/lib/vedeu/geometry/null_geometry.rb +61 -0
  68. data/lib/vedeu/geometry/position.rb +0 -3
  69. data/lib/vedeu/geometry/position_index.rb +7 -0
  70. data/lib/vedeu/geometry/position_validator.rb +44 -33
  71. data/lib/vedeu/input/all.rb +5 -4
  72. data/lib/vedeu/input/keymap.rb +0 -1
  73. data/lib/vedeu/input/mapper.rb +1 -3
  74. data/lib/vedeu/launcher.rb +6 -7
  75. data/lib/vedeu/main_loop.rb +1 -2
  76. data/lib/vedeu/models/all.rb +1 -0
  77. data/lib/vedeu/models/cell.rb +5 -8
  78. data/lib/vedeu/models/char.rb +50 -15
  79. data/lib/vedeu/models/composition.rb +8 -1
  80. data/lib/vedeu/models/focus.rb +4 -4
  81. data/lib/vedeu/models/group.rb +3 -3
  82. data/lib/vedeu/models/interface.rb +62 -46
  83. data/lib/vedeu/models/line.rb +1 -1
  84. data/lib/vedeu/models/null.rb +48 -0
  85. data/lib/vedeu/models/stream.rb +5 -5
  86. data/lib/vedeu/output/all.rb +20 -30
  87. data/lib/vedeu/output/border.rb +93 -40
  88. data/lib/vedeu/output/clear.rb +100 -15
  89. data/lib/vedeu/output/colour.rb +56 -12
  90. data/lib/vedeu/output/compressor.rb +59 -0
  91. data/lib/vedeu/output/html_char.rb +4 -2
  92. data/lib/vedeu/output/null_border.rb +16 -4
  93. data/lib/vedeu/output/output.rb +13 -21
  94. data/lib/vedeu/output/presentation.rb +28 -23
  95. data/lib/vedeu/output/refresh.rb +2 -2
  96. data/lib/vedeu/output/renderers/all.rb +80 -3
  97. data/lib/vedeu/output/renderers/file_renderer.rb +38 -2
  98. data/lib/vedeu/output/renderers/html_renderer.rb +6 -4
  99. data/lib/vedeu/output/renderers/json_renderer.rb +52 -0
  100. data/lib/vedeu/output/renderers/null_renderer.rb +14 -0
  101. data/lib/vedeu/output/renderers/terminal_renderer.rb +2 -12
  102. data/lib/vedeu/output/style.rb +33 -3
  103. data/lib/vedeu/output/text.rb +98 -1
  104. data/lib/vedeu/output/translator.rb +30 -7
  105. data/lib/vedeu/output/viewport.rb +43 -79
  106. data/lib/vedeu/output/wordwrap.rb +4 -4
  107. data/lib/vedeu/repositories/all.rb +22 -179
  108. data/lib/vedeu/repositories/collection.rb +11 -13
  109. data/lib/vedeu/repositories/collections/all.rb +8 -0
  110. data/lib/vedeu/repositories/collections/chars.rb +9 -0
  111. data/lib/vedeu/repositories/collections/events.rb +9 -0
  112. data/lib/vedeu/repositories/collections/interfaces.rb +9 -0
  113. data/lib/vedeu/repositories/collections/keys.rb +9 -0
  114. data/lib/vedeu/repositories/collections/lines.rb +9 -0
  115. data/lib/vedeu/repositories/collections/streams.rb +9 -0
  116. data/lib/vedeu/repositories/model.rb +7 -2
  117. data/lib/vedeu/repositories/repositories/all.rb +14 -0
  118. data/lib/vedeu/repositories/repositories/background_colours.rb +14 -0
  119. data/lib/vedeu/repositories/repositories/borders.rb +38 -0
  120. data/lib/vedeu/repositories/repositories/buffers.rb +36 -0
  121. data/lib/vedeu/repositories/repositories/colours.rb +63 -0
  122. data/lib/vedeu/repositories/repositories/cursors.rb +29 -0
  123. data/lib/vedeu/repositories/repositories/events_repository.rb +24 -0
  124. data/lib/vedeu/repositories/repositories/foreground_colours.rb +14 -0
  125. data/lib/vedeu/repositories/repositories/geometries.rb +37 -0
  126. data/lib/vedeu/repositories/repositories/groups.rb +24 -0
  127. data/lib/vedeu/repositories/repositories/interfaces_repository.rb +24 -0
  128. data/lib/vedeu/repositories/repositories/keymaps.rb +24 -0
  129. data/lib/vedeu/repositories/repositories/menus.rb +24 -0
  130. data/lib/vedeu/repositories/repository.rb +29 -47
  131. data/lib/vedeu/storage/all.rb +6 -0
  132. data/lib/vedeu/storage/associative_store.rb +47 -0
  133. data/lib/vedeu/storage/conveyor_store.rb +69 -0
  134. data/lib/vedeu/storage/fifo_store.rb +37 -0
  135. data/lib/vedeu/storage/store.rb +58 -0
  136. data/lib/vedeu/support/all.rb +5 -10
  137. data/lib/vedeu/support/common.rb +0 -8
  138. data/lib/vedeu/support/log.rb +13 -24
  139. data/lib/vedeu/support/template.rb +4 -1
  140. data/lib/vedeu/support/terminal.rb +10 -10
  141. data/lib/vedeu/support/trace.rb +15 -88
  142. data/lib/vedeu/support/visibility.rb +73 -0
  143. data/lib/vedeu.rb +37 -0
  144. data/test/lib/vedeu/api_test.rb +7 -3
  145. data/test/lib/vedeu/application_test.rb +9 -3
  146. data/test/lib/vedeu/bindings_test.rb +21 -0
  147. data/test/lib/vedeu/buffers/buffer_test.rb +110 -134
  148. data/test/lib/vedeu/buffers/display_buffer_test.rb +8 -0
  149. data/test/lib/vedeu/configuration/api_test.rb +5 -1
  150. data/test/lib/vedeu/configuration/configuration_test.rb +4 -6
  151. data/test/lib/vedeu/cursor/cursor_test.rb +25 -17
  152. data/test/lib/vedeu/cursor/move_test.rb +7 -7
  153. data/test/lib/vedeu/distributed/client_test.rb +1 -1
  154. data/test/lib/vedeu/distributed/subprocess_test.rb +3 -1
  155. data/test/lib/vedeu/distributed/uri_test.rb +5 -5
  156. data/test/lib/vedeu/dsl/components/geometry_test.rb +43 -0
  157. data/test/lib/vedeu/dsl/components/keymap_test.rb +1 -1
  158. data/test/lib/vedeu/dsl/composition_test.rb +6 -5
  159. data/test/lib/vedeu/dsl/interface_test.rb +81 -16
  160. data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -4
  161. data/test/lib/vedeu/dsl/shared/text_test.rb +87 -9
  162. data/test/lib/vedeu/dsl/stream_test.rb +1 -1
  163. data/test/lib/vedeu/events/event_test.rb +3 -1
  164. data/test/lib/vedeu/events/trigger_test.rb +8 -4
  165. data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
  166. data/test/lib/vedeu/geometry/geometry_test.rb +5 -3
  167. data/test/lib/vedeu/geometry/index_position_test.rb +30 -7
  168. data/test/lib/vedeu/geometry/null_geometry_test.rb +57 -0
  169. data/test/lib/vedeu/geometry/position_index_test.rb +14 -0
  170. data/test/lib/vedeu/geometry/position_validator_test.rb +17 -3
  171. data/test/lib/vedeu/input/keymap_test.rb +3 -1
  172. data/test/lib/vedeu/input/mapper_test.rb +8 -4
  173. data/test/lib/vedeu/launcher_test.rb +1 -1
  174. data/test/lib/vedeu/models/cell_test.rb +10 -8
  175. data/test/lib/vedeu/models/char_test.rb +52 -28
  176. data/test/lib/vedeu/models/composition_test.rb +26 -4
  177. data/test/lib/vedeu/models/group_test.rb +11 -5
  178. data/test/lib/vedeu/models/interface_test.rb +32 -19
  179. data/test/lib/vedeu/models/line_test.rb +21 -25
  180. data/test/lib/vedeu/models/menu_test.rb +10 -6
  181. data/test/lib/vedeu/models/null_test.rb +66 -0
  182. data/test/lib/vedeu/models/stream_test.rb +13 -10
  183. data/test/lib/vedeu/output/border_test.rb +29 -8
  184. data/test/lib/vedeu/output/clear_test.rb +23 -4
  185. data/test/lib/vedeu/output/colour_test.rb +20 -4
  186. data/test/lib/vedeu/output/compressor_test.rb +43 -0
  187. data/test/lib/vedeu/output/html_char_test.rb +29 -17
  188. data/test/lib/vedeu/output/null_border_test.rb +2 -1
  189. data/test/lib/vedeu/output/output_test.rb +20 -30
  190. data/test/lib/vedeu/output/presentation_test.rb +39 -16
  191. data/test/lib/vedeu/output/refresh_test.rb +14 -10
  192. data/test/lib/vedeu/output/renderers/all_test.rb +96 -0
  193. data/test/lib/vedeu/output/renderers/file_renderer_test.rb +1 -1
  194. data/test/lib/vedeu/output/renderers/html_renderer_test.rb +13 -9
  195. data/test/lib/vedeu/output/renderers/json_renderer_test.rb +52 -0
  196. data/test/lib/vedeu/output/renderers/null_renderer_test.rb +19 -0
  197. data/test/lib/vedeu/output/style_test.rb +41 -1
  198. data/test/lib/vedeu/output/text_test.rb +61 -10
  199. data/test/lib/vedeu/output/translator_test.rb +14 -0
  200. data/test/lib/vedeu/output/viewport_test.rb +22 -3
  201. data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
  202. data/test/lib/vedeu/output/wordwrap_test.rb +58 -45
  203. data/test/lib/vedeu/repositories/collections/chars_test.rb +16 -0
  204. data/test/lib/vedeu/repositories/collections/events_test.rb +16 -0
  205. data/test/lib/vedeu/repositories/collections/interfaces_test.rb +16 -0
  206. data/test/lib/vedeu/repositories/collections/keys_test.rb +16 -0
  207. data/test/lib/vedeu/repositories/collections/lines_test.rb +16 -0
  208. data/test/lib/vedeu/repositories/collections/streams_test.rb +16 -0
  209. data/test/lib/vedeu/repositories/repositories/background_colours_test.rb +17 -0
  210. data/test/lib/vedeu/repositories/repositories/borders_test.rb +51 -0
  211. data/test/lib/vedeu/repositories/repositories/buffers_test.rb +52 -0
  212. data/test/lib/vedeu/repositories/repositories/colours_test.rb +16 -0
  213. data/test/lib/vedeu/repositories/repositories/cursors_test.rb +39 -0
  214. data/test/lib/vedeu/repositories/repositories/events_repository_test.rb +17 -0
  215. data/test/lib/vedeu/repositories/repositories/foreground_colours_test.rb +17 -0
  216. data/test/lib/vedeu/repositories/repositories/geometries_test.rb +42 -0
  217. data/test/lib/vedeu/repositories/repositories/groups_test.rb +17 -0
  218. data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +17 -0
  219. data/test/lib/vedeu/repositories/repositories/keymaps_test.rb +17 -0
  220. data/test/lib/vedeu/repositories/repositories/menus_test.rb +17 -0
  221. data/test/lib/vedeu/repositories/repository_test.rb +16 -36
  222. data/test/lib/vedeu/storage/associative_store_test.rb +69 -0
  223. data/test/lib/vedeu/storage/conveyor_store_test.rb +135 -0
  224. data/test/lib/vedeu/storage/fifo_store_test.rb +47 -0
  225. data/test/lib/vedeu/storage/store_test.rb +123 -0
  226. data/test/lib/vedeu/support/common_test.rb +0 -9
  227. data/test/lib/vedeu/support/terminal_test.rb +78 -55
  228. data/test/lib/vedeu/support/visibility_test.rb +80 -0
  229. data/test/test_helper.rb +13 -11
  230. data/vedeu.gemspec +4 -3
  231. metadata +92 -32
  232. data/lib/vedeu/cursor/toggle.rb +0 -55
  233. data/lib/vedeu/exceptions.rb +0 -37
  234. data/lib/vedeu/geometry/centre.rb +0 -85
  235. data/lib/vedeu/geometry/content.rb +0 -70
  236. data/lib/vedeu/geometry/limit.rb +0 -58
  237. data/lib/vedeu/output/compositor.rb +0 -62
  238. data/lib/vedeu/repositories/collections.rb +0 -41
  239. data/lib/vedeu/support/coercions.rb +0 -60
  240. data/lib/vedeu/support/sentence.rb +0 -91
  241. data/lib/vedeu/support/visible.rb +0 -90
  242. data/test/lib/vedeu/cursor/toggle_test.rb +0 -63
  243. data/test/lib/vedeu/geometry/centre_test.rb +0 -58
  244. data/test/lib/vedeu/geometry/content_test.rb +0 -98
  245. data/test/lib/vedeu/geometry/limit_test.rb +0 -30
  246. data/test/lib/vedeu/output/compositor_test.rb +0 -48
  247. data/test/lib/vedeu/repositories/all_test.rb +0 -135
  248. data/test/lib/vedeu/repositories/collections_test.rb +0 -71
  249. data/test/lib/vedeu/support/coercions_test.rb +0 -84
  250. data/test/lib/vedeu/support/sentence_test.rb +0 -56
  251. data/test/lib/vedeu/support/visible_test.rb +0 -161
@@ -43,6 +43,12 @@ module Vedeu
43
43
  it { instance.must_respond_to(:value) }
44
44
  end
45
45
 
46
+ describe '#chars' do
47
+ subject { instance.chars }
48
+
49
+ it { subject.must_be_instance_of(Array) }
50
+ end
51
+
46
52
  describe '#eql?' do
47
53
  let(:other) { instance }
48
54
 
@@ -51,15 +57,15 @@ module Vedeu
51
57
  it { subject.must_equal(true) }
52
58
 
53
59
  context 'when different to other' do
54
- let(:other) { described.new({ value: 'b' }) }
60
+ let(:other) { described.new(value: 'b') }
55
61
 
56
62
  it { subject.must_equal(false) }
57
63
  end
58
64
  end
59
65
 
60
66
  describe '#inspect' do
61
- let(:colour) { Vedeu::Colour.new({ foreground: '#00ff00',
62
- background: '#005500' }) }
67
+ let(:colour) { Vedeu::Colour.new(foreground: '#00ff00',
68
+ background: '#005500') }
63
69
  let(:position) { Vedeu::Position.new(17, 2) }
64
70
  let(:style) { Vedeu::Style.new('underline') }
65
71
 
@@ -67,7 +73,13 @@ module Vedeu
67
73
  subject { instance.inspect }
68
74
 
69
75
  it { subject.must_equal(
70
- "<Vedeu::Char '\\e[17;2H\\e[38;2;0;255;0m\\e[48;2;0;85;0m\\e[4ma\\e[17;2H'>"
76
+ "<Vedeu::Char '" \
77
+ "\\e[17;2H" \
78
+ "\\e[38;2;0;255;0m" \
79
+ "\\e[48;2;0;85;0m" \
80
+ "\\e[4ma" \
81
+ "\\e[17;2H" \
82
+ "'>"
71
83
  ) }
72
84
  end
73
85
 
@@ -76,18 +88,24 @@ module Vedeu
76
88
 
77
89
  it { subject.must_be_instance_of(Hash) }
78
90
 
79
- it { subject.must_equal({ parent: {
80
- background: '',
81
- foreground: '',
82
- style: '',
83
- },
84
- background: '',
85
- border: '',
86
- foreground: '',
87
- style: '',
88
- value: value,
89
- x: nil,
90
- y: nil }) }
91
+ it { subject.must_equal(
92
+ border: '',
93
+ colour: {
94
+ background: '',
95
+ foreground: '',
96
+ },
97
+ parent: {
98
+ background: '',
99
+ foreground: '',
100
+ style: '',
101
+ },
102
+ position: {
103
+ y: nil,
104
+ x: nil
105
+ },
106
+ style: '',
107
+ value: 'a',
108
+ ) }
91
109
  end
92
110
 
93
111
  describe '#to_html' do
@@ -96,6 +114,12 @@ module Vedeu
96
114
  it { subject.must_be_instance_of(String) }
97
115
  end
98
116
 
117
+ describe '#to_json' do
118
+ subject { instance.to_json }
119
+
120
+ it { subject.must_be_instance_of(String) }
121
+ end
122
+
99
123
  describe '#to_s' do
100
124
  subject { instance.to_s }
101
125
 
@@ -110,21 +134,21 @@ module Vedeu
110
134
  context 'when a position is not specified' do
111
135
  let(:position) {}
112
136
 
113
- it { subject.must_equal("a") }
137
+ it { subject.must_equal('a') }
114
138
  end
115
139
 
116
140
  context 'when a colour is specified' do
117
- let(:colour) { Vedeu::Colour.new({ foreground: '#00ff00',
118
- background: '#005500' }) }
141
+ let(:colour) { Vedeu::Colour.new(foreground: '#00ff00',
142
+ background: '#005500') }
119
143
 
120
- context 'when a parent colour is specified' do
121
- let(:parent_colour) { Vedeu::Colour.new({ foreground: '#ff0000',
122
- background: '#550000' }) }
144
+ context 'and a parent colour is specified' do
145
+ let(:parent_colour) { Vedeu::Colour.new(foreground: '#ff0000',
146
+ background: '#550000') }
123
147
 
124
- it { subject.must_equal("\e[38;2;0;255;0m\e[48;2;0;85;0ma\e[38;2;255;0;0m\e[48;2;85;0;0m") }
148
+ it { subject.must_equal("\e[38;2;0;255;0m\e[48;2;0;85;0ma") }
125
149
  end
126
150
 
127
- context 'when a parent colour is not specified' do
151
+ context 'and a parent colour is not specified' do
128
152
  let(:parent_colour) {}
129
153
 
130
154
  it { subject.must_equal("\e[38;2;0;255;0m\e[48;2;0;85;0ma") }
@@ -134,7 +158,7 @@ module Vedeu
134
158
  context 'when a colour is not specified' do
135
159
  let(:colour) {}
136
160
 
137
- it { subject.must_equal("a") }
161
+ it { subject.must_equal('a') }
138
162
  end
139
163
 
140
164
  context 'when a style is specified' do
@@ -143,7 +167,7 @@ module Vedeu
143
167
  context 'when a parent style is specified' do
144
168
  let(:parent_style) { Vedeu::Style.new('bold') }
145
169
 
146
- it { subject.must_equal("\e[4ma\e[1m") }
170
+ it { subject.must_equal("\e[4ma") }
147
171
  end
148
172
 
149
173
  context 'when a parent style is not specified' do
@@ -156,13 +180,13 @@ module Vedeu
156
180
  context 'when a style is not specified' do
157
181
  let(:style) {}
158
182
 
159
- it { subject.must_equal("a") }
183
+ it { subject.must_equal('a') }
160
184
  end
161
185
 
162
186
  context 'when the value is nil' do
163
187
  let(:value) {}
164
188
 
165
- it { subject.must_equal("") }
189
+ it { subject.must_equal('') }
166
190
  end
167
191
  end
168
192
 
@@ -28,10 +28,32 @@ module Vedeu
28
28
  end
29
29
 
30
30
  describe '#initialize' do
31
- it { instance.must_be_instance_of(described) }
32
- it { instance.instance_variable_get('@interfaces').must_equal(interfaces) }
33
- it { instance.instance_variable_get('@colour').must_equal(colour) }
34
- it { instance.instance_variable_get('@style').must_equal(style) }
31
+ subject { instance }
32
+
33
+ it { subject.must_be_instance_of(described) }
34
+ it { subject.instance_variable_get('@interfaces').must_equal(interfaces) }
35
+ it { subject.instance_variable_get('@colour').must_equal(colour) }
36
+ it { subject.instance_variable_get('@style').must_equal(style) }
37
+ end
38
+
39
+ describe '#add' do
40
+ let(:child) { Vedeu::Interface.new }
41
+
42
+ subject { instance.add(child) }
43
+
44
+ it { subject.must_be_instance_of(Vedeu::Interfaces) }
45
+ end
46
+
47
+ describe '#interfaces' do
48
+ subject { instance.interfaces }
49
+
50
+ it { subject.must_be_instance_of(Vedeu::Interfaces) }
51
+ end
52
+
53
+ describe '#parent' do
54
+ subject { instance.parent }
55
+
56
+ it { subject.must_be_instance_of(NilClass) }
35
57
  end
36
58
 
37
59
  end # Composition
@@ -16,11 +16,17 @@ module Vedeu
16
16
  let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
17
17
 
18
18
  describe '#initialize' do
19
- it { instance.must_be_instance_of(Group) }
20
- it { instance.instance_variable_get('@attributes').must_be_instance_of(Hash) }
21
- it { instance.instance_variable_get('@members').must_equal(members) }
22
- it { instance.instance_variable_get('@name').must_equal(_name) }
23
- it { instance.instance_variable_get('@repository').must_equal(Vedeu.groups) }
19
+ subject { instance }
20
+
21
+ it { subject.must_be_instance_of(Group) }
22
+ it {
23
+ subject.instance_variable_get('@attributes').must_be_instance_of(Hash)
24
+ }
25
+ it { subject.instance_variable_get('@members').must_equal(members) }
26
+ it { subject.instance_variable_get('@name').must_equal(_name) }
27
+ it {
28
+ subject.instance_variable_get('@repository').must_equal(Vedeu.groups)
29
+ }
24
30
  end
25
31
 
26
32
  describe '#add' do
@@ -13,6 +13,7 @@ module Vedeu
13
13
  parent: parent,
14
14
  colour: colour,
15
15
  style: style,
16
+ visible: visible,
16
17
  }
17
18
  }
18
19
  let(:_name) { 'hydrogen' }
@@ -20,18 +21,23 @@ module Vedeu
20
21
  let(:parent) {}
21
22
  let(:colour) {}
22
23
  let(:style) {}
24
+ let(:visible) {}
25
+ let(:repository) { Vedeu.interfaces }
23
26
 
24
27
  describe '#initialize' do
25
- it { instance.instance_variable_get('@name').must_equal(_name) }
26
- it { instance.instance_variable_get('@lines').must_equal(lines) }
27
- it { instance.instance_variable_get('@parent').must_equal(parent) }
28
- it { instance.instance_variable_get('@colour').must_equal(colour) }
29
- it { instance.instance_variable_get('@style').must_equal(style) }
30
- it { instance.instance_variable_get('@border').must_equal(nil) }
31
- it { instance.instance_variable_get('@delay').must_equal(0.0) }
32
- it { instance.instance_variable_get('@geometry').must_equal(nil) }
33
- it { instance.instance_variable_get('@group').must_equal('') }
34
- it { instance.instance_variable_get('@repository').must_equal(Vedeu.interfaces) }
28
+ subject { instance }
29
+
30
+ it { subject.instance_variable_get('@name').must_equal(_name) }
31
+ it { subject.instance_variable_get('@lines').must_equal(lines) }
32
+ it { subject.instance_variable_get('@parent').must_equal(parent) }
33
+ it { subject.instance_variable_get('@colour').must_equal(colour) }
34
+ it { subject.instance_variable_get('@style').must_equal(style) }
35
+ it { subject.instance_variable_get('@visible').must_equal(visible) }
36
+ it { subject.instance_variable_get('@border').must_equal(nil) }
37
+ it { subject.instance_variable_get('@delay').must_equal(0.0) }
38
+ it { subject.instance_variable_get('@geometry').must_equal(nil) }
39
+ it { subject.instance_variable_get('@group').must_equal('') }
40
+ it { subject.instance_variable_get('@repository').must_equal(repository) }
35
41
  end
36
42
 
37
43
  describe '#attributes' do
@@ -39,12 +45,13 @@ module Vedeu
39
45
 
40
46
  it { subject.must_be_instance_of(Hash) }
41
47
 
42
- it { subject.must_equal({ colour: nil,
43
- delay: 0.0,
44
- group: '',
45
- name: 'hydrogen',
46
- parent: nil,
47
- style: nil }) }
48
+ it { subject.must_equal(colour: Vedeu::Colour.coerce(colour),
49
+ delay: 0.0,
50
+ group: '',
51
+ name: 'hydrogen',
52
+ parent: nil,
53
+ style: Vedeu::Style.coerce(style),
54
+ visible: true) }
48
55
  end
49
56
 
50
57
  describe '#border?' do
@@ -75,7 +82,13 @@ module Vedeu
75
82
  end
76
83
 
77
84
  context 'when the interface does not have a border' do
78
- before { Vedeu.borders.reset }
85
+ before do
86
+ Vedeu.interface 'hydrogen' do
87
+ end
88
+
89
+ Vedeu.borders.reset
90
+ end
91
+ after { Vedeu.interfaces.reset }
79
92
 
80
93
  it { subject.must_be_instance_of(Vedeu::NullBorder) }
81
94
  end
@@ -85,7 +98,7 @@ module Vedeu
85
98
  subject { instance.clear }
86
99
 
87
100
  it {
88
- Vedeu::Clear.expects(:render).with(instance)
101
+ Vedeu::Clear.expects(:new).with(instance)
89
102
  subject
90
103
  }
91
104
  end
@@ -128,7 +141,7 @@ module Vedeu
128
141
  subject { instance.viewport }
129
142
 
130
143
  it {
131
- Vedeu::Viewport.expects(:render).with(instance)
144
+ Vedeu::Viewport.expects(:new).with(instance)
132
145
  subject
133
146
  }
134
147
  end
@@ -16,25 +16,27 @@ module Vedeu
16
16
  }
17
17
  let(:streams) {
18
18
  [
19
- Stream.new({ value: 'Something interesting ',
20
- parent: streams_parent,
21
- colour: Colour.new({ foreground: '#ffff00' }),
22
- style: Style.new('normal') }),
23
- Stream.new({ value: 'on this line ',
24
- parent: streams_parent,
25
- colour: Colour.new({ foreground: '#00ff00' }),
26
- style: Style.new('normal') }),
27
- Stream.new({ value: 'would be cool, eh?',
28
- parent: streams_parent,
29
- colour: Colour.new({ foreground: '#0000ff' }),
30
- style: Style.new('normal') })
19
+ Stream.new(value: 'Something interesting ',
20
+ parent: streams_parent,
21
+ colour: Colour.new(foreground: '#ffff00'),
22
+ style: Style.new('normal')),
23
+ Stream.new(value: 'on this line ',
24
+ parent: streams_parent,
25
+ colour: Colour.new(foreground: '#00ff00'),
26
+ style: Style.new('normal')),
27
+ Stream.new(value: 'would be cool, eh?',
28
+ parent: streams_parent,
29
+ colour: Colour.new(foreground: '#0000ff'),
30
+ style: Style.new('normal'))
31
31
  ]
32
32
  }
33
33
 
34
- let(:streams_parent) { Line.new({ streams: nil, parent: parent, colour: colour, style: style }) }
34
+ let(:streams_parent) {
35
+ Line.new(streams: nil, parent: parent, colour: colour, style: style)
36
+ }
35
37
 
36
- let(:parent) { Vedeu::Interface.new({ name: 'Vedeu::Line' }) }
37
- let(:colour) { Colour.new({ foreground: '#ff0000', background: '#000000' }) }
38
+ let(:parent) { Vedeu::Interface.new(name: 'Vedeu::Line') }
39
+ let(:colour) { Colour.new(foreground: '#ff0000', background: '#000000') }
38
40
  let(:style) { Style.new('normal') }
39
41
 
40
42
  before do
@@ -139,19 +141,13 @@ module Vedeu
139
141
  "\e[24m\e[22m\e[27m" \
140
142
  "\e[38;2;255;255;0m" \
141
143
  "\e[24m\e[22m\e[27m" \
142
- "Something interesting " \
143
- "\e[24m\e[22m\e[27m" \
144
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
144
+ 'Something interesting ' \
145
145
  "\e[38;2;0;255;0m" \
146
146
  "\e[24m\e[22m\e[27m" \
147
- "on this line " \
148
- "\e[24m\e[22m\e[27m" \
149
- "\e[38;2;255;0;0m" \
150
- "\e[48;2;0;0;0m\e[38;2;0;0;255m" \
151
- "\e[24m\e[22m\e[27m" \
152
- "would be cool, eh?" \
147
+ 'on this line ' \
148
+ "\e[38;2;0;0;255m" \
153
149
  "\e[24m\e[22m\e[27m" \
154
- "\e[38;2;255;0;0m\e[48;2;0;0;0m"
150
+ 'would be cool, eh?'
155
151
  )
156
152
  end
157
153
  end
@@ -38,12 +38,16 @@ module Vedeu
38
38
  end
39
39
 
40
40
  describe '#initialize' do
41
- it { instance.must_be_instance_of(described) }
42
- it { instance.instance_variable_get('@collection').must_equal(collection) }
43
- it { instance.instance_variable_get('@name').must_equal('elements') }
44
- it { instance.instance_variable_get('@current').must_equal(0) }
45
- it { instance.instance_variable_get('@selected').must_equal(nil) }
46
- it { instance.instance_variable_get('@repository').must_equal(Vedeu.menus) }
41
+ subject { instance }
42
+
43
+ it { subject.must_be_instance_of(described) }
44
+ it { subject.instance_variable_get('@collection').must_equal(collection) }
45
+ it { subject.instance_variable_get('@name').must_equal('elements') }
46
+ it { subject.instance_variable_get('@current').must_equal(0) }
47
+ it { subject.instance_variable_get('@selected').must_equal(nil) }
48
+ it do
49
+ subject.instance_variable_get('@repository').must_equal(Vedeu.menus)
50
+ end
47
51
  end
48
52
 
49
53
  describe '#current' do
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Null do
6
+
7
+ let(:described) { Vedeu::Null }
8
+ let(:instance) { described.new }
9
+
10
+ describe 'alias methods' do
11
+ it { instance.must_respond_to(:visible?) }
12
+ end
13
+
14
+ describe '#initialize' do
15
+ it { instance.must_be_instance_of(Vedeu::Null) }
16
+ end
17
+
18
+ describe '#add' do
19
+ subject { instance.add }
20
+
21
+ it { subject.must_be_instance_of(NilClass) }
22
+ end
23
+
24
+ describe '#colour' do
25
+ subject { instance.colour }
26
+
27
+ it { subject.must_be_instance_of(NilClass) }
28
+ end
29
+
30
+ describe '#parent' do
31
+ subject { instance.parent }
32
+
33
+ it { subject.must_be_instance_of(NilClass) }
34
+ end
35
+
36
+ describe '#store' do
37
+ subject { instance.store }
38
+
39
+ it { subject.must_be_instance_of(Vedeu::Null) }
40
+ end
41
+
42
+ describe '#style' do
43
+ subject { instance.style }
44
+
45
+ it { subject.must_be_instance_of(NilClass) }
46
+ end
47
+
48
+ describe '#visible' do
49
+ subject { instance.visible }
50
+
51
+ it { subject.must_be_instance_of(FalseClass) }
52
+ end
53
+
54
+ describe '#visible=' do
55
+ let(:value) { :ignored }
56
+
57
+ subject { instance.visible = (value) }
58
+
59
+ # This should be FalseClass, I'm explicitly returning false in the method.
60
+ it { subject.must_be_instance_of(Symbol) }
61
+ end
62
+
63
+
64
+ end # Null
65
+
66
+ end # Vedeu
@@ -14,18 +14,21 @@ module Vedeu
14
14
  style: style
15
15
  }
16
16
  }
17
- let(:value) { 'Some text' }
18
- let(:parent) {
19
- Line.new({
20
- streams: [],
21
- parent: line_parent,
22
- colour: Colour.new({ background: '#0000ff', foreground: '#ffff00' }),
23
- style: Style.new('normal')
24
- })
17
+ let(:value) { 'Some text' }
18
+ let(:parent) {
19
+ Line.new(streams: [],
20
+ parent: line_parent,
21
+ colour: parent_colour,
22
+ style: Style.new('normal'))
23
+ }
24
+ let(:parent_colour) {
25
+ Colour.new(background: '#0000ff', foreground: '#ffff00')
26
+ }
27
+ let(:colour) {
28
+ Colour.new(background: '#ff0000', foreground: '#000000')
25
29
  }
26
- let(:colour) { Colour.new({ background: '#ff0000', foreground: '#000000' }) }
27
30
  let(:style) { Style.new('normal') }
28
- let(:line_parent) { Vedeu::Interface.new({ name: 'Vedeu::Stream' }) }
31
+ let(:line_parent) { Vedeu::Interface.new(name: 'Vedeu::Stream') }
29
32
 
30
33
  describe '#initialize' do
31
34
  it { instance.must_be_instance_of(described) }
@@ -42,8 +42,7 @@ module Vedeu
42
42
  end
43
43
 
44
44
  describe '#initialize' do
45
- it { instance.must_be_instance_of(described) }
46
- it { instance.instance_variable_get('@attributes').must_equal(
45
+ let(:default_attributes) {
47
46
  {
48
47
  bottom_left: 'm',
49
48
  bottom_right: 'j',
@@ -61,11 +60,19 @@ module Vedeu
61
60
  top_left: 'l',
62
61
  top_right: 'k',
63
62
  vertical: 'x',
64
- })
63
+ }
65
64
  }
65
+ it { instance.must_be_instance_of(described) }
66
+ it do
67
+ instance.instance_variable_get('@attributes').
68
+ must_equal(default_attributes)
69
+ end
66
70
  it { instance.instance_variable_get('@colour').must_equal({}) }
67
71
  it { instance.instance_variable_get('@name').must_equal('borders') }
68
- it { instance.instance_variable_get('@repository').must_be_instance_of(Vedeu::Borders) }
72
+ it do
73
+ instance.instance_variable_get('@repository').
74
+ must_be_instance_of(Vedeu::Borders)
75
+ end
69
76
  it { instance.instance_variable_get('@style').must_equal([]) }
70
77
  end
71
78
 
@@ -294,17 +301,23 @@ module Vedeu
294
301
  describe '#colour=' do
295
302
  let(:value) { { foreground: '#00ff00' } }
296
303
 
297
- subject { instance.colour=(value) }
304
+ subject { instance.colour = (value) }
298
305
 
299
- it { subject; instance.instance_variable_get("@colour").must_be_instance_of(Colour) }
306
+ it do
307
+ subject
308
+ instance.instance_variable_get('@colour').must_be_instance_of(Colour)
309
+ end
300
310
  end
301
311
 
302
312
  describe '#style=' do
303
313
  let(:value) { 'normal' }
304
314
 
305
- subject { instance.style=(value) }
315
+ subject { instance.style = (value) }
306
316
 
307
- it { subject; instance.instance_variable_get("@style").must_be_instance_of(Style) }
317
+ it do
318
+ subject
319
+ instance.instance_variable_get('@style').must_be_instance_of(Style)
320
+ end
308
321
  end
309
322
 
310
323
  describe '#enabled?' do
@@ -418,6 +431,7 @@ module Vedeu
418
431
  let(:bottom) { false }
419
432
  let(:left) { false }
420
433
  let(:right) { false }
434
+ let(:visibility) { true }
421
435
 
422
436
  before do
423
437
  Vedeu.interfaces.reset
@@ -430,6 +444,7 @@ module Vedeu
430
444
  y 1
431
445
  yn 4
432
446
  end
447
+ visible(visibility)
433
448
  end
434
449
  end
435
450
 
@@ -437,6 +452,12 @@ module Vedeu
437
452
 
438
453
  it { subject.must_be_instance_of(Array) }
439
454
 
455
+ context 'when the interface is not visible' do
456
+ let(:visibility) { false }
457
+
458
+ it { subject.must_equal([]) }
459
+ end
460
+
440
461
  context 'when the border is not enabled' do
441
462
  it { subject.must_equal([]) }
442
463
  end
@@ -5,15 +5,22 @@ module Vedeu
5
5
  describe Clear do
6
6
 
7
7
  let(:described) { Vedeu::Clear }
8
- let(:instance) { described.new(interface) }
9
- let(:interface) { Vedeu::Interface.new({ name: 'xenon' }) }
10
- let(:geometry) { Vedeu::Geometry.new({ x: 1, y: 1, xn: 3, yn: 3 })}
8
+ let(:instance) { described.new(interface, options) }
9
+ let(:interface) { Vedeu::Interface.new(name: 'xenon', visible: visible) }
10
+ let(:options) {
11
+ {
12
+
13
+ }
14
+ }
15
+ let(:geometry) { Vedeu::Geometry.new(x: 1, y: 1, xn: 3, yn: 3)}
16
+ let(:visible) { true }
11
17
 
12
18
  before { interface.stubs(:geometry).returns(geometry) }
13
19
 
14
20
  describe '#initialize' do
15
21
  it { instance.must_be_instance_of(Vedeu::Clear) }
16
22
  it { instance.instance_variable_get('@interface').must_equal(interface) }
23
+ it { instance.instance_variable_get('@options').must_equal(options) }
17
24
  end
18
25
 
19
26
  describe 'alias methods' do
@@ -21,7 +28,19 @@ module Vedeu
21
28
  end
22
29
 
23
30
  describe '.clear' do
24
- subject { described.clear(interface) }
31
+ subject { described.clear(interface, options) }
32
+
33
+ context 'when the interface is visible' do
34
+
35
+ end
36
+
37
+ context 'when the interface is not visible' do
38
+ let(:visible) { false }
39
+
40
+ it { subject.must_be_instance_of(Array) }
41
+
42
+ it { subject.must_equal([]) }
43
+ end
25
44
  end
26
45
 
27
46
  describe '#clear' do