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
@@ -1,223 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Keymaps do
6
-
7
- before { Keymaps.reset }
8
-
9
- describe '#add' do
10
- it 'returns false when there are no keys defined' do
11
- attributes = {}
12
-
13
- Keymaps.add(attributes).must_equal(false)
14
- end
15
-
16
- it 'returns true when the key was registered with keymap storage' do
17
- attributes = { interfaces: ['gold'], keys: [{ 'a' => proc { :gold } }] }
18
-
19
- Keymaps.add(attributes).must_equal(true)
20
- end
21
- end
22
-
23
- describe '#find' do
24
- let(:attributes) {
25
- {
26
- interfaces: ['flerovium'],
27
- keys: [{ key: 'u', action: proc { :some_action } }]
28
- }
29
- }
30
-
31
- before { Keymaps.add(attributes) }
32
-
33
- it 'returns false when the named keymap cannot be found' do
34
- Keymaps.find('vanadium').must_equal({})
35
- end
36
-
37
- it 'returns the keymap when the named keymap was found' do
38
- Keymaps.find('flerovium').wont_be_empty
39
- end
40
- end
41
-
42
- describe '#global_key?' do
43
- before { Keymaps.stubs(:global_keys).returns(['i', 'j']) }
44
-
45
- it 'returns false when the key is not registered as a global key' do
46
- Keymaps.global_key?('h').must_equal(false)
47
- end
48
-
49
- it 'returns true when the key is registered as a global key' do
50
- Keymaps.global_key?('j').must_equal(true)
51
- end
52
- end
53
-
54
- describe '#global_keys' do
55
- let(:attributes) {
56
- {
57
- keys: [
58
- {
59
- key: 'a', action: proc { :action_a }
60
- },{
61
- key: 'b', action: proc { :action_b }
62
- },{
63
- key: 'c', action: proc { :action_c }
64
- }
65
- ]
66
- }
67
- }
68
-
69
- before { Keymaps.add(attributes) }
70
-
71
- it 'returns the defined global keys' do
72
- Keymaps.global_keys.must_equal(['a', 'b', 'c'])
73
- end
74
- end
75
-
76
- describe '#interface_key?' do
77
- before { Keymaps.stubs(:interface_keys).returns(['g', 'h']) }
78
-
79
- it 'returns false when the key is not registered with an interface' do
80
- Keymaps.interface_key?('f').must_equal(false)
81
- end
82
-
83
- it 'returns true when the key is registered with an interface' do
84
- Keymaps.interface_key?('g').must_equal(true)
85
- end
86
-
87
- context 'when the interface argument is provided' do
88
- before do
89
- Keymaps.stubs(:find).returns({ 'j' => proc { :some_action } })
90
- end
91
-
92
- it 'return false when the key is not registered with the specified ' \
93
- 'interface' do
94
- Keymaps.interface_key?('k', 'cadmium').must_equal(false)
95
- end
96
-
97
- it 'return true when the key is registered with the specified ' \
98
- 'interface' do
99
- Keymaps.interface_key?('j', 'cadmium').must_equal(true)
100
- end
101
- end
102
- end
103
-
104
- describe '#interface_keys' do
105
- let(:rhodium_attributes) {
106
- {
107
- interfaces: ['rhodium'],
108
- keys: [
109
- {
110
- key: 'd', action: proc { :action_d }
111
- },{
112
- key: 'e', action: proc { :action_e }
113
- }
114
- ]
115
- }
116
- }
117
- let(:magnesium_attributes) {
118
- {
119
- interfaces: ['magnesium'],
120
- keys: [
121
- {
122
- key: 'e', action: proc { :action_e }
123
- },{
124
- key: 'f', action: proc { :action_g }
125
- }
126
- ]
127
- }
128
- }
129
-
130
- before do
131
- Keymaps.add(rhodium_attributes)
132
- Keymaps.add(magnesium_attributes)
133
- end
134
-
135
- it 'returns the defined keys for all interfaces' do
136
- Keymaps.interface_keys.must_equal(['d', 'e', 'f'])
137
- end
138
-
139
- it 'returns the defined keys for the specified interface' do
140
- Keymaps.interface_keys('magnesium').must_equal(['e', 'f'])
141
- end
142
- end
143
-
144
- describe '#registered?' do
145
- it 'returns false when the named keymap is not registered' do
146
- Keymaps.registered?('vanadium').must_equal(false)
147
- end
148
-
149
- it 'returns true when the named keymap is registered' do
150
- Keymaps.registered?('_global_keymap_').must_equal(true)
151
- end
152
- end
153
-
154
- describe '#system_key?' do
155
- it 'returns false when the key is not registered as a system key' do
156
- Keymaps.system_key?('r').must_equal(false)
157
- end
158
-
159
- it 'returns true when the key is registered as a system key' do
160
- Keymaps.system_key?('q').must_equal(true)
161
- end
162
- end
163
-
164
- describe '#system_keys' do
165
- it 'returns the defined system keys' do
166
- Keymaps.system_keys.must_equal(['q', :tab, :shift_tab, :escape])
167
- end
168
- end
169
-
170
- describe '#use' do
171
- let(:meitnerium_attributes) {
172
- {
173
- interfaces: ['meitnerium'],
174
- keys: [{
175
- key: 'm', action: proc { :key_m_pressed }
176
- }]
177
- }
178
- }
179
- let(:global_attributes) {
180
- {
181
- keys: [{
182
- key: 'o', action: proc { :key_o_pressed }
183
- }]
184
- }
185
- }
186
-
187
- before do
188
- Keymaps.add(meitnerium_attributes)
189
- Keymaps.add(global_attributes)
190
- Vedeu::Focus.stubs(:current).returns('meitnerium')
191
- Vedeu::Configuration.stubs(:system_keys).returns({ :key_p_pressed => 'p' })
192
- Vedeu.stubs(:trigger).returns(:system_key_p_pressed)
193
- end
194
-
195
- context 'when not registered' do
196
- it 'returns false' do
197
- Keymaps.use('l').must_equal(false)
198
- end
199
- end
200
-
201
- context 'when registered as an interface key and the interface is in ' \
202
- 'focus' do
203
- it 'returns the result of the keypress' do
204
- Keymaps.use('m').must_equal(:key_m_pressed)
205
- end
206
- end
207
-
208
- context 'when registered as a global key' do
209
- it 'returns the result of the keypress' do
210
- Keymaps.use('o').must_equal(:key_o_pressed)
211
- end
212
- end
213
-
214
- context 'when registered as a system key' do
215
- it 'returns the result of the keypress' do
216
- Keymaps.use('p').must_equal(:system_key_p_pressed)
217
- end
218
- end
219
- end
220
-
221
- end # Keymaps
222
-
223
- end # Vedeu
@@ -1,174 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Buffer do
6
-
7
- let(:described) { Buffer.new(attributes) }
8
- let(:attributes) {
9
- {
10
- name: '',
11
- back: back,
12
- front: front,
13
- previous: previous,
14
- }
15
- }
16
- let(:back) { {} }
17
- let(:front) { {} }
18
- let(:previous) { {} }
19
-
20
- describe '#initialize' do
21
- it { return_type_for(described, Buffer) }
22
- it { assigns(described, '@name', '') }
23
- it { assigns(described, '@back', {}) }
24
- it { assigns(described, '@front', {}) }
25
- it { assigns(described, '@previous', {}) }
26
- end
27
-
28
- describe '#back' do
29
- it { return_type_for(described.back, Hash) }
30
- end
31
-
32
- describe '#front' do
33
- it { return_type_for(described.front, Hash) }
34
-
35
- context 'alias method: #current' do
36
- it { return_type_for(described.current, Hash) }
37
- end
38
- end
39
-
40
- describe '#name' do
41
- it { return_type_for(described.name, String) }
42
- end
43
-
44
- describe '#previous' do
45
- it { return_type_for(described.previous, Hash) }
46
- end
47
-
48
- describe '#content' do
49
- it { return_type_for(described.content, Array) }
50
-
51
- subject { Buffer.new(attributes).content }
52
-
53
- context 'when there is content on the back buffer' do
54
- let(:back) { { lines: [{ streams: [{ text: 'back' }] }] } }
55
- let(:buffer) { :back }
56
-
57
- it { subject.must_equal([{}, back]) }
58
- end
59
-
60
- context 'when there is no content on the back buffer' do
61
- let(:buffer) { :back }
62
-
63
- it { subject.must_equal([{}]) }
64
- end
65
-
66
- context 'when there is no content on the back buffer' do
67
- let(:back) { { lines: [] } }
68
- let(:buffer) { :back }
69
-
70
- it { subject.must_equal([{}]) }
71
- end
72
-
73
- context 'when there is content on the front buffer' do
74
- let(:buffer) { :front }
75
- let(:front) { { lines: [{ streams: [{ text: 'front' }] }] } }
76
-
77
- it { subject.must_equal([front]) }
78
- end
79
-
80
- context 'when there is no content on the front buffer' do
81
- let(:buffer) { :front }
82
-
83
- it { subject.must_equal([{}]) }
84
- end
85
-
86
- context 'when there is no content on the front buffer' do
87
- let(:buffer) { :front }
88
-
89
- let(:front) { { lines: [] } }
90
-
91
- it { subject.must_equal([{}]) }
92
- end
93
-
94
- context 'when there is content on the previous buffer' do
95
- let(:buffer) { :previous }
96
- let(:previous) { { lines: [{ streams: [{ text: 'previous' }] }] } }
97
-
98
- it { subject.must_equal([previous]) }
99
- end
100
-
101
- context 'when there is no content on the previous buffer' do
102
- let(:buffer) { :previous }
103
-
104
- it { subject.must_equal([{}]) }
105
- end
106
-
107
- context 'when there is no content on the previous buffer' do
108
- let(:buffer) { :previous }
109
- let(:previous) { { lines: [] } }
110
-
111
- it { subject.must_equal([{}]) }
112
- end
113
- end
114
-
115
- describe '#add' do
116
- let(:attributes) {
117
- {
118
- back: { lines: [{ streams: [{ text: 'old_back' }] }] }
119
- }
120
- }
121
- let(:buffer) { Buffer.new(attributes) }
122
- let(:content) { { lines: [{ streams: [{ text: 'new_back' }] }] } }
123
-
124
- subject { buffer.add(content) }
125
-
126
- it { subject.must_equal(true) }
127
-
128
- it 'replaces the back buffer with the content' do
129
- buffer.back.must_equal({ lines: [{ streams: [{ text: 'old_back' }] }] })
130
-
131
- subject
132
-
133
- buffer.back.must_equal({ lines: [{ streams: [{ text: 'new_back' }] }] })
134
- end
135
- end
136
-
137
- describe '#swap' do
138
- let(:buffer) { Buffer.new(attributes) }
139
-
140
- subject { buffer.swap }
141
-
142
- context 'when there is new content on the back buffer' do
143
- let(:back) { { lines: [{ streams: [{ text: 'back' }] }] } }
144
- let(:front) { { lines: [{ streams: [{ text: 'front' }] }] } }
145
- let(:previous) { { lines: [{ streams: [{ text: 'previous' }] }] } }
146
-
147
- context 'when the buffer was updated successfully' do
148
- it { subject.must_equal(true) }
149
- end
150
-
151
- it 'replaces the previous buffer with the front buffer' do
152
- subject
153
- buffer.previous.must_equal(front)
154
- end
155
-
156
- it 'replaces the front buffer with the back buffer' do
157
- subject
158
- buffer.front.must_equal(back)
159
- end
160
-
161
- it 'replaces the back buffer with an empty buffer' do
162
- subject
163
- buffer.back.must_equal({})
164
- end
165
- end
166
-
167
- context 'when there is no new content on the back buffer' do
168
- it { subject.must_equal(false) }
169
- end
170
- end
171
-
172
- end # Buffer
173
-
174
- end # Vedeu
@@ -1,158 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Cursor do
6
-
7
- let(:described) { Cursor.new(attributes) }
8
- let(:attributes) {
9
- {
10
- name: 'silver',
11
- state: :show,
12
- x: 19,
13
- y: 8
14
- }
15
- }
16
-
17
- before do
18
- Interfaces.reset
19
- Vedeu.interface 'silver' do
20
- y 5
21
- height 4
22
- x 12
23
- width 10
24
- end
25
- Terminal.console.stubs(:print)
26
- end
27
-
28
- describe '#initialize' do
29
- it { return_type_for(described, Cursor) }
30
- it { assigns(described, '@attributes', attributes) }
31
- it { assigns(described, '@name', 'silver') }
32
- it { assigns(described, '@state', :show) }
33
- it { assigns(described, '@x', 19) }
34
- it { assigns(described, '@y', 8) }
35
- end
36
-
37
- describe '#attributes' do
38
- it 'returns a hash containing the attributes of the instance' do
39
- described.attributes.must_equal(
40
- { name: 'silver', state: :show, x: 19, y: 8 }
41
- )
42
- end
43
- end
44
-
45
- describe '#x' do
46
- it { return_type_for(described.x, Fixnum) }
47
-
48
- context 'when the cursors position is outside the interface' do
49
- let(:attributes) { { name: 'silver', state: :show, x: 10, y: 8 } }
50
-
51
- it 'repositions the cursor at the start of the line' do
52
- Cursor.new(attributes).attributes.must_equal(
53
- { name: 'silver', state: :show, x: 12, y: 8 }
54
- )
55
- end
56
- end
57
-
58
- context 'when the cursors position is outside the interface' do
59
- let(:attributes) { { name: 'silver', state: :show, x: 25, y: 8 } }
60
-
61
- it 'repositions the cursor at the end of the line' do
62
- Cursor.new(attributes).attributes.must_equal(
63
- { name: 'silver', state: :show, x: 22, y: 8 }
64
- )
65
- end
66
- end
67
- end
68
-
69
- describe '#y' do
70
- it { return_type_for(described.y, Fixnum) }
71
-
72
- context 'when the cursors position is outside the interface' do
73
- let(:attributes) { { name: 'silver', state: :show, x: 19, y: 3 } }
74
-
75
- it 'repositions the cursor at the start of the line' do
76
- described.attributes.must_equal(
77
- { name: 'silver', state: :show, x: 19, y: 5 }
78
- )
79
- end
80
- end
81
-
82
- context 'when the cursors position is outside the interface' do
83
- let(:attributes) { { name: 'silver', state: :show, x: 19, y: 12 } }
84
-
85
- it 'repositions the cursor at the end of the line' do
86
- described.attributes.must_equal(
87
- { name: 'silver', state: :show, x: 19, y: 9 }
88
- )
89
- end
90
- end
91
- end
92
-
93
- describe '#refresh' do
94
- it 'returns a hash containing the attributes of the instance' do
95
- described.refresh.must_equal(
96
- { name: 'silver', state: :show, x: 19, y: 8 }
97
- )
98
- end
99
- end
100
-
101
- describe '#show' do
102
- it 'sets the state attribute to :show' do
103
- cursor = described
104
- cursor.hide
105
- cursor.attributes.must_equal(
106
- { name: 'silver', state: :hide, x: 19, y: 8 }
107
- )
108
- cursor.show
109
- cursor.attributes.must_equal(
110
- { name: 'silver', state: :show, x: 19, y: 8 }
111
- )
112
- end
113
- end
114
-
115
- describe '#hide' do
116
- it 'sets the state attribute to :hide' do
117
- cursor = described
118
- cursor.hide
119
- cursor.attributes.must_equal(
120
- { name: 'silver', state: :hide, x: 19, y: 8 }
121
- )
122
- cursor.to_s.must_equal("\e[8;19H\e[?25l")
123
- end
124
- end
125
-
126
- describe '#to_s' do
127
- context 'when the cursor state is :show' do
128
- it 'returns an escape sequence for showing the cursor (and position)' do
129
- cursor = described
130
- cursor.show
131
- cursor.to_s.must_equal("\e[8;19H\e[?25h")
132
- end
133
- end
134
-
135
- context 'when the cursor state is :hide' do
136
- it 'returns an escape sequence for hiding the cursor (and position)' do
137
- cursor = described
138
- cursor.hide
139
- cursor.to_s.must_equal("\e[8;19H\e[?25l")
140
- end
141
- end
142
-
143
- it 'returns the escape sequence to position and set the visibility of ' \
144
- 'the cursor' do
145
- described.to_s.must_equal("\e[8;19H\e[?25h")
146
- end
147
-
148
- it 'returns the escape sequence to position and set the visibility of ' \
149
- 'the cursor and returns to that position after yielding the block' do
150
- described.to_s do
151
- # ...
152
- end.must_equal("\e[8;19H\e[?25h\e[8;19H\e[?25h")
153
- end
154
- end
155
-
156
- end # Cursor
157
-
158
- end # Vedeu
@@ -1,53 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Event do
6
-
7
- let(:described) { Event.new(event_name, options, closure) }
8
- let(:event_name) { :some_event }
9
- let(:options) { {} }
10
- let(:closure) { proc { :event_triggered } }
11
-
12
- describe '#initialize' do
13
- it { return_type_for(described, Event) }
14
- it { assigns(described, '@name', :some_event) }
15
- it { assigns(described, '@options', options) }
16
-
17
- it { skip; assigns(described, '@closure', closure) }
18
-
19
- it { assigns(described, '@deadline', 0) }
20
- it { assigns(described, '@executed_at', 0) }
21
- it { assigns(described, '@now', 0) }
22
- end
23
-
24
- describe '#trigger' do
25
- it 'returns the result of calling the closure when debouncing' do
26
- event = Event.new(event_name, { debounce: 0.0025 }, closure)
27
- event.trigger.must_equal(nil)
28
- sleep 0.0015
29
- event.trigger.must_equal(nil)
30
- sleep 0.0015
31
- event.trigger.must_equal(:event_triggered)
32
- sleep 0.0015
33
- event.trigger.must_equal(nil)
34
- end
35
-
36
- it 'returns the result of calling the closure when throttling' do
37
- event = Event.new(event_name, { delay: 0.0025 }, closure)
38
- event.trigger.must_equal(:event_triggered)
39
- sleep 0.0015
40
- event.trigger.must_equal(nil)
41
- sleep 0.0015
42
- event.trigger.must_equal(:event_triggered)
43
- end
44
-
45
- it 'returns the result of calling the closure with its arguments' do
46
- event = Event.new(event_name, options, closure)
47
- event.trigger.must_equal(:event_triggered)
48
- end
49
- end
50
-
51
- end # Event
52
-
53
- end # Vedeu
@@ -1,98 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Group do
6
-
7
- let(:described) { Group.new('organics', *members) }
8
- let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
9
-
10
- describe '#initialize' do
11
- it { return_type_for(described, Group) }
12
- it { assigns(described, '@members', members.to_set) }
13
- it { assigns(described, '@name', 'organics') }
14
- end
15
-
16
- describe '#add' do
17
- it 'returns a Group' do
18
- Group.new('organics', 'carbon', 'nitrogen').add('oxygen').must_be_instance_of(Group)
19
- end
20
-
21
- context 'when the member already exists' do
22
- it 'does not add the member again but returns a new Group' do
23
- group = Group.new('organics', 'nitrogen', 'carbon')
24
- new_group = group.add('nitrogen')
25
- new_group.members.must_equal(['nitrogen', 'carbon'])
26
- end
27
- end
28
-
29
- context 'when the member does not exist' do
30
- it 'adds the member and returns a new Group' do
31
- group = Group.new('organics', 'carbon')
32
- new_group = group.add('nitrogen')
33
- new_group.members.must_equal(['carbon', 'nitrogen'])
34
- end
35
- end
36
- end
37
-
38
- describe '#members' do
39
- it { return_type_for(described.members, Array) }
40
-
41
- context 'when the group has no members' do
42
- it 'returns an empty Set' do
43
- group = Group.new('organics')
44
- group.members.must_be_empty
45
- end
46
- end
47
-
48
- context 'when the group has members' do
49
- it 'returns a set of members' do
50
- group = Group.new('organics', 'nitrogen', 'carbon')
51
- group.members.wont_be_empty
52
- end
53
- end
54
- end
55
-
56
- describe '#name' do
57
- it 'returns the specified name for the group' do
58
- Group.new('organics').name.must_equal('organics')
59
- end
60
- end
61
-
62
- describe '#remove' do
63
- it 'returns a Group' do
64
- group = Group.new('organics')
65
- group.members.must_be_empty
66
- group.remove('nitrogen').must_be_instance_of(Group)
67
- end
68
-
69
- context 'when the member exists' do
70
- it 'removes the member and returns a new Group' do
71
- group = Group.new('organics', 'nitrogen', 'carbon')
72
- new_group = group.remove('nitrogen')
73
- new_group.members.wont_include('nitrogen')
74
- end
75
- end
76
-
77
- context 'when the member does not exist' do
78
- it 'returns a new Group' do
79
- group = Group.new('organics', 'nitrogen', 'carbon')
80
- new_group = group.remove('oxygen')
81
- new_group.members.must_equal(['nitrogen', 'carbon'])
82
- end
83
- end
84
- end
85
-
86
- describe '#reset' do
87
- it { return_type_for(described.reset, Group) }
88
-
89
- it 'returns a Group with no members' do
90
- group = Group.new('organics', 'nitrogen', 'carbon')
91
- new_group = group.reset
92
- new_group.members.must_be_empty
93
- end
94
- end
95
-
96
- end # Group
97
-
98
- end # Vedeu