vedeu 0.2.12 → 0.3.0

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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Guardfile +13 -0
  4. data/README.md +11 -9
  5. data/Rakefile +10 -1
  6. data/bin/vedeu_test +14 -0
  7. data/config/cucumber.yml +8 -0
  8. data/docs/api.md +45 -16
  9. data/docs/events.md +21 -9
  10. data/docs/getting_started.md +16 -0
  11. data/docs/views.md +158 -0
  12. data/examples/borders_app.rb +236 -110
  13. data/examples/colour_support.sh +98 -0
  14. data/examples/colours_app.rb +41 -0
  15. data/examples/configuration_app.rb +11 -6
  16. data/examples/cursor_app.rb +60 -61
  17. data/examples/focus_app.rb +72 -34
  18. data/examples/hello_world.rb +13 -8
  19. data/examples/lines_app.rb +37 -28
  20. data/features/start_stop.feature +27 -0
  21. data/features/support/env.rb +14 -0
  22. data/lib/vedeu/all.rb +29 -0
  23. data/lib/vedeu/api.rb +39 -0
  24. data/lib/vedeu/application.rb +15 -7
  25. data/lib/vedeu/bindings.rb +121 -0
  26. data/lib/vedeu/buffers/all.rb +10 -0
  27. data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
  28. data/lib/vedeu/buffers/display_buffer.rb +118 -0
  29. data/lib/vedeu/configuration/all.rb +6 -0
  30. data/lib/vedeu/configuration/api.rb +3 -1
  31. data/lib/vedeu/configuration/cli.rb +3 -1
  32. data/lib/vedeu/configuration/configuration.rb +23 -2
  33. data/lib/vedeu/cursor/all.rb +23 -0
  34. data/lib/vedeu/cursor/cursor.rb +116 -0
  35. data/lib/vedeu/cursor/move_cursor.rb +137 -0
  36. data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
  37. data/lib/vedeu/dsl/all.rb +28 -0
  38. data/lib/vedeu/dsl/components/all.rb +7 -0
  39. data/lib/vedeu/dsl/components/border.rb +104 -0
  40. data/lib/vedeu/dsl/components/geometry.rb +153 -0
  41. data/lib/vedeu/dsl/components/keymap.rb +93 -0
  42. data/lib/vedeu/dsl/components/menu.rb +82 -0
  43. data/lib/vedeu/dsl/composition.rb +72 -0
  44. data/lib/vedeu/dsl/interface.rb +210 -0
  45. data/lib/vedeu/dsl/line.rb +135 -0
  46. data/lib/vedeu/dsl/shared/all.rb +7 -0
  47. data/lib/vedeu/dsl/shared/colour.rb +85 -0
  48. data/lib/vedeu/dsl/shared/style.rb +38 -0
  49. data/lib/vedeu/dsl/shared/text.rb +102 -0
  50. data/lib/vedeu/dsl/shared/use.rb +47 -0
  51. data/lib/vedeu/dsl/stream.rb +49 -0
  52. data/lib/vedeu/dsl/view.rb +136 -0
  53. data/lib/vedeu/events/all.rb +10 -0
  54. data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
  55. data/lib/vedeu/events/trigger.rb +58 -0
  56. data/lib/vedeu/exceptions.rb +34 -0
  57. data/lib/vedeu/input/all.rb +29 -0
  58. data/lib/vedeu/input/input.rb +26 -0
  59. data/lib/vedeu/{models → input}/key.rb +21 -11
  60. data/lib/vedeu/input/keymap.rb +130 -0
  61. data/lib/vedeu/input/keys.rb +8 -0
  62. data/lib/vedeu/input/mapper.rb +112 -0
  63. data/lib/vedeu/launcher.rb +7 -4
  64. data/lib/vedeu/models/all.rb +12 -0
  65. data/lib/vedeu/models/collection.rb +71 -0
  66. data/lib/vedeu/{repositories → models}/focus.rb +63 -21
  67. data/lib/vedeu/models/geometry.rb +100 -259
  68. data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
  69. data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
  70. data/lib/vedeu/models/model.rb +51 -0
  71. data/lib/vedeu/models/view/all.rb +12 -0
  72. data/lib/vedeu/models/view/char.rb +84 -0
  73. data/lib/vedeu/models/view/chars.rb +8 -0
  74. data/lib/vedeu/models/view/composition.rb +101 -0
  75. data/lib/vedeu/models/view/interface.rb +215 -0
  76. data/lib/vedeu/models/view/interfaces.rb +8 -0
  77. data/lib/vedeu/models/view/line.rb +134 -0
  78. data/lib/vedeu/models/view/lines.rb +8 -0
  79. data/lib/vedeu/models/view/stream.rb +144 -0
  80. data/lib/vedeu/models/view/streams.rb +8 -0
  81. data/lib/vedeu/output/all.rb +8 -0
  82. data/lib/vedeu/output/border.rb +387 -0
  83. data/lib/vedeu/output/compositor.rb +41 -30
  84. data/lib/vedeu/output/output.rb +6 -13
  85. data/lib/vedeu/output/viewport.rb +78 -94
  86. data/lib/vedeu/output/writer.rb +29 -0
  87. data/lib/vedeu/presentation/all.rb +9 -0
  88. data/lib/vedeu/{colours → presentation}/background.rb +1 -9
  89. data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
  90. data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
  91. data/lib/vedeu/presentation/presentation.rb +91 -0
  92. data/lib/vedeu/presentation/style.rb +47 -0
  93. data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
  94. data/lib/vedeu/repositories/all.rb +5 -0
  95. data/lib/vedeu/repositories/menus.rb +5 -42
  96. data/lib/vedeu/{support → repositories}/repository.rb +78 -41
  97. data/lib/vedeu/support/all.rb +22 -0
  98. data/lib/vedeu/support/bounding_area.rb +2 -1
  99. data/lib/vedeu/support/coercions.rb +18 -1
  100. data/lib/vedeu/support/console.rb +73 -0
  101. data/lib/vedeu/support/content_geometry.rb +69 -0
  102. data/lib/vedeu/support/coordinate.rb +246 -0
  103. data/lib/vedeu/support/esc.rb +29 -2
  104. data/lib/vedeu/support/log.rb +36 -2
  105. data/lib/vedeu/support/node.rb +61 -0
  106. data/lib/vedeu/support/position.rb +28 -13
  107. data/lib/vedeu/support/position_validator.rb +79 -0
  108. data/lib/vedeu/support/read.rb +65 -0
  109. data/lib/vedeu/support/refresh.rb +8 -32
  110. data/lib/vedeu/support/terminal.rb +34 -4
  111. data/lib/vedeu/support/text.rb +104 -0
  112. data/lib/vedeu/support/trace.rb +11 -23
  113. data/lib/vedeu/support/visible.rb +75 -0
  114. data/lib/vedeu/support/write.rb +85 -0
  115. data/lib/vedeu/traps.rb +18 -0
  116. data/lib/vedeu.rb +41 -101
  117. data/test/integration/dsl/compositions_test.rb +27 -0
  118. data/test/integration/dsl/interfaces_test.rb +261 -0
  119. data/test/integration/dsl/keymaps_test.rb +42 -0
  120. data/test/integration/dsl/lines_test.rb +146 -0
  121. data/test/integration/dsl/menus_test.rb +59 -0
  122. data/test/integration/dsl/streams_test.rb +129 -0
  123. data/test/integration/dsl/views_test.rb +63 -0
  124. data/test/lib/vedeu/api_test.rb +163 -0
  125. data/test/lib/vedeu/application_test.rb +19 -10
  126. data/test/lib/vedeu/bindings_test.rb +54 -0
  127. data/test/lib/vedeu/buffers/all_test.rb +11 -0
  128. data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
  129. data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
  130. data/test/lib/vedeu/configuration/api_test.rb +42 -58
  131. data/test/lib/vedeu/configuration/cli_test.rb +4 -4
  132. data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
  133. data/test/lib/vedeu/cursor/all_test.rb +33 -0
  134. data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
  135. data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
  136. data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
  137. data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
  138. data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
  139. data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
  140. data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
  141. data/test/lib/vedeu/dsl/composition_test.rb +41 -0
  142. data/test/lib/vedeu/dsl/interface_test.rb +470 -0
  143. data/test/lib/vedeu/dsl/line_test.rb +60 -0
  144. data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
  145. data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
  146. data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
  147. data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
  148. data/test/lib/vedeu/dsl/stream_test.rb +26 -0
  149. data/test/lib/vedeu/dsl/view_test.rb +73 -0
  150. data/test/lib/vedeu/events/all_test.rb +11 -0
  151. data/test/lib/vedeu/events/event_test.rb +109 -0
  152. data/test/lib/vedeu/events/trigger_test.rb +60 -0
  153. data/test/lib/vedeu/input/all_test.rb +11 -0
  154. data/test/lib/vedeu/input/input_test.rb +7 -3
  155. data/test/lib/vedeu/input/key_test.rb +72 -0
  156. data/test/lib/vedeu/input/keymap_test.rb +89 -0
  157. data/test/lib/vedeu/input/mapper_test.rb +94 -0
  158. data/test/lib/vedeu/launcher_test.rb +19 -20
  159. data/test/lib/vedeu/models/collection_test.rb +114 -0
  160. data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
  161. data/test/lib/vedeu/models/geometry_test.rb +35 -39
  162. data/test/lib/vedeu/models/group_test.rb +100 -0
  163. data/test/lib/vedeu/models/menu_test.rb +288 -0
  164. data/test/lib/vedeu/models/model_test.rb +31 -0
  165. data/test/lib/vedeu/models/view/char_test.rb +166 -0
  166. data/test/lib/vedeu/models/view/chars_test.rb +18 -0
  167. data/test/lib/vedeu/models/view/composition_test.rb +41 -0
  168. data/test/lib/vedeu/models/view/interface_test.rb +128 -0
  169. data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
  170. data/test/lib/vedeu/models/view/line_test.rb +214 -0
  171. data/test/lib/vedeu/models/view/lines_test.rb +18 -0
  172. data/test/lib/vedeu/models/view/stream_test.rb +106 -0
  173. data/test/lib/vedeu/models/view/streams_test.rb +18 -0
  174. data/test/lib/vedeu/output/border_test.rb +357 -0
  175. data/test/lib/vedeu/output/compositor_test.rb +61 -15
  176. data/test/lib/vedeu/output/output_test.rb +25 -84
  177. data/test/lib/vedeu/output/viewport_test.rb +171 -45
  178. data/test/lib/vedeu/output/writer_test.rb +45 -0
  179. data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
  180. data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
  181. data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
  182. data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
  183. data/test/lib/vedeu/presentation/style_test.rb +69 -0
  184. data/test/lib/vedeu/presentation/translator_test.rb +63 -0
  185. data/test/lib/vedeu/repositories/all_test.rb +7 -0
  186. data/test/lib/vedeu/repositories/menus_test.rb +3 -156
  187. data/test/lib/vedeu/repositories/repository_test.rb +271 -0
  188. data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
  189. data/test/lib/vedeu/support/coercions_test.rb +39 -0
  190. data/test/lib/vedeu/support/common_test.rb +31 -16
  191. data/test/lib/vedeu/support/console_test.rb +85 -0
  192. data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
  193. data/test/lib/vedeu/support/coordinate_test.rb +190 -0
  194. data/test/lib/vedeu/support/esc_test.rb +18 -0
  195. data/test/lib/vedeu/support/grid_test.rb +15 -10
  196. data/test/lib/vedeu/support/log_test.rb +3 -0
  197. data/test/lib/vedeu/support/position_test.rb +22 -2
  198. data/test/lib/vedeu/support/position_validator_test.rb +11 -0
  199. data/test/lib/vedeu/support/read_test.rb +88 -0
  200. data/test/lib/vedeu/support/refresh_test.rb +44 -12
  201. data/test/lib/vedeu/support/sentence_test.rb +6 -4
  202. data/test/lib/vedeu/support/terminal_test.rb +81 -70
  203. data/test/lib/vedeu/support/text_test.rb +93 -0
  204. data/test/lib/vedeu/support/trace_test.rb +21 -9
  205. data/test/lib/vedeu/support/visible_test.rb +148 -0
  206. data/test/lib/vedeu/support/write_test.rb +136 -0
  207. data/test/lib/vedeu/traps_test.rb +11 -0
  208. data/test/lib/vedeu_test.rb +2 -0
  209. data/test/support/helpers/all.rb +7 -0
  210. data/test/support/helpers/dsl_model_test_class.rb +25 -0
  211. data/test/support/{test_classes → helpers}/helpers.rb +0 -2
  212. data/test/support/helpers/misc.rb +15 -0
  213. data/test/support/helpers/model_test_class.rb +34 -0
  214. data/test/support/{test_classes → helpers}/presentation.rb +0 -0
  215. data/test/support/{test_classes → helpers}/repositories.rb +3 -3
  216. data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
  217. data/test/test_helper.rb +19 -22
  218. data/vedeu.gemspec +11 -6
  219. metadata +322 -181
  220. data/lib/vedeu/api/api.rb +0 -239
  221. data/lib/vedeu/api/composition.rb +0 -38
  222. data/lib/vedeu/api/defined.rb +0 -52
  223. data/lib/vedeu/api/helpers.rb +0 -161
  224. data/lib/vedeu/api/interface.rb +0 -287
  225. data/lib/vedeu/api/keymap.rb +0 -75
  226. data/lib/vedeu/api/line.rb +0 -107
  227. data/lib/vedeu/api/menu.rb +0 -111
  228. data/lib/vedeu/api/stream.rb +0 -96
  229. data/lib/vedeu/models/border.rb +0 -238
  230. data/lib/vedeu/models/char.rb +0 -43
  231. data/lib/vedeu/models/composition.rb +0 -72
  232. data/lib/vedeu/models/line.rb +0 -100
  233. data/lib/vedeu/models/stream.rb +0 -130
  234. data/lib/vedeu/models/style.rb +0 -52
  235. data/lib/vedeu/repositories/buffers.rb +0 -52
  236. data/lib/vedeu/repositories/cursors.rb +0 -64
  237. data/lib/vedeu/repositories/events.rb +0 -147
  238. data/lib/vedeu/repositories/groups.rb +0 -47
  239. data/lib/vedeu/repositories/interfaces.rb +0 -78
  240. data/lib/vedeu/repositories/keymaps.rb +0 -196
  241. data/lib/vedeu/repositories/models/cursor.rb +0 -209
  242. data/lib/vedeu/repositories/models/interface.rb +0 -163
  243. data/lib/vedeu/repositories/models/keymap.rb +0 -111
  244. data/lib/vedeu/repositories/models/offset.rb +0 -91
  245. data/lib/vedeu/repositories/offsets.rb +0 -69
  246. data/lib/vedeu/support/exceptions.rb +0 -34
  247. data/lib/vedeu/support/keymap_validator.rb +0 -100
  248. data/lib/vedeu/support/model.rb +0 -14
  249. data/lib/vedeu/support/presentation.rb +0 -86
  250. data/lib/vedeu/support/registrar.rb +0 -53
  251. data/test/integration/api/api_test.rb +0 -97
  252. data/test/integration/api_dsl/dsl_api_test.rb +0 -4
  253. data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
  254. data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
  255. data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
  256. data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
  257. data/test/integration/api_dsl/dsl_keymap.rb +0 -4
  258. data/test/integration/api_dsl/dsl_line_test.rb +0 -4
  259. data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
  260. data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
  261. data/test/integration/cursors_test.rb +0 -9
  262. data/test/integration/defining_interfaces_test.rb +0 -26
  263. data/test/integration/run_once_test.rb +0 -26
  264. data/test/integration/views/basic_view_test.rb +0 -807
  265. data/test/lib/vedeu/api/api_test.rb +0 -204
  266. data/test/lib/vedeu/api/composition_test.rb +0 -31
  267. data/test/lib/vedeu/api/defined_test.rb +0 -79
  268. data/test/lib/vedeu/api/helpers_test.rb +0 -111
  269. data/test/lib/vedeu/api/interface_test.rb +0 -410
  270. data/test/lib/vedeu/api/keymap_test.rb +0 -65
  271. data/test/lib/vedeu/api/line_test.rb +0 -83
  272. data/test/lib/vedeu/api/menu_test.rb +0 -85
  273. data/test/lib/vedeu/api/stream_test.rb +0 -59
  274. data/test/lib/vedeu/colours/translator_test.rb +0 -22
  275. data/test/lib/vedeu/models/border_test.rb +0 -197
  276. data/test/lib/vedeu/models/char_test.rb +0 -52
  277. data/test/lib/vedeu/models/composition_test.rb +0 -45
  278. data/test/lib/vedeu/models/key_test.rb +0 -43
  279. data/test/lib/vedeu/models/line_test.rb +0 -123
  280. data/test/lib/vedeu/models/stream_test.rb +0 -233
  281. data/test/lib/vedeu/models/style_test.rb +0 -59
  282. data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
  283. data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
  284. data/test/lib/vedeu/repositories/events_test.rb +0 -57
  285. data/test/lib/vedeu/repositories/groups_test.rb +0 -28
  286. data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
  287. data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
  288. data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
  289. data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
  290. data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
  291. data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
  292. data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
  293. data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
  294. data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
  295. data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
  296. data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
  297. data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
  298. data/test/lib/vedeu/support/model_test.rb +0 -23
  299. data/test/lib/vedeu/support/presentation_test.rb +0 -53
  300. data/test/lib/vedeu/support/registrar_test.rb +0 -94
  301. data/test/lib/vedeu/support/repository_test.rb +0 -208
  302. data/test/support/test_classes/all.rb +0 -5
  303. data/test/support/test_classes/coercions.rb +0 -16
  304. data/test/support/test_classes/model.rb +0 -23
  305. data/test/support/test_modules/all.rb +0 -1
@@ -0,0 +1,115 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Menu do
8
+
9
+ let(:described) { Vedeu::DSL::Menu }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Menu.new(collection, menu_name) }
12
+ let(:collection) { [:sodium, :magnesium, :aluminium, :silicon] }
13
+ let(:menu_name) { 'elements' }
14
+
15
+ # describe '.define' do
16
+ # before { Menus.reset }
17
+
18
+ # context 'when a block was not given' do
19
+ # it { proc { Vedeu.menu }.must_raise(InvalidSyntax) }
20
+ # end
21
+
22
+ # context 'when no name was specified' do
23
+ # it { proc { Vedeu.menu { } }.must_raise(MissingRequired) }
24
+ # end
25
+
26
+ # it 'adds the menu to the menus repository' do
27
+ # Vedeu.menu do
28
+ # name menu_name
29
+ # items menu_items
30
+ # end
31
+
32
+ # Vedeu::Menus.registered.must_equal(['elements'])
33
+ # end
34
+ # end
35
+
36
+ describe '#initialize' do
37
+ subject { instance }
38
+
39
+ it { subject.must_be_instance_of(Vedeu::DSL::Menu) }
40
+ it { subject.instance_variable_get('@model').must_equal(model) }
41
+ end
42
+
43
+ # describe '.define' do
44
+ # before { Menus.reset }
45
+
46
+ # context 'when a block was not given' do
47
+ # it { proc { Menu.define }.must_raise(InvalidSyntax) }
48
+ # end
49
+
50
+ # context 'when no name was specified for the menu' do
51
+ # it { proc { Menu.define { } }.must_raise(MissingRequired) }
52
+ # end
53
+
54
+ # it 'adds the menu to the menus repository' do
55
+ # Menu.define do
56
+ # name 'elements'
57
+ # items [:sodium, :magnesium, :aluminium, :silicon]
58
+ # end
59
+
60
+ # Vedeu::Menus.registered.must_equal(['elements'])
61
+ # end
62
+
63
+ # it 'returns the API::Menu instance' do
64
+ # Menu.define do
65
+ # name 'elements'
66
+ # end.must_be_instance_of(Vedeu::Menu)
67
+ # end
68
+ # end
69
+
70
+ describe '#item' do
71
+ let(:value) { :platinum }
72
+
73
+ subject { instance.item(value) }
74
+
75
+ context 'when items are provided' do
76
+ it { subject.must_equal([:sodium,
77
+ :magnesium,
78
+ :aluminium,
79
+ :silicon,
80
+ :platinum]) }
81
+ end
82
+ end
83
+
84
+ describe '#items' do
85
+ let(:value) { [] }
86
+
87
+ subject { instance.items(value) }
88
+
89
+ context 'when no items are provided' do
90
+ it { subject.must_equal([]) }
91
+ end
92
+
93
+ context 'when items are provided' do
94
+ let(:value) { [:gold, :silver, :tin] }
95
+
96
+ it { subject.must_equal(value)}
97
+ end
98
+ end
99
+
100
+ describe '#name' do
101
+ let(:value) { 'metals' }
102
+
103
+ subject { instance.name(value) }
104
+
105
+ it 'returns the name of the menu' do
106
+ subject
107
+ model.name.must_equal('metals')
108
+ end
109
+ end
110
+
111
+ end # Menu
112
+
113
+ end # DSL
114
+
115
+ end # Vedeu
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Composition do
8
+
9
+ let(:described) { Vedeu::DSL::Composition }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Composition.new }
12
+ let(:client) {}
13
+
14
+ describe '#initialize' do
15
+ subject { instance }
16
+
17
+ it { subject.must_be_instance_of(Vedeu::DSL::Composition) }
18
+ it { subject.instance_variable_get('@model').must_equal(model) }
19
+ it { subject.instance_variable_get('@client').must_equal(client) }
20
+ end
21
+
22
+ describe '#view' do
23
+ subject {
24
+ instance.view('dysprosium') do
25
+ # ...
26
+ end
27
+ }
28
+
29
+ it { subject.must_be_instance_of(Vedeu::Interfaces) }
30
+ it { subject.first.must_be_instance_of(Vedeu::Interface) }
31
+
32
+ context 'when the block is not given' do
33
+ it { proc { instance.view }.must_raise(InvalidSyntax) }
34
+ end
35
+ end
36
+
37
+ end # Composition
38
+
39
+ end # DSL
40
+
41
+ end # Vedeu
@@ -0,0 +1,470 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Interface do
8
+
9
+ let(:described) { Vedeu::DSL::Interface }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) {
12
+ Vedeu::Interface.build do
13
+ name 'actinium'
14
+ end
15
+ }
16
+ let(:client) {}
17
+
18
+ before { Vedeu.interfaces.reset }
19
+
20
+ describe '#initialize' do
21
+ subject { instance }
22
+
23
+ it { subject.must_be_instance_of(Vedeu::DSL::Interface) }
24
+ it { subject.instance_variable_get('@model').must_equal(model) }
25
+ it { subject.instance_variable_get('@client').must_equal(client) }
26
+ end
27
+
28
+ describe '#border' do
29
+ subject {
30
+ instance.border do
31
+ # ...
32
+ end
33
+ }
34
+
35
+ it { subject.must_be_instance_of(Vedeu::Border) }
36
+
37
+ context 'when the block is not given' do
38
+ subject { instance.border }
39
+
40
+ it { proc { subject }.must_raise(InvalidSyntax) }
41
+ end
42
+ end
43
+
44
+ # describe '#define' do
45
+ # interface = Interface.new({ name: 'widget' })
46
+
47
+ # it 'creates and stores a new interface' do
48
+ # interface.define.must_be_instance_of(API::Interface)
49
+ # end
50
+
51
+ # it 'allows the setting of colours' do
52
+ # Interface.build do
53
+ # colour foreground: '#aadd00', background: '#222222'
54
+ # end.must_equal(
55
+ # {
56
+ # border: {},
57
+ # colour: {
58
+ # foreground: '#aadd00',
59
+ # background: '#222222'
60
+ # },
61
+ # cursor: :hide,
62
+ # delay: 0.0,
63
+ # geometry: {},
64
+ # group: '',
65
+ # lines: [],
66
+ # name: '',
67
+ # parent: nil,
68
+ # style: '',
69
+ # }
70
+ # )
71
+ # end
72
+
73
+ # it 'allows the setting of styles' do
74
+ # Interface.build do
75
+ # style 'underline'
76
+ # end.must_equal(
77
+ # {
78
+ # border: {},
79
+ # colour: {},
80
+ # cursor: :hide,
81
+ # delay: 0.0,
82
+ # geometry: {},
83
+ # group: '',
84
+ # lines: [],
85
+ # name: '',
86
+ # parent: nil,
87
+ # style: "underline",
88
+ # }
89
+ # )
90
+ # end
91
+
92
+ # it 'allows the use of other interfaces for attributes like geometry' do
93
+ # IO.console.stub(:winsize, [25, 40]) do
94
+ # interface = Vedeu.interface 'my_interface' do
95
+ # geometry do
96
+ # x 5
97
+ # y 5
98
+ # width 5
99
+ # height 5
100
+ # end
101
+ # end
102
+ # Interface.build do
103
+ # name 'my_other_interface'
104
+ # y use('my_interface').south
105
+ # end.must_equal({
106
+ # border: {},
107
+ # colour: {},
108
+ # cursor: :hide,
109
+ # delay: 0.0,
110
+ # geometry: {
111
+ # y: 11
112
+ # },
113
+ # group: '',
114
+ # lines: [],
115
+ # name: "my_other_interface",
116
+ # parent: nil,
117
+ # style: '',
118
+ # })
119
+ # end
120
+ # end
121
+
122
+ # it 'allows the setting of a delay for events triggered for this ' \
123
+ # 'interface' do
124
+ # Interface.build do
125
+ # delay 1.0
126
+ # end.must_equal(
127
+ # {
128
+ # border: {},
129
+ # colour: {},
130
+ # cursor: :hide,
131
+ # delay: 1.0,
132
+ # geometry: {},
133
+ # group: '',
134
+ # lines: [],
135
+ # name: '',
136
+ # parent: nil,
137
+ # style: '',
138
+ # })
139
+ # end
140
+
141
+ # it 'allows the interface to be part of a group- useful for creating ' \
142
+ # 'separate views' do
143
+ # Interface.build do
144
+ # group 'my_group'
145
+ # end.must_equal(
146
+ # {
147
+ # border: {},
148
+ # colour: {},
149
+ # cursor: :hide,
150
+ # delay: 0.0,
151
+ # geometry: {},
152
+ # group: "my_group",
153
+ # lines: [],
154
+ # name: '',
155
+ # parent: nil,
156
+ # style: '',
157
+ # }
158
+ # )
159
+ # end
160
+ # end
161
+
162
+ # describe '#centred' do
163
+ # it 'returns false if the value is false or nil' do
164
+ # DSL::Interface.new.centred(false).must_equal(false)
165
+ # end
166
+
167
+ # it 'returns true' do
168
+ # DSL::Interface.new.centred.must_equal(true)
169
+ # end
170
+ # end
171
+
172
+ describe '#cursor' do
173
+ let(:value) {}
174
+
175
+ before { Vedeu.cursors.reset }
176
+
177
+ subject { instance.cursor(value) }
178
+
179
+ it {
180
+ subject
181
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(false)
182
+ }
183
+
184
+ context 'when the value is false' do
185
+ let(:value) { false }
186
+
187
+ it {
188
+ subject
189
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(false)
190
+ }
191
+ end
192
+
193
+ context 'when the value is :hide' do
194
+ let(:value) { :hide }
195
+
196
+ it {
197
+ subject
198
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(false)
199
+ }
200
+ end
201
+
202
+ context 'when the value is :show' do
203
+ let(:value) { :show }
204
+
205
+ it {
206
+ subject
207
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(true)
208
+ }
209
+ end
210
+
211
+ context 'when the value is true' do
212
+ let(:value) { true }
213
+
214
+ it {
215
+ subject
216
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(true)
217
+ }
218
+ end
219
+
220
+ context 'when the value is :yes' do
221
+ let(:value) { :yes }
222
+
223
+ it {
224
+ subject
225
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(true)
226
+ }
227
+ end
228
+ end
229
+
230
+ describe '#cursor!' do
231
+ subject { instance.cursor! }
232
+
233
+ it {
234
+ subject
235
+ Vedeu.cursors.find('actinium').state.visible?.must_equal(true)
236
+ }
237
+ end
238
+
239
+ describe '#delay' do
240
+ it 'sets the delay attribute' do
241
+ Vedeu.interface 'cobalt' do
242
+ delay 0.25
243
+ end
244
+
245
+ Vedeu.use('cobalt').delay.must_equal(0.25)
246
+ end
247
+ end
248
+
249
+ describe '#focus!' do
250
+ context 'when a single call is made' do
251
+ before do
252
+ Vedeu::Focus.reset
253
+ Vedeu.interface('curium') { focus! }
254
+ end
255
+
256
+ it 'sets the interface as current' do
257
+ Vedeu.focus.must_equal('curium')
258
+ end
259
+ end
260
+
261
+ # context 'when multiple calls are made' do
262
+ # before do
263
+ # Vedeu::Focus.reset
264
+ # Vedeu.interface('curium') { focus! }
265
+ # Vedeu.interface('iodine') {}
266
+ # Vedeu.interface('dysprosium') { focus! }
267
+ # end
268
+
269
+ # it 'the last call will set that interface to be current' do
270
+ # Vedeu.focus.must_equal('dysprosium')
271
+ # end
272
+ # end
273
+
274
+ context 'when no calls are made' do
275
+ before do
276
+ Vedeu::Focus.reset
277
+ Vedeu.interface('curium') {}
278
+ Vedeu.interface('dysprosium') {}
279
+ end
280
+
281
+ it 'the first interface defined will be current' do
282
+ Vedeu.focus.must_equal('curium')
283
+ end
284
+ end
285
+ end
286
+
287
+ describe '#geometry' do
288
+ subject {
289
+ instance.geometry do
290
+ # ...
291
+ end
292
+ }
293
+
294
+ it { subject.must_be_instance_of(Vedeu::Geometry) }
295
+
296
+ context 'when the require block is not provided' do
297
+ subject { instance.geometry }
298
+
299
+ it { proc { subject }.must_raise(InvalidSyntax) }
300
+ end
301
+ end
302
+
303
+ describe '#group' do
304
+ subject { instance.group('elements') }
305
+
306
+ it { subject.must_be_instance_of(String) }
307
+ end
308
+
309
+ describe '#keys' do
310
+ subject {
311
+ instance.keys do
312
+ # ...
313
+ end
314
+ }
315
+
316
+ it { subject.must_be_instance_of(Vedeu::Keymap) }
317
+
318
+ context 'when the required block is not provided' do
319
+ subject { instance.keys }
320
+
321
+ it { proc { subject }.must_raise(InvalidSyntax) }
322
+ end
323
+
324
+ # before do
325
+ # Keymaps.reset
326
+
327
+ # Vedeu.interface 'iron' do
328
+ # keys do
329
+ # key('k') { :k_pressed }
330
+ # end
331
+ # end
332
+ # end
333
+
334
+ # it 'defines a keymap for the interface' do
335
+ # Keymaps.interface_key?('k').must_equal(true)
336
+ # end
337
+
338
+ # it 'defines a keymap for the interface' do
339
+ # Keymaps.interface_keys('iron').must_equal(['k'])
340
+ # end
341
+
342
+ # context 'when the block is not given' do
343
+ # it { proc { Vedeu.interface('iron') { keys } }.must_raise(InvalidSyntax) }
344
+ # end
345
+ end
346
+
347
+ describe '#lines' do
348
+ subject {
349
+ instance.lines do
350
+ # ...
351
+ end
352
+ }
353
+
354
+ it { subject.must_be_instance_of(Vedeu::Lines) }
355
+
356
+ context 'when the required block is not provided' do
357
+ subject { instance.lines }
358
+
359
+ it { proc { subject }.must_raise(InvalidSyntax) }
360
+ end
361
+
362
+ # it 'adds a blank line with no arguments' do
363
+ # interface = Vedeu.interface 'carbon' do
364
+ # line
365
+ # end
366
+ # interface.must_be_instance_of(API::Interface)
367
+ # interface.attributes.must_equal(
368
+ # {
369
+ # border: {},
370
+ # colour: {},
371
+ # cursor: :hide,
372
+ # delay: 0.0,
373
+ # geometry: {},
374
+ # group: '',
375
+ # lines: [
376
+ # {
377
+ # colour: {},
378
+ # streams: {
379
+ # text: ''
380
+ # },
381
+ # style: [],
382
+ # }
383
+ # ],
384
+ # name: 'carbon',
385
+ # parent: nil,
386
+ # style: '',
387
+ # }
388
+ # )
389
+ # end
390
+
391
+ # it 'adds a line directly with a value and no block' do
392
+ # interface = Vedeu.interface 'carbon' do
393
+ # line 'This is some text...'
394
+ # end
395
+ # interface.must_be_instance_of(API::Interface)
396
+ # interface.attributes.must_equal(
397
+ # {
398
+ # border: {},
399
+ # colour: {},
400
+ # cursor: :hide,
401
+ # delay: 0.0,
402
+ # geometry: {},
403
+ # group: '',
404
+ # lines: [
405
+ # {
406
+ # colour: {},
407
+ # parent: composition,
408
+ # streams: {
409
+ # text: "This is some text..."
410
+ # },
411
+ # style: [],
412
+ # }
413
+ # ],
414
+ # name: 'carbon',
415
+ # parent: nil,
416
+ # style: '',
417
+ # }
418
+ # )
419
+ # end
420
+
421
+ # it 'allows the addition of more attributes with a block' do
422
+ # interface = Vedeu.interface 'silicon' do
423
+ # lines do
424
+ # text 'This is different text...'
425
+ # end
426
+ # end
427
+ # interface.must_be_instance_of(API::Interface)
428
+ # interface.attributes.must_equal(
429
+ # {
430
+ # border: {},
431
+ # colour: {},
432
+ # cursor: :hide,
433
+ # delay: 0.0,
434
+ # geometry: {},
435
+ # group: '',
436
+ # lines: [
437
+ # {
438
+ # colour: {},
439
+ # parent: composition,
440
+ # streams: [
441
+ # {
442
+ # text: "This is different text..."
443
+ # }
444
+ # ],
445
+ # style: [],
446
+ # }
447
+ # ],
448
+ # name: "silicon",
449
+ # parent: nil,
450
+ # style: '',
451
+ # }
452
+ # )
453
+ # end
454
+ end
455
+
456
+ describe '#name' do
457
+ it 'sets the name attribute' do
458
+ Vedeu.interface do
459
+ name 'nickel'
460
+ end
461
+
462
+ Vedeu.use('nickel').name.must_equal('nickel')
463
+ end
464
+ end
465
+
466
+ end # Interface
467
+
468
+ end # DSL
469
+
470
+ end # Vedeu
@@ -0,0 +1,60 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Line do
8
+
9
+ let(:described) { Vedeu::DSL::Line }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Line.new(streams, parent, colour, style) }
12
+ let(:client) {}
13
+ let(:streams) { [] }
14
+ let(:parent) { Vedeu::Interface.new }
15
+ let(:colour) { Vedeu::Colour.new }
16
+ let(:style) { Vedeu::Style.new }
17
+
18
+ describe '#initialize' do
19
+ subject { instance }
20
+
21
+ it { subject.must_be_instance_of(Vedeu::DSL::Line) }
22
+ it { subject.instance_variable_get('@model').must_equal(model) }
23
+ it { subject.instance_variable_get('@client').must_equal(client) }
24
+ end
25
+
26
+ describe '#line' do
27
+ let(:value) { '' }
28
+
29
+ subject {
30
+ instance.line do
31
+ # ...
32
+ end
33
+ }
34
+
35
+ it { subject.must_be_instance_of(Vedeu::Lines) }
36
+ it { subject.first.must_be_instance_of(Vedeu::Line) }
37
+ end
38
+
39
+ describe '#streams' do
40
+ context 'when the block is given' do
41
+ subject {
42
+ instance.streams do
43
+ # ...
44
+ end
45
+ }
46
+
47
+ it { subject.must_be_instance_of(Vedeu::Streams) }
48
+ it { subject.first.must_be_instance_of(Vedeu::Stream) }
49
+ end
50
+
51
+ context 'when the block is not given' do
52
+ it { proc { instance.streams }.must_raise(InvalidSyntax) }
53
+ end
54
+ end
55
+
56
+ end # Line
57
+
58
+ end # DSL
59
+
60
+ end # Vedeu