vedeu 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
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