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,94 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Mapper do
6
+
7
+ let(:described) { Vedeu::Mapper }
8
+ let(:instance) { described.new(key, keymap, repository) }
9
+ let(:key) {}
10
+ let(:keymap) {}
11
+ let(:repository) {}
12
+
13
+ before do
14
+ Vedeu.keymaps.reset
15
+ end
16
+
17
+ describe '#initialize' do
18
+ subject { instance }
19
+
20
+ it { subject.must_be_instance_of(described) }
21
+ it { subject.instance_variable_get('@key').must_equal(key) }
22
+ it { subject.instance_variable_get('@name').must_equal(keymap) }
23
+ it { subject.instance_variable_get('@repository').must_equal(Vedeu.keymaps) }
24
+
25
+ context 'when the repository is provided' do
26
+ let(:repository) { Vedeu::Repository.new }
27
+
28
+ it { subject.instance_variable_get('@repository').must_equal(repository) }
29
+ end
30
+ end
31
+
32
+ describe '.keypress' do
33
+ let(:keymap) { 'test' }
34
+
35
+ subject { described.keypress(key, keymap) }
36
+
37
+ context 'when the key is not provided' do
38
+ it { subject.must_equal(false) }
39
+ end
40
+
41
+ context 'when the key is provided' do
42
+ let(:key) { 'a' }
43
+
44
+ context 'and the key is defined' do
45
+ let(:key_test) { Key.new('a') { :do_something } }
46
+ let(:keymap_test) { Keymap.new('test', [key_test]) }
47
+
48
+ before do
49
+ Vedeu.keymaps.reset
50
+ Vedeu.keymaps.store(keymap_test)
51
+ end
52
+
53
+ it { subject.must_equal(true) }
54
+ end
55
+
56
+ context 'and the key is not defined' do
57
+ it { subject.must_equal(false) }
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '.valid?' do
63
+ let(:keymap) { 'test' }
64
+
65
+ subject { described.valid?(key, keymap) }
66
+
67
+ context 'when the key is not provided' do
68
+ it { subject.must_equal(false) }
69
+ end
70
+
71
+ context 'when the key is provided' do
72
+ let(:key) { 'a' }
73
+
74
+ context 'and the key is defined' do
75
+ let(:key_test) { Key.new('a') { :do_something } }
76
+ let(:keymap_test) { Keymap.new('test', [key_test]) }
77
+
78
+ before do
79
+ Vedeu.keymaps.reset
80
+ Vedeu.keymaps.store(keymap_test)
81
+ end
82
+
83
+ it { subject.must_equal(false) }
84
+ end
85
+
86
+ context 'and the key is not defined' do
87
+ it { subject.must_equal(true) }
88
+ end
89
+ end
90
+ end
91
+
92
+ end # Mapper
93
+
94
+ end # Vedeu
@@ -3,6 +3,7 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
5
  describe Launcher do
6
+
6
7
  let(:described) { Launcher.new }
7
8
 
8
9
  before do
@@ -12,18 +13,14 @@ module Vedeu
12
13
  Kernel.stubs(:puts)
13
14
  end
14
15
 
15
- describe '.execute' do
16
- it { skip }
17
- end
18
-
19
16
  describe '#initialize' do
20
- it { return_type_for(described, Launcher) }
21
- it { assigns(described, '@argv', []) }
22
- it { assigns(described, '@stdin', STDIN) }
23
- it { assigns(described, '@stdout', STDOUT) }
24
- it { assigns(described, '@stderr', STDERR) }
25
- it { assigns(described, '@kernel', Kernel) }
26
- it { assigns(described, '@exit_code', 1) }
17
+ it { described.must_be_instance_of(Launcher) }
18
+ it { described.instance_variable_get('@argv').must_equal([]) }
19
+ it { described.instance_variable_get('@stdin').must_equal(STDIN) }
20
+ it { described.instance_variable_get('@stdout').must_equal(STDOUT) }
21
+ it { described.instance_variable_get('@stderr').must_equal(STDERR) }
22
+ it { described.instance_variable_get('@kernel').must_equal(Kernel) }
23
+ it { described.instance_variable_get('@exit_code').must_equal(1) }
27
24
  end
28
25
 
29
26
  describe '#execute!' do
@@ -31,15 +28,17 @@ module Vedeu
31
28
  Launcher.new.execute!.must_equal(0)
32
29
  end
33
30
 
34
- context 'when execution causes an uncaught exception' do
35
- before { Application.stubs(:start).raises(StandardError) }
36
-
37
- it 'returns 1 for unsuccessful execution' do
38
- skip 'This test is incorrect and fails.'
39
-
40
- Launcher.new.execute!.must_equal(1)
41
- end
42
- end
31
+ # context 'when an exception is raised' do
32
+ # before do
33
+ # Application.stubs(:start).raises(StandardError)
34
+ # end
35
+
36
+ # it 'displays the exception' do
37
+ # capture_io do
38
+ # Launcher.new.execute!
39
+ # end.must_equal(["", ""])
40
+ # end
41
+ # end
43
42
  end
44
43
 
45
44
  end # Launcher
@@ -0,0 +1,114 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module Model
6
+
7
+ describe Collection do
8
+
9
+ let(:described) { Collection }
10
+ let(:instance) { described.new(collection, parent, model_name) }
11
+ let(:collection) { [] }
12
+ let(:model_name) { 'elements' }
13
+ let(:parent) { Vedeu::ModelTestClass.new }
14
+
15
+ describe '#initialize' do
16
+ subject { instance }
17
+
18
+ it { subject.must_be_instance_of(Collection) }
19
+ it { subject.instance_variable_get('@collection').must_equal([]) }
20
+ it { subject.instance_variable_get('@name').must_equal(model_name) }
21
+ it { subject.instance_variable_get('@parent').must_equal(parent) }
22
+ end
23
+
24
+ describe '#[]' do
25
+ let(:collection) { [:hydrogen, :helium, :lithium, :beryllium] }
26
+ let(:value) { 1..2 }
27
+
28
+ subject { instance[value] }
29
+
30
+ it { subject.must_be_instance_of(Array) }
31
+ it { subject.must_equal([:helium, :lithium]) }
32
+ end
33
+
34
+ describe '#add' do
35
+ subject { instance.add(:hydrogen) }
36
+
37
+ it { subject.must_be_instance_of(Collection) }
38
+ it { subject.all.must_equal([:hydrogen]) }
39
+
40
+ context 'with multiple objects' do
41
+ subject { instance.add(:hydrogen, :helium) }
42
+
43
+ it 'adds all the objects to the collection' do
44
+ subject.all.must_equal([:hydrogen, :helium])
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#all' do
50
+ subject { instance.all }
51
+
52
+ it { subject.must_be_instance_of(Array) }
53
+ it { subject.must_equal([]) }
54
+
55
+ context 'when the collection is not empty' do
56
+ before { instance.add(:hydrogen) }
57
+
58
+ it 'returns the populated collection' do
59
+ subject.must_equal([:hydrogen])
60
+ end
61
+ end
62
+ end
63
+
64
+ describe '#empty?' do
65
+ subject { instance.empty? }
66
+
67
+ context 'when the collection is empty' do
68
+ it { subject.must_be_instance_of(TrueClass) }
69
+ end
70
+
71
+ context 'when the collection is not empty' do
72
+ before { instance.add(:hydrogen) }
73
+
74
+ it { subject.must_be_instance_of(FalseClass) }
75
+ end
76
+ end
77
+
78
+ describe '#size' do
79
+ subject { instance.size }
80
+
81
+ it { subject.must_be_instance_of(Fixnum) }
82
+
83
+ context 'when the collection is empty' do
84
+ it { subject.must_equal(0) }
85
+ end
86
+
87
+ context 'when the collection is not empty' do
88
+ before { instance.add(:hydrogen) }
89
+
90
+ it { subject.must_equal(1) }
91
+ end
92
+ end
93
+
94
+ describe '#to_s' do
95
+ subject { instance.to_s }
96
+
97
+ it { subject.must_be_instance_of(String) }
98
+
99
+ context 'when the collection is empty' do
100
+ it { subject.must_equal('') }
101
+ end
102
+
103
+ context 'when the collection is not empty' do
104
+ before { instance.add(:hydrogen) }
105
+
106
+ it { subject.must_equal('hydrogen') }
107
+ end
108
+ end
109
+
110
+ end # Collection
111
+
112
+ end # Model
113
+
114
+ end # Vedeu
@@ -4,8 +4,9 @@ module Vedeu
4
4
 
5
5
  describe Focus do
6
6
 
7
+ let(:described) { Vedeu::Focus }
8
+
7
9
  before { Focus.reset }
8
- after { Focus.reset }
9
10
 
10
11
  describe '#add' do
11
12
  it 'adds an interface to storage' do
@@ -18,6 +19,14 @@ module Vedeu
18
19
  Focus.registered.must_equal(['thallium'])
19
20
  end
20
21
 
22
+ it 'does not add it again if already exists' do
23
+ Focus.add('thallium')
24
+ Focus.add('lead')
25
+ Focus.add('bismuth')
26
+ Focus.add('bismuth', true)
27
+ Focus.registered.must_equal(['bismuth', 'thallium', 'lead'])
28
+ end
29
+
21
30
  it 'adds the interface to storage focussed' do
22
31
  Focus.add('thallium')
23
32
  Focus.add('lead', true)
@@ -42,30 +51,44 @@ module Vedeu
42
51
  it 'raises an exception if the interface does not exist' do
43
52
  proc { Focus.by_name('not_found') }.must_raise(ModelNotFound)
44
53
  end
54
+
55
+ context 'API methods' do
56
+ it 'the named interface is focussed when the method is called' do
57
+ Focus.add('thallium')
58
+ Focus.add('lead')
59
+ Focus.add('bismuth')
60
+ Vedeu.focus_by_name('lead').must_equal('lead')
61
+ end
62
+
63
+ it 'raises an exception if the interface does not exist' do
64
+ proc { Vedeu.focus_by_name('not_found') }.must_raise(ModelNotFound)
65
+ end
66
+ end
45
67
  end
46
68
 
47
69
  describe '#current' do
70
+ subject { described.current }
71
+
48
72
  it 'returns the name of the interface currently in focus' do
49
73
  Focus.add('thallium')
50
74
  Focus.add('lead')
51
75
  Focus.add('bismuth')
52
- Focus.current.must_equal('thallium')
76
+ subject.must_equal('thallium')
53
77
  end
54
78
 
55
- it 'raises an exception if there are no interfaces defined' do
56
- proc { Focus.current }.must_raise(NoInterfacesDefined)
57
- end
58
- end
79
+ context 'when no interfaces are defined' do
80
+ before { Focus.reset }
59
81
 
60
- describe '#cursor' do
61
- before do
62
- Interfaces.add({ name: 'thallium' })
63
- Focus.add('thallium')
82
+ it { subject.must_equal(nil) }
64
83
  end
65
84
 
66
- it 'returns the escape sequence to render the cursor for the focussed ' \
67
- 'interface' do
68
- Focus.cursor.must_equal("\e[1;1H\e[?25l")
85
+ context 'API methods' do
86
+ it 'returns the name of the interface currently in focus' do
87
+ Focus.add('thallium')
88
+ Focus.add('lead')
89
+ Focus.add('bismuth')
90
+ Vedeu.focus.must_equal('thallium')
91
+ end
69
92
  end
70
93
  end
71
94
 
@@ -79,6 +102,16 @@ module Vedeu
79
102
  context 'when the interface is not currently in focus' do
80
103
  it { Focus.current?('bismuth').must_equal(false) }
81
104
  end
105
+
106
+ context 'API methods' do
107
+ context 'when the interface is currently in focus' do
108
+ it { Vedeu.focussed?('lead').must_equal(true) }
109
+ end
110
+
111
+ context 'when the interface is not currently in focus' do
112
+ it { Vedeu.focussed?('bismuth').must_equal(false) }
113
+ end
114
+ end
82
115
  end
83
116
 
84
117
  describe '#next_item' do
@@ -5,6 +5,7 @@ module Vedeu
5
5
  describe Geometry do
6
6
 
7
7
  let(:described) { Geometry.new(attributes) }
8
+ let(:instance) { Geometry.new(attributes) }
8
9
  let(:attributes) { {} }
9
10
 
10
11
  before do
@@ -12,20 +13,40 @@ module Vedeu
12
13
  end
13
14
 
14
15
  describe '#initialize' do
15
- it { return_type_for(described, Geometry) }
16
- it { assigns(described, '@attributes', {
17
- centred: false,
18
- height: 25,
19
- width: 80,
20
- x: 1,
21
- xn: nil,
22
- y: 1,
23
- yn: nil,
24
- })
25
- }
26
- it { assigns(described, '@centred', false) }
27
- it { assigns(described, '@height', 25) }
28
- it { assigns(described, '@width', 80) }
16
+ subject { instance }
17
+
18
+ it { subject.must_be_instance_of(Geometry) }
19
+
20
+ context 'with default attributes' do
21
+ it { subject.instance_variable_get('@attributes').must_equal({
22
+ centred: false,
23
+ height: 25,
24
+ name: '',
25
+ width: 80,
26
+ x: 1,
27
+ xn: 80,
28
+ y: 1,
29
+ yn: 25,
30
+ })
31
+ }
32
+ it { subject.instance_variable_get('@centred').must_equal(false) }
33
+ it { subject.instance_variable_get('@height').must_equal(25) }
34
+ it { subject.instance_variable_get('@name').must_equal('') }
35
+ it { subject.instance_variable_get('@width').must_equal(80) }
36
+ it { subject.instance_variable_get('@x').must_equal(1) }
37
+ it { subject.instance_variable_get('@xn').must_equal(80) }
38
+ it { subject.instance_variable_get('@y').must_equal(1) }
39
+ it { subject.instance_variable_get('@yn').must_equal(25) }
40
+ it { subject.instance_variable_get('@repository').must_equal(Vedeu.geometries) }
41
+ end
42
+ end
43
+
44
+ describe '#inspect' do
45
+ subject { instance.inspect }
46
+
47
+ it { subject.must_equal(
48
+ '<Vedeu::Geometry (height:(25/24) width:(80/79) top:1 bottom:25 left:1 right:80)>'
49
+ ) }
29
50
  end
30
51
 
31
52
  describe '#y' do
@@ -291,31 +312,6 @@ module Vedeu
291
312
  end
292
313
  end
293
314
 
294
- describe '#to_h' do
295
- it 'returns all the values within the instance as a hash' do
296
- geometry = Geometry.new({ height: 6, width: 6, x: 3, y: 3 })
297
- geometry.to_h.must_equal(
298
- {
299
- centred: false,
300
- height: 6,
301
- width: 6,
302
- x: 3,
303
- y: 3,
304
- top: 3,
305
- right: 9,
306
- bottom: 9,
307
- left: 3,
308
- north: 2,
309
- east: 10,
310
- south: 10,
311
- west: 2,
312
- virtual_x: [3, 4, 5, 6, 7, 8],
313
- virtual_y: [3, 4, 5, 6, 7, 8]
314
- }
315
- )
316
- end
317
- end
318
-
319
315
  end # Geometry
320
316
 
321
317
  end # Vedeu
@@ -0,0 +1,100 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Group do
6
+
7
+ let(:described) { Vedeu::Group }
8
+ let(:instance) { described.new(_name, members) }
9
+ let(:_name) { 'organics' }
10
+ let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
11
+
12
+ describe '#initialize' do
13
+ subject { instance }
14
+
15
+ it { subject.must_be_instance_of(Group) }
16
+ it { subject.instance_variable_get('@members').must_equal(members) }
17
+ it { subject.instance_variable_get('@name').must_equal(_name) }
18
+ it { subject.instance_variable_get('@repository').must_equal(Vedeu.groups) }
19
+ end
20
+
21
+ describe '#add' do
22
+ subject { instance.add('hydrogen') }
23
+
24
+ it { subject.must_be_instance_of(Group) }
25
+
26
+ context 'when the member already exists' do
27
+ it 'does not add the member again but returns a new Group' do
28
+ subject.wont_equal(instance)
29
+ end
30
+ end
31
+
32
+ context 'when the member does not exist' do
33
+ it 'adds the member and returns a new Group' do
34
+ subject.wont_equal(instance)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#members' do
40
+ subject { instance.members }
41
+
42
+ it { subject.must_be_instance_of(Set) }
43
+
44
+ context 'when the group has no members' do
45
+ let(:members) { [] }
46
+
47
+ it 'returns an empty Set' do
48
+ subject.must_be_empty
49
+ end
50
+ end
51
+
52
+ context 'when the group has members' do
53
+ it 'returns a set of members' do
54
+ subject.wont_be_empty
55
+ end
56
+ end
57
+ end
58
+
59
+ describe '#name' do
60
+ subject { instance.name }
61
+
62
+ it { subject.must_equal('organics') }
63
+ end
64
+
65
+ describe '#remove' do
66
+ let(:member) { 'hydrogen' }
67
+
68
+ subject { instance.remove(member) }
69
+
70
+ it { subject.must_be_instance_of(described) }
71
+
72
+ context 'when the group is already empty' do
73
+ let(:members) { [] }
74
+
75
+ it { subject.wont_equal(instance) }
76
+ end
77
+
78
+ context 'when the member exists' do
79
+ let(:member) { 'oxygen' }
80
+
81
+ it { subject.wont_equal(instance) }
82
+ it { subject.members.wont_include(member) }
83
+ end
84
+
85
+ context 'when the member does not exist' do
86
+ it { subject.wont_equal(instance) }
87
+ it { subject.members.wont_include(member) }
88
+ end
89
+ end
90
+
91
+ describe '#reset' do
92
+ subject { instance.reset }
93
+
94
+ it { subject.must_be_instance_of(Group) }
95
+ it { subject.members.must_be_empty }
96
+ end
97
+
98
+ end # Group
99
+
100
+ end # Vedeu