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,414 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Border do
8
+
9
+ let(:described) { Vedeu::DSL::Border }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Border.new(interface, attributes) }
12
+ let(:client) {}
13
+ let(:interface) { mock('Interface') }
14
+ let(:attributes) { {} }
15
+ let(:boolean) { true }
16
+
17
+ before do
18
+ Vedeu.interfaces.reset
19
+ Vedeu.interface 'borders' do
20
+ geometry do
21
+ height 3
22
+ width 3
23
+ end
24
+ lines do
25
+ line ''
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#initialize' do
31
+ subject { instance }
32
+
33
+ it { subject.must_be_instance_of(Vedeu::DSL::Border) }
34
+ it { subject.instance_variable_get('@model').must_equal(model) }
35
+ it { subject.instance_variable_get('@client').must_equal(client) }
36
+ end
37
+
38
+ describe '#bottom_left' do
39
+ let(:char) { 'C' }
40
+
41
+ subject { instance.bottom_left(char) }
42
+
43
+ it { subject.must_be_instance_of(String) }
44
+ it { subject.must_equal('C') }
45
+
46
+ context 'DSL #bottom_left' do
47
+ subject {
48
+ Vedeu.interface 'borders' do
49
+ border do
50
+ bottom_left '<'
51
+ end
52
+ geometry do
53
+ height 3
54
+ width 3
55
+ end
56
+ lines do
57
+ line ''
58
+ end
59
+ end
60
+ }
61
+
62
+ it { subject.must_be_instance_of(Vedeu::Interface) }
63
+
64
+ it 'allows the use of bottom_left within border' do
65
+ subject.border.to_s.must_equal(
66
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
67
+ "\e(0x\e(B \e(0x\e(B\n" \
68
+ "\e(0<\e(B\e(0q\e(B\e(0j\e(B"
69
+ )
70
+ end
71
+ end
72
+ end
73
+
74
+ describe '#bottom_right' do
75
+ let(:char) { 'D' }
76
+
77
+ subject { instance.bottom_right(char) }
78
+
79
+ it { subject.must_be_instance_of(String) }
80
+ it { subject.must_equal('D') }
81
+
82
+ context 'DSL #bottom_right' do
83
+ subject {
84
+ Vedeu.interface 'borders' do
85
+ border do
86
+ bottom_right '>'
87
+ end
88
+ geometry do
89
+ height 3
90
+ width 3
91
+ end
92
+ lines do
93
+ line ''
94
+ end
95
+ end
96
+ }
97
+
98
+ it { subject.must_be_instance_of(Vedeu::Interface) }
99
+
100
+ it 'allows the use of bottom_right within border' do
101
+ subject.border.to_s.must_equal(
102
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
103
+ "\e(0x\e(B \e(0x\e(B\n" \
104
+ "\e(0m\e(B\e(0q\e(B\e(0>\e(B"
105
+ )
106
+ end
107
+ end
108
+ end
109
+
110
+ describe '#horizontal' do
111
+ let(:char) { 'H' }
112
+
113
+ subject { instance.horizontal(char) }
114
+
115
+ it { subject.must_be_instance_of(String) }
116
+ it { subject.must_equal('H') }
117
+
118
+ context 'DSL #horizontal' do
119
+ subject {
120
+ Vedeu.interface 'borders' do
121
+ border do
122
+ horizontal '~'
123
+ end
124
+ geometry do
125
+ height 3
126
+ width 3
127
+ end
128
+ lines do
129
+ line ''
130
+ end
131
+ end
132
+ }
133
+
134
+ it { subject.must_be_instance_of(Vedeu::Interface) }
135
+
136
+ it 'allows the use of horizontal within border' do
137
+ subject.border.to_s.must_equal(
138
+ "\e(0l\e(B\e(0~\e(B\e(0k\e(B\n" \
139
+ "\e(0x\e(B \e(0x\e(B\n" \
140
+ "\e(0m\e(B\e(0~\e(B\e(0j\e(B"
141
+ )
142
+ end
143
+ end
144
+ end
145
+
146
+ describe '#show_bottom' do
147
+ subject { instance.show_bottom(boolean) }
148
+
149
+ it { subject.must_be_instance_of(TrueClass) }
150
+
151
+ context 'when false' do
152
+ let(:boolean) { false }
153
+
154
+ it { subject.must_be_instance_of(FalseClass) }
155
+ end
156
+
157
+ context 'DSL #show_bottom' do
158
+ subject {
159
+ Vedeu.interface 'borders' do
160
+ border do
161
+ show_bottom ''
162
+ end
163
+ geometry do
164
+ height 3
165
+ width 3
166
+ end
167
+ lines do
168
+ line ''
169
+ end
170
+ end
171
+ }
172
+
173
+ it { subject.must_be_instance_of(Vedeu::Interface) }
174
+
175
+ it 'allows the use of show_bottom within border' do
176
+ subject.border.to_s.must_equal(
177
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
178
+ "\e(0x\e(B \e(0x\e(B\n" \
179
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
180
+ )
181
+ end
182
+ end
183
+ end
184
+
185
+ describe '#show_left' do
186
+ subject { instance.show_left(boolean) }
187
+
188
+ it { subject.must_be_instance_of(TrueClass) }
189
+
190
+ context 'when false' do
191
+ let(:boolean) { false }
192
+
193
+ it { subject.must_be_instance_of(FalseClass) }
194
+ end
195
+
196
+ context 'DSL #show_left' do
197
+ subject {
198
+ Vedeu.interface 'borders' do
199
+ border do
200
+ show_left ''
201
+ end
202
+ geometry do
203
+ height 3
204
+ width 3
205
+ end
206
+ lines do
207
+ line ''
208
+ end
209
+ end
210
+ }
211
+
212
+ it { subject.must_be_instance_of(Vedeu::Interface) }
213
+
214
+ it 'allows the use of show_left within border' do
215
+ subject.border.to_s.must_equal(
216
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
217
+ "\e(0x\e(B \e(0x\e(B\n" \
218
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
219
+ )
220
+ end
221
+ end
222
+ end
223
+
224
+ describe '#show_right' do
225
+ subject { instance.show_right(boolean) }
226
+
227
+ it { subject.must_be_instance_of(TrueClass) }
228
+
229
+ context 'when false' do
230
+ let(:boolean) { false }
231
+
232
+ it { subject.must_be_instance_of(FalseClass) }
233
+ end
234
+
235
+ context 'DSL #show_right' do
236
+ subject {
237
+ Vedeu.interface 'borders' do
238
+ border do
239
+ show_right ''
240
+ end
241
+ geometry do
242
+ height 3
243
+ width 3
244
+ end
245
+ lines do
246
+ line ''
247
+ end
248
+ end
249
+ }
250
+
251
+ it { subject.must_be_instance_of(Vedeu::Interface) }
252
+
253
+ it 'allows the use of show_right within border' do
254
+ subject.border.to_s.must_equal(
255
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
256
+ "\e(0x\e(B \e(0x\e(B\n" \
257
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
258
+ )
259
+ end
260
+ end
261
+ end
262
+
263
+ describe '#show_top' do
264
+ subject { instance.show_top(boolean) }
265
+
266
+ it { subject.must_be_instance_of(TrueClass) }
267
+
268
+ context 'when false' do
269
+ let(:boolean) { false }
270
+
271
+ it { subject.must_be_instance_of(FalseClass) }
272
+ end
273
+
274
+ context 'DSL #show_top' do
275
+ subject {
276
+ Vedeu.interface 'borders' do
277
+ border do
278
+ show_top ''
279
+ end
280
+ geometry do
281
+ height 3
282
+ width 3
283
+ end
284
+ lines do
285
+ line ''
286
+ end
287
+ end
288
+ }
289
+
290
+ it { subject.must_be_instance_of(Vedeu::Interface) }
291
+
292
+ it 'allows the use of show_top within border' do
293
+ subject.border.to_s.must_equal(
294
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
295
+ "\e(0x\e(B \e(0x\e(B\n" \
296
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
297
+ )
298
+ end
299
+ end
300
+ end
301
+
302
+ describe '#top_left' do
303
+ let(:char) { 'A' }
304
+
305
+ subject { instance.top_left(char) }
306
+
307
+ it { subject.must_be_instance_of(String) }
308
+ it { subject.must_equal('A') }
309
+
310
+ context 'DSL #top_left' do
311
+ subject {
312
+ Vedeu.interface 'borders' do
313
+ border do
314
+ top_left '{'
315
+ end
316
+ geometry do
317
+ height 3
318
+ width 3
319
+ end
320
+ lines do
321
+ line ''
322
+ end
323
+ end
324
+ }
325
+
326
+ it { subject.must_be_instance_of(Vedeu::Interface) }
327
+
328
+ it 'allows the use of top_left within border' do
329
+ subject.border.to_s.must_equal(
330
+ "\e(0{\e(B\e(0q\e(B\e(0k\e(B\n" \
331
+ "\e(0x\e(B \e(0x\e(B\n" \
332
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
333
+ )
334
+ end
335
+ end
336
+ end
337
+
338
+ describe '#top_right' do
339
+ let(:char) { 'B' }
340
+
341
+ subject { instance.top_right(char) }
342
+
343
+ it { subject.must_be_instance_of(String) }
344
+ it { subject.must_equal('B') }
345
+
346
+ context 'DSL #top_right' do
347
+ subject {
348
+ Vedeu.interface 'borders' do
349
+ border do
350
+ top_right '}'
351
+ end
352
+ geometry do
353
+ height 3
354
+ width 3
355
+ end
356
+ lines do
357
+ line ''
358
+ end
359
+ end
360
+ }
361
+
362
+ it { subject.must_be_instance_of(Vedeu::Interface) }
363
+
364
+ it 'allows the use of top_right within border' do
365
+ subject.border.to_s.must_equal(
366
+ "\e(0l\e(B\e(0q\e(B\e(0}\e(B\n" \
367
+ "\e(0x\e(B \e(0x\e(B\n" \
368
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
369
+ )
370
+ end
371
+ end
372
+ end
373
+
374
+ describe '#vertical' do
375
+ let(:char) { 'V' }
376
+
377
+ subject { instance.vertical(char) }
378
+
379
+ it { subject.must_be_instance_of(String) }
380
+ it { subject.must_equal('V') }
381
+
382
+ context 'DSL #vertical' do
383
+ subject {
384
+ Vedeu.interface 'borders' do
385
+ border do
386
+ vertical ':'
387
+ end
388
+ geometry do
389
+ height 3
390
+ width 3
391
+ end
392
+ lines do
393
+ line ''
394
+ end
395
+ end
396
+ }
397
+
398
+ it { subject.must_be_instance_of(Vedeu::Interface) }
399
+
400
+ it 'allows the use of vertical within border' do
401
+ subject.border.to_s.must_equal(
402
+ "\e(0l\e(B\e(0q\e(B\e(0k\e(B\n" \
403
+ "\e(0:\e(B \e(0:\e(B\n" \
404
+ "\e(0m\e(B\e(0q\e(B\e(0j\e(B"
405
+ )
406
+ end
407
+ end
408
+ end
409
+
410
+ end # Border
411
+
412
+ end # DSL
413
+
414
+ end # Vedeu
@@ -0,0 +1,231 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Geometry do
8
+
9
+ let(:described) { Vedeu::DSL::Geometry.new(model) }
10
+ let(:model) { Vedeu::Geometry.new }
11
+
12
+ describe '#initialize' do
13
+ it { described.must_be_instance_of(Vedeu::DSL::Geometry) }
14
+ it { described.instance_variable_get('@model').must_equal(model) }
15
+ end
16
+
17
+ describe '#centred' do
18
+ subject { Vedeu::Geometry.build({}) { centred true } }
19
+
20
+ it 'sets the attribute to the value' do
21
+ subject.centred.must_equal(true)
22
+ end
23
+
24
+ context 'DSL #centred' do
25
+ subject {
26
+ Vedeu.interface 'geometry' do
27
+ geometry do
28
+ centred false
29
+ end
30
+ end
31
+ }
32
+
33
+ it { subject.must_be_instance_of(Vedeu::Interface) }
34
+
35
+ it 'allows the use of centred within geometry' do
36
+ subject.geometry.centred.must_equal(false)
37
+ end
38
+
39
+ context 'when no value is given' do
40
+ subject {
41
+ Vedeu.interface 'geometry' do
42
+ geometry do
43
+ centred
44
+ end
45
+ end
46
+ }
47
+
48
+ it { subject.geometry.centred.must_equal(true) }
49
+ end
50
+ end
51
+ end
52
+
53
+ describe '#height' do
54
+ subject { Vedeu::Geometry.build({}) { height 6 } }
55
+
56
+ it 'sets the attribute to the value' do
57
+ subject.height.must_equal(6)
58
+ end
59
+
60
+ context 'DSL #height' do
61
+ subject {
62
+ Vedeu.interface 'geometry' do
63
+ geometry do
64
+ height 17
65
+ end
66
+ end
67
+ }
68
+
69
+ it { subject.must_be_instance_of(Vedeu::Interface) }
70
+
71
+ it 'allows the use of height within geometry' do
72
+ subject.geometry.height.must_equal(17)
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#name' do
78
+ subject { Vedeu::Geometry.build({}) { name 'chlorine' } }
79
+
80
+ it 'sets the attribute to the value' do
81
+ subject.name.must_equal('chlorine')
82
+ end
83
+
84
+ context 'DSL #name' do
85
+ subject {
86
+ Vedeu.interface 'geometry' do
87
+ geometry do
88
+ name 'other_name'
89
+ end
90
+ end
91
+ }
92
+
93
+ it { subject.must_be_instance_of(Vedeu::Interface) }
94
+
95
+ it 'allows the use of name within geometry' do
96
+ subject.geometry.name.must_equal('other_name')
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#width' do
102
+ subject { Vedeu::Geometry.build({}) { width 25 } }
103
+
104
+ it 'sets the attribute to the value' do
105
+ subject.width.must_equal(25)
106
+ end
107
+
108
+ context 'DSL #width' do
109
+ subject {
110
+ Vedeu.interface 'geometry' do
111
+ geometry do
112
+ width 29
113
+ end
114
+ end
115
+ }
116
+
117
+ it { subject.must_be_instance_of(Vedeu::Interface) }
118
+
119
+ it 'allows the use of width within geometry' do
120
+ subject.geometry.width.must_equal(29)
121
+ end
122
+ end
123
+ end
124
+
125
+ describe '#x' do
126
+ subject { Vedeu::Geometry.build({}) { x 2 } }
127
+
128
+ it 'sets the attribute to the value' do
129
+ subject.x.must_equal(2)
130
+ end
131
+
132
+ context 'when a block is given' do
133
+ subject {
134
+ Vedeu::Geometry.build({}) do
135
+ x do
136
+ 3 + 4
137
+ end
138
+ end
139
+ }
140
+
141
+ it { subject.x.must_equal(7) }
142
+ end
143
+
144
+ context 'DSL #x' do
145
+ subject {
146
+ Vedeu.interface 'geometry' do
147
+ geometry do
148
+ x 7
149
+ end
150
+ end
151
+ }
152
+
153
+ it { subject.must_be_instance_of(Vedeu::Interface) }
154
+
155
+ it 'allows the use of x within geometry' do
156
+ subject.geometry.x.must_equal(7)
157
+ end
158
+
159
+ context 'when no value is given' do
160
+ subject {
161
+ Vedeu.interface 'geometry' do
162
+ geometry do
163
+ x
164
+ end
165
+ end
166
+ }
167
+
168
+ it { subject.geometry.x.must_equal(0) }
169
+ end
170
+
171
+ context 'when a block is given' do
172
+ end
173
+ end
174
+ end
175
+
176
+ describe '#y' do
177
+ subject { Vedeu::Geometry.build({}) { y 5 } }
178
+
179
+ it 'sets the attribute to the value' do
180
+ subject.y.must_equal(5)
181
+ end
182
+
183
+ context 'when a block is given' do
184
+ subject {
185
+ Vedeu::Geometry.build({}) do
186
+ y do
187
+ 2 + 7
188
+ end
189
+ end
190
+ }
191
+
192
+ it { subject.y.must_equal(9) }
193
+ end
194
+
195
+ context 'DSL #y' do
196
+ subject {
197
+ Vedeu.interface 'geometry' do
198
+ geometry do
199
+ y 4
200
+ end
201
+ end
202
+ }
203
+
204
+ it { subject.must_be_instance_of(Vedeu::Interface) }
205
+
206
+ it 'allows the use of y within geometry' do
207
+ subject.geometry.y.must_equal(4)
208
+ end
209
+
210
+ context 'when no value is given' do
211
+ subject {
212
+ Vedeu.interface 'geometry' do
213
+ geometry do
214
+ y
215
+ end
216
+ end
217
+ }
218
+
219
+ it { subject.geometry.y.must_equal(0) }
220
+ end
221
+
222
+ context 'when a block is given' do
223
+ end
224
+ end
225
+ end
226
+
227
+ end # Geometry
228
+
229
+ end # DSL
230
+
231
+ end # Vedeu
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Keymap do
8
+
9
+ let(:described) { Vedeu::DSL::Keymap }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Keymap.new('_test_') }
12
+
13
+ describe '#initialize' do
14
+ subject { instance }
15
+
16
+ it { subject.must_be_instance_of(described) }
17
+ it { subject.instance_variable_get('@model').must_equal(model) }
18
+ end
19
+
20
+ describe '#key' do
21
+ let(:value_or_values) { ['j', :down] }
22
+
23
+ subject { instance.key(*value_or_values) { :some_action } }
24
+
25
+ context 'when a block was not given' do
26
+ subject { instance.key(value_or_values) }
27
+
28
+ it { proc { subject }.must_raise(InvalidSyntax) }
29
+ end
30
+
31
+ context 'when a key was not given' do
32
+ let(:value_or_values) {}
33
+
34
+ it { proc { subject }.must_raise(InvalidSyntax) }
35
+ end
36
+
37
+ context 'when an invalid key was given (nil)' do
38
+ let(:value_or_values) { ['v', nil] }
39
+
40
+ it { proc { subject }.must_raise(InvalidSyntax) }
41
+ end
42
+
43
+ context 'when an invalid key was given (empty)' do
44
+ let(:value_or_values) { ['v', ''] }
45
+
46
+ it { proc { subject }.must_raise(InvalidSyntax) }
47
+ end
48
+
49
+ context 'when the key is valid (not already defined)' do
50
+ before { model.stubs(:add).returns(Vedeu::Keymap) }
51
+
52
+ it { subject.must_equal(['j', :down]) }
53
+ end
54
+
55
+ context 'when the key is not valid (already defined)' do
56
+ # let(:key_j) { Key.new('j') { :do_something } }
57
+ # let(:key_down) { Key.new(:down) { :do_something } }
58
+
59
+ # before { model.stubs(:keys).returns([key_j, key_down]) }
60
+
61
+ # it { subject.must_equal(false) }
62
+ end
63
+ end
64
+
65
+ describe '#name' do
66
+ let(:value) { 'gold' }
67
+
68
+ subject { instance.name(value) }
69
+
70
+ it 'defines the name of the keymap' do
71
+ subject
72
+ model.name.must_equal(value)
73
+ end
74
+ end
75
+
76
+ end # Keymap
77
+
78
+ end # DSL
79
+
80
+ end # Vedeu