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,196 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Buffer do
6
+
7
+ let(:described) { Vedeu::Buffer }
8
+ let(:instance) { described.new(buffer_name, back, front, previous, repository) }
9
+ let(:buffer_name) { 'krypton' }
10
+ let(:back) {}
11
+ let(:front) {}
12
+ let(:previous) {}
13
+ let(:repository) {}
14
+
15
+ before { Vedeu.stubs(:trigger) }
16
+
17
+ describe '#initialize' do
18
+ subject { instance }
19
+
20
+ it { subject.must_be_instance_of(described) }
21
+ it { subject.instance_variable_get('@name').must_equal(buffer_name) }
22
+ it { subject.instance_variable_get('@back').must_equal(back) }
23
+ it { subject.instance_variable_get('@front').must_equal(front) }
24
+ it { subject.instance_variable_get('@previous').must_equal(previous) }
25
+ it { subject.instance_variable_get('@repository').must_equal(Vedeu.buffers) }
26
+ end
27
+
28
+ describe '#inspect' do
29
+ subject { instance.inspect }
30
+
31
+ it { subject.must_equal('<Vedeu::Buffer ( back?:false front?:false previous?:false )>') }
32
+ end
33
+
34
+ describe '#add' do
35
+ let(:back) {
36
+ Vedeu::Interface.build do
37
+ lines do
38
+ line 'old_back'
39
+ end
40
+ end
41
+ }
42
+ let(:content) {
43
+ Vedeu::Interface.build do
44
+ lines do
45
+ line 'new_back'
46
+ end
47
+ end
48
+ }
49
+
50
+ subject { instance.add(content) }
51
+
52
+ it { subject.must_equal(true) }
53
+
54
+ it 'replaces the back buffer with the content' do
55
+ instance.back.must_equal(back)
56
+
57
+ subject
58
+
59
+ instance.back.must_equal(content)
60
+ end
61
+ end
62
+
63
+ describe '#content' do
64
+ subject { instance.content }
65
+
66
+ it { subject.must_be_instance_of(Array) }
67
+
68
+ context 'when there is content on the back buffer' do
69
+ let(:back) {
70
+ Vedeu::Interface.build do
71
+ lines do
72
+ line 'old_back'
73
+ end
74
+ end
75
+ }
76
+ let(:buffer) { :back }
77
+
78
+ it { subject.must_equal([back]) }
79
+ end
80
+
81
+ context 'when there is no content on the back buffer' do
82
+ let(:buffer) { :back }
83
+
84
+ it { subject.must_equal([]) }
85
+ end
86
+
87
+ context 'when there is no content on the back buffer' do
88
+ let(:back) {}
89
+ let(:buffer) { :back }
90
+
91
+ it { subject.must_equal([]) }
92
+ end
93
+
94
+ context 'when there is content on the front buffer' do
95
+ let(:buffer) { :front }
96
+ let(:front) {
97
+ Vedeu::Interface.build do
98
+ lines do
99
+ line 'front'
100
+ end
101
+ end
102
+ }
103
+
104
+ it { subject.must_equal([front]) }
105
+ end
106
+
107
+ context 'when there is no content on the front buffer' do
108
+ let(:buffer) { :front }
109
+
110
+ it { subject.must_equal([]) }
111
+ end
112
+
113
+ context 'when there is no content on the front buffer' do
114
+ let(:buffer) { :front }
115
+ let(:front) {}
116
+
117
+ it { subject.must_equal([]) }
118
+ end
119
+
120
+ context 'when there is content on the previous buffer' do
121
+ let(:buffer) { :previous }
122
+ let(:previous) {
123
+ Vedeu::Interface.build do
124
+ lines do
125
+ line 'old_back'
126
+ end
127
+ end
128
+ }
129
+
130
+ it { subject.must_equal([previous]) }
131
+ end
132
+
133
+ context 'when there is no content on the previous buffer' do
134
+ let(:buffer) { :previous }
135
+
136
+ it { subject.must_equal([]) }
137
+ end
138
+
139
+ context 'when there is no content on the previous buffer' do
140
+ let(:buffer) { :previous }
141
+ let(:previous) {}
142
+
143
+ it { subject.must_equal([]) }
144
+ end
145
+ end
146
+
147
+ describe '#swap' do
148
+ subject { instance.swap }
149
+
150
+ context 'when there is new content on the back buffer' do
151
+ let(:back) {
152
+ Vedeu::Interface.build do
153
+ lines do
154
+ line 'back'
155
+ end
156
+ end
157
+ }
158
+ let(:front) {
159
+ Vedeu::Interface.build do
160
+ lines do
161
+ line 'front'
162
+ end
163
+ end
164
+ }
165
+ let(:previous) {
166
+ Vedeu::Interface.build do
167
+ lines do
168
+ line 'previous'
169
+ end
170
+ end
171
+ }
172
+
173
+ context 'when the buffer was updated successfully' do
174
+ it { subject.must_equal(true) }
175
+ end
176
+
177
+ it 'replaces the previous buffer with the front buffer' do
178
+ subject
179
+ instance.previous.must_equal(front)
180
+ end
181
+
182
+ it 'replaces the front buffer with the back buffer' do
183
+ subject
184
+ instance.front.must_equal(back)
185
+ end
186
+
187
+ it 'replaces the back buffer with an empty buffer' do
188
+ subject
189
+ instance.back.must_equal(nil)
190
+ end
191
+ end
192
+ end
193
+
194
+ end # Buffer
195
+
196
+ end # Vedeu
@@ -0,0 +1,58 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ class TestInterfaceModel
6
+ include Vedeu::Model
7
+ include Vedeu::DisplayBuffer
8
+
9
+ def name
10
+ 'test_interface_model'
11
+ end
12
+
13
+ private
14
+
15
+ def repository
16
+ Vedeu.interfaces
17
+ end
18
+ end
19
+
20
+ describe DisplayBuffer do
21
+
22
+ let(:described) { Vedeu::DisplayBuffer }
23
+ let(:example_model) { Vedeu::TestInterfaceModel }
24
+ let(:example_instance) { example_model.new }
25
+
26
+ before do
27
+ example_instance.store
28
+
29
+ Vedeu::Refresh.stubs(:by_name)
30
+ end
31
+
32
+ describe '#store_immediate' do
33
+ subject { example_instance.store_immediate }
34
+
35
+ it { subject.must_be_instance_of(example_model) }
36
+ end
37
+
38
+ describe '#store_deferred' do
39
+ subject { example_instance.store_deferred }
40
+
41
+ it { subject.must_be_instance_of(example_model) }
42
+
43
+ context 'when the name is not defined' do
44
+ before { example_instance.stubs(:name) }
45
+
46
+ it { proc { subject }.must_raise(InvalidSyntax) }
47
+ end
48
+
49
+ context 'when the buffer is not already registered' do
50
+ end
51
+
52
+ context 'when the buffer is already registered' do
53
+ end
54
+ end
55
+
56
+ end # DisplayBuffer
57
+
58
+ end # Vedeu
@@ -10,128 +10,112 @@ module Vedeu
10
10
  after { test_configuration }
11
11
 
12
12
  describe '.configure' do
13
- it 'returns the default configuration' do
13
+ it 'returns the configuration singleton' do
14
14
  Vedeu.configure do
15
15
  # ...
16
- end.must_equal(
17
- {
18
- colour_mode: 256,
19
- debug: false,
20
- interactive: true,
21
- log: '/tmp/vedeu.log',
22
- once: false,
23
- system_keys: {
24
- exit: 'q',
25
- focus_next: :tab,
26
- focus_prev: :shift_tab,
27
- mode_switch: :escape
28
- },
29
- terminal_mode: :raw,
30
- trace: false
31
- }
32
- )
16
+ end.must_equal(Vedeu::Configuration)
33
17
  end
34
18
  end
35
19
 
36
20
  describe '#interactive!' do
37
21
  it 'sets the option to the desired value' do
38
22
  configuration = Vedeu.configure { interactive! }
39
- configuration[:interactive].must_equal(true)
23
+ configuration.interactive?.must_equal(true)
40
24
  end
41
25
 
42
26
  it 'sets the option to the desired value' do
43
27
  configuration = Vedeu.configure { interactive(false) }
44
- configuration[:interactive].must_equal(false)
28
+ configuration.interactive?.must_equal(false)
45
29
  end
46
30
 
47
31
  it 'sets the option to the desired value' do
48
32
  configuration = Vedeu.configure { interactive(true) }
49
- configuration[:interactive].must_equal(true)
33
+ configuration.interactive?.must_equal(true)
50
34
  end
51
35
 
52
36
  it 'sets the option to the desired value' do
53
37
  configuration = Vedeu.configure { interactive }
54
- configuration[:interactive].must_equal(true)
38
+ configuration.interactive?.must_equal(true)
55
39
  end
56
40
  end
57
41
 
58
42
  describe '#standalone!' do
59
43
  it 'sets the option to the desired value' do
60
44
  configuration = Vedeu.configure { standalone! }
61
- configuration[:interactive].must_equal(false)
45
+ configuration.interactive?.must_equal(false)
62
46
  end
63
47
 
64
48
  it 'sets the option to the desired value' do
65
49
  configuration = Vedeu.configure { standalone(false) }
66
- configuration[:interactive].must_equal(true)
50
+ configuration.interactive?.must_equal(true)
67
51
  end
68
52
 
69
53
  it 'sets the option to the desired value' do
70
54
  configuration = Vedeu.configure { standalone(true) }
71
- configuration[:interactive].must_equal(false)
55
+ configuration.interactive?.must_equal(false)
72
56
  end
73
57
 
74
58
  it 'sets the option to the desired value' do
75
59
  configuration = Vedeu.configure { standalone }
76
- configuration[:interactive].must_equal(false)
60
+ configuration.interactive?.must_equal(false)
77
61
  end
78
62
  end
79
63
 
80
64
  describe '#run_once!' do
81
65
  it 'sets the option to the desired value' do
82
66
  configuration = Vedeu.configure { run_once! }
83
- configuration[:once].must_equal(true)
67
+ configuration.once.must_equal(true)
84
68
  end
85
69
 
86
70
  it 'sets the option to the desired value' do
87
71
  configuration = Vedeu.configure { run_once(false) }
88
- configuration[:once].must_equal(false)
72
+ configuration.once.must_equal(false)
89
73
  end
90
74
 
91
75
  it 'sets the option to the desired value' do
92
76
  configuration = Vedeu.configure { run_once(true) }
93
- configuration[:once].must_equal(true)
77
+ configuration.once.must_equal(true)
94
78
  end
95
79
 
96
80
  it 'sets the option to the desired value' do
97
81
  configuration = Vedeu.configure { run_once }
98
- configuration[:once].must_equal(true)
82
+ configuration.once.must_equal(true)
99
83
  end
100
84
  end
101
85
 
102
86
  describe '#cooked!' do
103
87
  it 'sets the option to the desired value' do
104
88
  configuration = Vedeu.configure { cooked! }
105
- configuration[:terminal_mode].must_equal(:cooked)
89
+ configuration.terminal_mode.must_equal(:cooked)
106
90
  end
107
91
  end
108
92
 
109
93
  describe '#raw!' do
110
94
  it 'sets the option to the desired value' do
111
95
  configuration = Vedeu.configure { raw! }
112
- configuration[:terminal_mode].must_equal(:raw)
96
+ configuration.terminal_mode.must_equal(:raw)
113
97
  end
114
98
  end
115
99
 
116
100
  describe '#debug!' do
117
101
  it 'sets the option to the desired value' do
118
102
  configuration = Vedeu.configure { debug! }
119
- configuration[:debug].must_equal(true)
103
+ configuration.debug.must_equal(true)
120
104
  end
121
105
 
122
106
  it 'sets the option to the desired value' do
123
107
  configuration = Vedeu.configure { debug(true) }
124
- configuration[:debug].must_equal(true)
108
+ configuration.debug.must_equal(true)
125
109
  end
126
110
 
127
111
  it 'sets the option to the desired value' do
128
112
  configuration = Vedeu.configure { debug(false) }
129
- configuration[:debug].must_equal(false)
113
+ configuration.debug.must_equal(false)
130
114
  end
131
115
 
132
116
  it 'sets the option to the desired value' do
133
117
  configuration = Vedeu.configure { trace(true) }
134
- configuration[:debug].must_equal(true)
118
+ configuration.debug.must_equal(true)
135
119
  end
136
120
 
137
121
  it 'sets the option to the desired value' do
@@ -140,7 +124,7 @@ module Vedeu
140
124
  trace(true)
141
125
  end
142
126
 
143
- configuration[:debug].must_equal(true)
127
+ configuration.debug.must_equal(true)
144
128
  end
145
129
 
146
130
  it 'sets the option to the desired value' do
@@ -149,7 +133,7 @@ module Vedeu
149
133
  trace(false)
150
134
  end
151
135
 
152
- configuration[:debug].must_equal(true)
136
+ configuration.debug.must_equal(true)
153
137
  end
154
138
 
155
139
  it 'sets the option to the desired value' do
@@ -158,7 +142,7 @@ module Vedeu
158
142
  trace(false)
159
143
  end
160
144
 
161
- configuration[:debug].must_equal(false)
145
+ configuration.debug.must_equal(false)
162
146
  end
163
147
  end
164
148
 
@@ -166,53 +150,53 @@ module Vedeu
166
150
  it 'sets the option to the desired value' do
167
151
  configuration = Vedeu.configure { trace! }
168
152
 
169
- configuration[:trace].must_equal(true)
153
+ configuration.trace.must_equal(true)
170
154
  end
171
155
 
172
156
  it 'sets the option to the desired value' do
173
157
  configuration = Vedeu.configure { trace(false) }
174
158
 
175
- configuration[:trace].must_equal(false)
176
- configuration[:debug].must_equal(false)
159
+ configuration.trace.must_equal(false)
160
+ configuration.debug.must_equal(false)
177
161
  end
178
162
 
179
163
  it 'sets the option to the desired value' do
180
164
  configuration = Vedeu.configure { trace(true) }
181
165
 
182
- configuration[:trace].must_equal(true)
183
- configuration[:debug].must_equal(true)
166
+ configuration.trace.must_equal(true)
167
+ configuration.debug.must_equal(true)
184
168
  end
185
169
  end
186
170
 
187
171
  describe '#colour_mode' do
188
- it 'raises an exception for an invalid value' do
189
- proc {
172
+ context 'when the value is invalid (nil)' do
173
+ it { proc {
190
174
  Vedeu.configure { colour_mode(nil) }
191
- }.must_raise(InvalidSyntax)
175
+ }.must_raise(InvalidSyntax) }
192
176
  end
193
177
 
194
- it 'raises an exception for an invalid value' do
195
- proc {
178
+ context 'when the value is invalid (empty)' do
179
+ it { proc {
196
180
  Vedeu.configure { colour_mode('') }
197
- }.must_raise(InvalidSyntax)
181
+ }.must_raise(InvalidSyntax) }
198
182
  end
199
183
 
200
- it 'raises an exception for an invalid value' do
201
- proc {
184
+ context 'when the value is invalid' do
185
+ it { proc {
202
186
  Vedeu.configure { colour_mode(1234) }
203
- }.must_raise(InvalidSyntax)
187
+ }.must_raise(InvalidSyntax) }
204
188
  end
205
189
 
206
190
  it 'sets the option to the desired value' do
207
191
  configuration = Vedeu.configure { colour_mode(256) }
208
- configuration[:colour_mode].must_equal(256)
192
+ configuration.colour_mode.must_equal(256)
209
193
  end
210
194
  end
211
195
 
212
196
  describe '#log' do
213
197
  it 'sets the options to the desired value' do
214
198
  configuration = Vedeu.configure { log('/tmp/vedeu_api_test.log') }
215
- configuration[:log].must_equal('/tmp/vedeu_api_test.log')
199
+ configuration.log.must_equal('/tmp/vedeu_api_test.log')
216
200
  end
217
201
  end
218
202
 
@@ -229,8 +213,8 @@ module Vedeu
229
213
 
230
214
  methods_and_keys.each do |meth, _|
231
215
  invalid_params.each do |param|
232
- it 'raises an exception with an invalid parameter' do
233
- proc { Vedeu.configure { send(meth, param) } }.must_raise(InvalidSyntax)
216
+ context 'when the parameter is invalid' do
217
+ it { proc { Vedeu.configure { send(meth, param) } }.must_raise(InvalidSyntax) }
234
218
  end
235
219
  end
236
220
  end
@@ -244,7 +228,7 @@ module Vedeu
244
228
  it 'sets the system key to the desired value' do
245
229
  configuration = Vedeu.configure { send(meth, param) }
246
230
 
247
- configuration[:system_keys][key].must_equal(param)
231
+ configuration.system_keys[key].must_equal(param)
248
232
  end
249
233
  end
250
234
  end
@@ -13,14 +13,14 @@ module Vedeu
13
13
  after { test_configuration }
14
14
 
15
15
  describe '#initialize' do
16
- it { return_type_for(described, CLI) }
17
- it { assigns(described, '@args', args) }
18
- it { assigns(described, '@options', {}) }
16
+ it { described.must_be_instance_of(CLI) }
17
+ it { described.instance_variable_get('@args').must_equal(args) }
18
+ it { described.instance_variable_get('@options').must_equal({}) }
19
19
  end
20
20
 
21
21
  describe '#colour_mode' do
22
22
  it '--colour-mode' do
23
- Configuration.configure(['--colour-mode', '16777216'])
23
+ Configuration.configure(['--colour-mode', '16777216']) {}
24
24
  Configuration.colour_mode.must_equal(16777216)
25
25
  end
26
26
 
@@ -7,11 +7,14 @@ module Vedeu
7
7
  before { Configuration.reset! }
8
8
  after { test_configuration }
9
9
 
10
- describe '#colour_mode' do
11
- it 'returns the value of the colour_mode option' do
12
- skip
13
- Configuration.colour_mode.must_equal(16777216)
14
- Configuration.colour_mode.must_equal(256)
10
+ describe '.default_system_keys' do
11
+ it 'returns the default system keys' do
12
+ Configuration.default_system_keys.must_equal({
13
+ exit: 'q',
14
+ focus_next: :tab,
15
+ focus_prev: :shift_tab,
16
+ mode_switch: :escape,
17
+ })
15
18
  end
16
19
  end
17
20
 
@@ -27,13 +30,6 @@ module Vedeu
27
30
  end
28
31
  end
29
32
 
30
- describe '#log' do
31
- it 'returns the value of the log option' do
32
- skip
33
- Configuration.log.must_match(/vedeu_test\.log/)
34
- end
35
- end
36
-
37
33
  describe '#once?' do
38
34
  it 'returns the value of the once option' do
39
35
  Configuration.once?.must_equal(false)
@@ -54,23 +50,9 @@ module Vedeu
54
50
 
55
51
  describe '.configure' do
56
52
  it 'returns the options configured' do
57
- Configuration.configure.must_equal(
58
- {
59
- colour_mode: 256,
60
- debug: false,
61
- interactive: true,
62
- log: '/tmp/vedeu.log',
63
- once: false,
64
- system_keys: {
65
- exit: 'q',
66
- focus_next: :tab,
67
- focus_prev: :shift_tab,
68
- mode_switch: :escape
69
- },
70
- terminal_mode: :raw,
71
- trace: false
72
- }
73
- )
53
+ Configuration.configure do
54
+ # ...
55
+ end.must_equal(Vedeu::Configuration)
74
56
  end
75
57
  end
76
58
 
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe '.cursor' do
6
+ subject { Vedeu.cursor }
7
+
8
+ context 'when there are cursors are defined' do
9
+ before do
10
+ Vedeu::Focus.add('Vedeu.cursor')
11
+ Vedeu::Cursor.new({ name: 'Vedeu.cursor' }).store
12
+ end
13
+
14
+ it { subject.must_be_instance_of(Vedeu::Cursor) }
15
+ end
16
+
17
+ context 'when there are no cursors defined' do
18
+ before do
19
+ Vedeu::Focus.reset
20
+ Vedeu.cursors.reset
21
+ end
22
+
23
+ it { subject.must_be_instance_of(NilClass) }
24
+ end
25
+ end
26
+
27
+ describe '.cursors' do
28
+ subject { Vedeu.cursors }
29
+
30
+ it { subject.must_be_instance_of(Vedeu::Cursors) }
31
+ end
32
+
33
+ end # Vedeu