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
@@ -14,8 +14,10 @@ module Vedeu
14
14
  }
15
15
 
16
16
  describe '#initialize' do
17
- it { instance.must_be_instance_of(described) }
18
- it { instance.instance_variable_get('@attributes').must_equal(attributes) }
17
+ subject { instance }
18
+
19
+ it { subject.must_be_instance_of(described) }
20
+ it { subject.instance_variable_get('@attributes').must_equal(attributes) }
19
21
  end
20
22
 
21
23
  describe '#background' do
@@ -45,11 +47,25 @@ module Vedeu
45
47
  describe '#background=' do
46
48
  let(:value) { '#000000' }
47
49
 
48
- subject { instance.background=(value) }
50
+ subject { instance.background = (value) }
49
51
 
50
52
  it { subject.must_equal(value) }
51
53
  end
52
54
 
55
+ describe '#eql?' do
56
+ let(:other) { instance }
57
+
58
+ subject { instance.eql?(other) }
59
+
60
+ it { subject.must_equal(true) }
61
+
62
+ context 'when different to other' do
63
+ let(:other) { described.new(background: '#ff0000') }
64
+
65
+ it { subject.must_equal(false) }
66
+ end
67
+ end
68
+
53
69
  describe '#foreground' do
54
70
  subject { instance.foreground }
55
71
 
@@ -77,7 +93,7 @@ module Vedeu
77
93
  describe '#foreground=' do
78
94
  let(:value) { '#ff0000' }
79
95
 
80
- subject { instance.foreground=(value) }
96
+ subject { instance.foreground = (value) }
81
97
 
82
98
  it { subject.must_equal(value) }
83
99
  end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Compressor do
6
+
7
+ let(:described) { Vedeu::Compressor }
8
+ let(:instance) { described.new(output) }
9
+ let(:output) {}
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::Compressor) }
13
+ it { instance.instance_variable_get('@output').must_equal(output) }
14
+ it { instance.instance_variable_get('@colour').must_equal('') }
15
+ it { instance.instance_variable_get('@style').must_equal('') }
16
+ end
17
+
18
+ describe '#render' do
19
+ subject { instance.render }
20
+
21
+ it { subject.must_be_instance_of(String) }
22
+
23
+ context 'when the output is all Vedeu::Char elements' do
24
+
25
+ end
26
+
27
+ context 'when the output is not all Vedeu::Char elements' do
28
+ let(:output) {
29
+ [
30
+ Vedeu::Char.new(value: 'N'),
31
+ 'o',
32
+ Vedeu::Char.new(value: 't'),
33
+ ]
34
+ }
35
+ it 'converts the non-Vedeu::Char elements into String elements' do
36
+ subject.must_equal('Not')
37
+ end
38
+ end
39
+ end
40
+
41
+ end # Compressor
42
+
43
+ end # Vedeu
@@ -17,7 +17,7 @@ module Vedeu
17
17
  }
18
18
  let(:border) {}
19
19
  let(:colour) {}
20
- let(:parent) { Vedeu::Line.new({ colour: parent_colour }) }
20
+ let(:parent) { Vedeu::Line.new(colour: parent_colour) }
21
21
  let(:parent_colour) {}
22
22
  let(:value) {}
23
23
 
@@ -35,39 +35,50 @@ module Vedeu
35
35
  let(:border) { :top_left }
36
36
 
37
37
  context 'when there is a colour' do
38
- let(:colour) { Vedeu::Colour.new({ background: '#220022', foreground: '#aadd00' }) }
38
+ let(:colour) {
39
+ Vedeu::Colour.new(background: '#220022', foreground: '#aadd00')
40
+ }
39
41
 
40
42
  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>"
43
+ "<td style='background:#220022;color:#aadd00;" \
44
+ "border:1px #220022 solid;border-top:1px #aadd00 solid;" \
45
+ "border-left:1px #aadd00 solid;'>&nbsp;</td>"
42
46
  ) }
43
47
  end
44
48
 
45
49
  context 'when there is no colour' do
46
50
  context 'when there is a parent colour' do
47
- let(:parent_colour) { Vedeu::Colour.new({ background: '#002222', foreground: '#dd2200' }) }
51
+ let(:parent_colour) {
52
+ Vedeu::Colour.new(background: '#002222', foreground: '#dd2200')
53
+ }
48
54
 
49
55
  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>"
56
+ "<td style='background:#002222;color:#dd2200;" \
57
+ "border:1px #002222 solid;border-top:1px #dd2200 solid;" \
58
+ "border-left:1px #dd2200 solid;'>&nbsp;</td>"
51
59
  ) }
52
60
  end
53
61
 
54
62
  context 'when there is no parent colour' do
55
63
  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>"
64
+ "<td style='background:#000;color:#222;border:1px #000 solid;" \
65
+ "border-top:1px #222 solid;border-left:1px #222 solid;'>" \
66
+ "&nbsp;</td>"
57
67
  ) }
58
68
  end
59
69
  end
60
70
  end
61
71
 
72
+ grey = '1px #222 solid'
62
73
  {
63
- top_horizontal: "border-top:1px #222 solid;",
64
- left_vertical: "border-left:1px #222 solid;",
65
- right_vertical: "border-right:1px #222 solid;",
66
- bottom_horizontal: "border-bottom:1px #222 solid;",
67
- top_left: "border-top:1px #222 solid;border-left:1px #222 solid;",
68
- top_right: "border-top:1px #222 solid;border-right:1px #222 solid;",
69
- bottom_left: "border-bottom:1px #222 solid;border-left:1px #222 solid;",
70
- bottom_right: "border-bottom:1px #222 solid;border-right:1px #222 solid;",
74
+ top_horizontal: "border-top:#{grey};",
75
+ left_vertical: "border-left:#{grey};",
76
+ right_vertical: "border-right:#{grey};",
77
+ bottom_horizontal: "border-bottom:#{grey};",
78
+ top_left: "border-top:#{grey};border-left:#{grey};",
79
+ top_right: "border-top:#{grey};border-right:#{grey};",
80
+ bottom_left: "border-bottom:#{grey};border-left:#{grey};",
81
+ bottom_right: "border-bottom:#{grey};border-right:#{grey};",
71
82
  horizontal: '',
72
83
  vertical: ''
73
84
  }.each do |border_style, result|
@@ -84,20 +95,21 @@ module Vedeu
84
95
 
85
96
  context 'when there is no border' do
86
97
  context 'when there is no value' do
87
- it { subject.must_equal("<td>&nbsp;</td>") }
98
+ it { subject.must_equal('<td>&nbsp;</td>') }
88
99
  end
89
100
 
90
101
  context 'when the value is empty' do
91
102
  let(:value) { '' }
92
103
 
93
- it { subject.must_equal("<td>&nbsp;</td>") }
104
+ it { subject.must_equal('<td>&nbsp;</td>') }
94
105
  end
95
106
 
96
107
  context 'when there is a value' do
97
108
  let(:value) { 'a' }
98
109
 
99
110
  it { subject.must_equal(
100
- "<td style='background:#000;color:#222;border:1px #000 solid;'>a</td>"
111
+ "<td style='background:#000;color:#222;" \
112
+ "border:1px #000 solid;'>a</td>"
101
113
  ) }
102
114
  end
103
115
  end
@@ -6,7 +6,8 @@ module Vedeu
6
6
 
7
7
  let(:described) { Vedeu::NullBorder }
8
8
  let(:instance) { described.new(interface) }
9
- let(:interface) { stub('Interface', x: 4, y: 6, xn: 10, yn: 12) }
9
+ let(:interface) { stub('Interface', geometry: geometry) }
10
+ let(:geometry) { stub('Geometry', x: 4, y: 6, xn: 10, yn: 12) }
10
11
 
11
12
  describe '#initialize' do
12
13
  it { instance.must_be_instance_of(Vedeu::NullBorder) }
@@ -5,46 +5,36 @@ module Vedeu
5
5
  describe Output do
6
6
 
7
7
  let(:described) { Vedeu::Output }
8
- let(:instance) { described.new(interface) }
9
- let(:interface) {
10
- Vedeu.interface 'flourine' do
11
- geometry do
12
- height 3
13
- width 32
14
- end
15
- end
16
- }
17
- let(:lines) {
18
- [
19
- Line.new({ streams: [Stream.new({ value: 'this is the first' })] }),
20
- Line.new({ streams: [Stream.new({ value: 'this is the second and it is long' })] }),
21
- Line.new({ streams: [Stream.new({ value: 'this is the third, it is even longer and still truncated' })] }),
22
- Line.new({ streams: [Stream.new({ value: 'this should not render' })] }),
23
- ]
24
- }
25
-
26
- before do
27
- interface.lines = lines
28
- IO.console.stubs(:print)
29
- end
8
+ let(:instance) { described.new(content) }
9
+ let(:content) {}
30
10
 
31
11
  describe '#initialize' do
32
12
  it { instance.must_be_instance_of(described) }
33
- it { instance.instance_variable_get('@interface').must_equal(interface) }
13
+ it { instance.instance_variable_get('@content').must_equal(content) }
34
14
  end
35
15
 
36
16
  describe '.render' do
37
- before { Vedeu::FileRenderer.stubs(:render) }
17
+ let(:rendered) { interface.render }
38
18
 
39
- subject { described.render(interface) }
19
+ before do
20
+ Vedeu.renderers.stubs(:render)
21
+ # Vedeu::FileRenderer.stubs(:render)
22
+ # Vedeu::HTMLRenderer.stubs(:to_file)
23
+ # Vedeu::TerminalRenderer.stubs(:render).returns(rendered)
24
+ end
40
25
 
41
- it { subject.must_be_instance_of(Array) }
26
+ subject { described.render(content) }
42
27
 
43
- context 'when a border is defined for the interface' do
44
- end
28
+ # context 'when DRb is enabled' do
29
+ # it { }
30
+ # end
45
31
 
46
- context 'when a border is not defined for the interface' do
47
- end
32
+ # context 'when DRb is not enabled' do
33
+ # it 'sends the rendered interface to the Terminal' do
34
+ # Vedeu::TerminalRenderer.expects(:render)
35
+ # subject.must_be_instance_of(Array)
36
+ # end
37
+ # end
48
38
  end
49
39
 
50
40
  end # Output
@@ -2,9 +2,28 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
+ class ParentPresentationTestClass
6
+ include Presentation
7
+
8
+ def parent
9
+ nil
10
+ end
11
+
12
+ def attributes
13
+ {
14
+ colour: { background: '#330000', foreground: '#00aadd' },
15
+ style: ['bold']
16
+ }
17
+ end
18
+ end
19
+
5
20
  class PresentationTestClass
6
21
  include Presentation
7
22
 
23
+ def parent
24
+ ParentPresentationTestClass.new
25
+ end
26
+
8
27
  def attributes
9
28
  {
10
29
  colour: { background: '#000033', foreground: '#aadd00' },
@@ -44,9 +63,9 @@ module Vedeu
44
63
  end
45
64
 
46
65
  describe '#colour=' do
47
- let(:colour) { Colour.new({ foreground: '#00ff00', background: '#000000' }) }
66
+ let(:colour) { Colour.new(foreground: '#00ff00', background: '#000000') }
48
67
 
49
- subject { receiver.colour=(colour) }
68
+ subject { receiver.colour = (colour) }
50
69
 
51
70
  it { subject.must_be_instance_of(Colour) }
52
71
  end
@@ -60,23 +79,31 @@ module Vedeu
60
79
  describe '#style=' do
61
80
  let(:style) { Style.new('normal') }
62
81
 
63
- subject { receiver.style=(style) }
82
+ subject { receiver.style = (style) }
64
83
 
65
84
  it { subject.must_be_instance_of(Style) }
66
85
  end
67
86
 
68
87
  describe '#to_s' do
69
88
  let(:line) {
70
- Vedeu::Line.new({
71
- streams: [],
72
- parent: Vedeu::Interface.new,
73
- colour: Colour.new({ foreground: '#00ff00', background: '#000000' }),
74
- style: Style.new('normal')
75
- })
89
+ Vedeu::Line.new(streams: [],
90
+ parent: Vedeu::Interface.new,
91
+ colour: line_colour,
92
+ style: Style.new('normal'))
93
+ }
94
+ let(:line_colour) {
95
+ Colour.new(foreground: '#00ff00', background: '#000000')
96
+ }
97
+ let(:stream) {
98
+ Stream.new(value: stream_value,
99
+ parent: line,
100
+ colour: stream_colour,
101
+ style: stream_style)
76
102
  }
77
- let(:stream) { Stream.new({ value: stream_value, parent: line, colour: stream_colour, style: stream_style }) }
78
103
  let(:stream_value) { 'Some text' }
79
- let(:stream_colour) { Colour.new({ foreground: '#ff0000', background: '#000000' }) }
104
+ let(:stream_colour) {
105
+ Colour.new(foreground: '#ff0000', background: '#000000')
106
+ }
80
107
  let(:stream_style) { Style.new(:underline) }
81
108
 
82
109
  it 'returns output' do
@@ -84,13 +111,9 @@ module Vedeu
84
111
  # - stream colour
85
112
  # - stream style
86
113
  # - stream content
87
- # - line style
88
- # - line colour
89
114
  "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
90
115
  "\e[4m" \
91
- "Some text" \
92
- "\e[24m\e[22m\e[27m" \
93
- "\e[38;2;0;255;0m\e[48;2;0;0;0m"
116
+ 'Some text'
94
117
  )
95
118
  end
96
119
  end
@@ -24,7 +24,7 @@ module Vedeu
24
24
  context 'when there are no registered interfaces' do
25
25
  before { Vedeu.focusable.reset }
26
26
 
27
- it { described.by_focus.must_equal(nil) }
27
+ it { subject.must_equal(nil) }
28
28
  end
29
29
 
30
30
  context 'when there are registered interfaces' do
@@ -32,13 +32,24 @@ module Vedeu
32
32
  end
33
33
 
34
34
  describe '.by_group' do
35
+ subject { described.by_group(group_name) }
36
+
35
37
  context 'when there are no registered groups' do
38
+ let(:group_name) { '' }
39
+
36
40
  before { Vedeu.groups.reset }
37
41
 
38
- it { proc { described.by_group('') }.must_raise(ModelNotFound) }
42
+ it { proc { subject }.must_raise(ModelNotFound) }
39
43
  end
40
44
 
41
45
  context 'when there are registered groups' do
46
+ let(:group_name) { 'elements' }
47
+
48
+ before do
49
+ Vedeu::Group.new(name: group_name, members: 'aluminium').store
50
+ end
51
+
52
+ it { Vedeu.buffers.expects(:render).with('aluminium'); subject }
42
53
  end
43
54
  end
44
55
 
@@ -47,14 +58,7 @@ module Vedeu
47
58
 
48
59
  subject { described.by_name(interface_name) }
49
60
 
50
- context 'when the interface or buffer is not found' do
51
- let(:interface_name) { '' }
52
-
53
- it { proc { described.by_name('') }.must_raise(ModelNotFound) }
54
- end
55
-
56
- context 'when the interface or buffer is found' do
57
- end
61
+ it { Vedeu.buffers.expects(:render).with(interface_name); subject }
58
62
  end
59
63
 
60
64
  end # Refresh
@@ -0,0 +1,96 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ class DummyRenderer
6
+ def self.render
7
+ :dummy
8
+ end
9
+ end
10
+
11
+ class FooRenderer
12
+ def self.render
13
+ :foo
14
+ end
15
+ end
16
+
17
+ describe Renderers do
18
+
19
+ let(:described) { Vedeu::Renderers }
20
+
21
+ before { Vedeu::Renderers.reset }
22
+ after { Vedeu::Renderers.reset }
23
+
24
+ describe '.renderers' do
25
+ subject { described.renderers }
26
+
27
+ it { subject.must_be_instance_of(Module) }
28
+
29
+ # context 'API' do
30
+ # before { Vedeu::Renderers.renderer(*renderers) }
31
+
32
+ # subject { Vedeu.renderers.render }
33
+
34
+ # context 'when a single renderer is defined' do
35
+ # let(:renderers) { DummyRenderer }
36
+
37
+ # it { subject.must_equal([:dummy]) }
38
+ # end
39
+
40
+ # context 'when multiple renderers are defined' do
41
+ # let(:renderers) { [DummyRenderer, FooRenderer] }
42
+
43
+ # it { subject.must_equal([:dummy, :foo]) }
44
+ # end
45
+
46
+ # context 'when no renderers are defined' do
47
+ # let(:renderers) {}
48
+
49
+ # it { subject.must_equal([]) }
50
+ # end
51
+ # end
52
+ end
53
+
54
+ describe '.renderer' do
55
+ let(:renderers) {}
56
+
57
+ subject { described.renderer(*renderers) }
58
+
59
+ it { subject.must_be_instance_of(Set) }
60
+
61
+ context 'with a single renderer' do
62
+ let(:renderers) { DummyRenderer }
63
+
64
+ it { subject.size.must_equal(1) }
65
+ end
66
+
67
+ context 'with multiple renderers' do
68
+ let(:renderers) { [DummyRenderer, FooRenderer] }
69
+
70
+ it { subject.size.must_equal(2) }
71
+ end
72
+
73
+ context 'with no renderer' do
74
+ let(:renderers) {}
75
+
76
+ it { subject.size.must_equal(0) }
77
+ end
78
+ end
79
+
80
+ describe '.reset' do
81
+ subject { described.reset }
82
+
83
+ it { subject.must_be_instance_of(Set) }
84
+ it { subject.size.must_equal(0) }
85
+ end
86
+
87
+ describe '.storage' do
88
+ subject { described.storage }
89
+
90
+ it { subject.must_be_instance_of(Set) }
91
+ it { subject.size.must_equal(0) }
92
+ end
93
+
94
+ end # Renderers
95
+
96
+ end # Vedeu
@@ -16,7 +16,7 @@ module Vedeu
16
16
  describe '.render' do
17
17
  subject { described.render }
18
18
 
19
- # it { subject.must_be_instance_of(String) }
19
+ # it { subject.must_be_instance_of(Fixnum) }
20
20
  end
21
21
 
22
22
  end # FileRenderer
@@ -27,7 +27,7 @@ module Vedeu
27
27
  context 'when a path is given' do
28
28
  let(:path) { '/tmp/test_vedeu_html_renderer.html' }
29
29
 
30
- #it { subject.must_equal('') }
30
+ # it { subject.must_equal('') }
31
31
  end
32
32
 
33
33
  context 'when a path is not given' do
@@ -48,20 +48,24 @@ module Vedeu
48
48
  let(:output) {
49
49
  [
50
50
  [
51
- Vedeu::Char.new({ value: 't' }),
52
- Vedeu::Char.new({ value: 'e' }),
53
- Vedeu::Char.new({ value: 's' }),
54
- Vedeu::Char.new({ value: 't' }),
51
+ Vedeu::Char.new(value: 't'),
52
+ Vedeu::Char.new(value: 'e'),
53
+ Vedeu::Char.new(value: 's'),
54
+ Vedeu::Char.new(value: 't'),
55
55
  ]
56
56
  ]
57
57
  }
58
58
 
59
59
  it { subject.must_equal(
60
60
  "<tr>\n" \
61
- "<td style='background:#000;color:#222;border:1px #000 solid;'>t</td>\n" \
62
- "<td style='background:#000;color:#222;border:1px #000 solid;'>e</td>\n" \
63
- "<td style='background:#000;color:#222;border:1px #000 solid;'>s</td>\n" \
64
- "<td style='background:#000;color:#222;border:1px #000 solid;'>t</td>\n" \
61
+ "<td style='background:#000;color:#222;border:1px #000 solid;'>" \
62
+ "t</td>\n" \
63
+ "<td style='background:#000;color:#222;border:1px #000 solid;'>" \
64
+ "e</td>\n" \
65
+ "<td style='background:#000;color:#222;border:1px #000 solid;'>" \
66
+ "s</td>\n" \
67
+ "<td style='background:#000;color:#222;border:1px #000 solid;'>" \
68
+ "t</td>\n" \
65
69
  "</tr>\n") }
66
70
  end
67
71
  end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe JSONRenderer do
6
+
7
+ let(:described) { Vedeu::JSONRenderer }
8
+ let(:instance) { described.new(output) }
9
+ let(:output) {}
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::JSONRenderer) }
13
+ it { instance.instance_variable_get('@output').must_equal(output) }
14
+ end
15
+
16
+ describe '.render' do
17
+ subject { described.render(output) }
18
+
19
+ it { subject.must_be_instance_of(String) }
20
+
21
+ context 'when the output is empty' do
22
+ it { subject.must_equal('') }
23
+ end
24
+
25
+ context 'when the output is not empty' do
26
+ let(:colour) {
27
+ Vedeu::Colour.new(foreground: '#ff0000', background: '#ffffff')
28
+ }
29
+ let(:output) {
30
+ [
31
+ [
32
+ Vedeu::Char.new(value: 'a',
33
+ colour: colour,
34
+ position: Vedeu::Position[5, 3])
35
+ ]
36
+ ]
37
+ }
38
+ it { subject.must_equal(
39
+ "{\"border\":\"\",\"colour\":{\"" \
40
+ "background\":\"\\u001b[48;2;255;255;255m\"," \
41
+ "\"foreground\":\"\\u001b[38;2;255;0;0m\"}," \
42
+ "\"parent\":{\"" \
43
+ "background\":\"\",\"foreground\":\"\",\"style\":\"\"}," \
44
+ "\"position\":{\"y\":5,\"x\":3},\"style\":\"\"," \
45
+ "\"value\":\"a\"}\n\n"
46
+ ) }
47
+ end
48
+ end
49
+
50
+ end # JSONRenderer
51
+
52
+ end # Vedeu
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe NullRenderer do
6
+
7
+ let(:described) { Vedeu::NullRenderer }
8
+
9
+ describe '.render' do
10
+ let(:args) {}
11
+
12
+ subject { described.render(*args) }
13
+
14
+ it { subject.must_be_instance_of(NilClass) }
15
+ end
16
+
17
+ end # NullRenderer
18
+
19
+ end # Vedeu