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
@@ -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