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,190 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Coordinate do
6
+
7
+ let(:described) { Vedeu::Coordinate }
8
+ let(:instance) { described.new(height, width, x, y) }
9
+ let(:height) { 6 }
10
+ let(:width) { 6 }
11
+ let(:x) { 7 }
12
+ let(:y) { 5 }
13
+
14
+ describe '#initialize' do
15
+ subject { instance }
16
+
17
+ it { subject.must_be_instance_of(described) }
18
+ it { subject.instance_variable_get('@height').must_equal(height) }
19
+ it { subject.instance_variable_get('@width').must_equal(width) }
20
+ it { subject.instance_variable_get('@x').must_equal(x) }
21
+ it { subject.instance_variable_get('@y').must_equal(y) }
22
+ end
23
+
24
+ describe '#inspect' do
25
+ subject { instance.inspect }
26
+
27
+ it { subject.must_equal(
28
+ '<Vedeu::Coordinate ( height:6 width:6 x:7 xn:13 y:5 yn:11 )>'
29
+ ) }
30
+ end
31
+
32
+ describe '#yn' do
33
+ subject { instance.yn }
34
+
35
+ context 'when the height is <= to 0' do
36
+ let(:height) { 0 }
37
+
38
+ it { subject.must_equal(0) }
39
+ end
40
+
41
+ context 'when the height is > 0' do
42
+ it { subject.must_equal(11) }
43
+ end
44
+ end
45
+
46
+ describe '#xn' do
47
+ subject { instance.xn }
48
+
49
+ context 'when the width is <= to 0' do
50
+ let(:width) { 0 }
51
+
52
+ it { subject.must_equal(0) }
53
+ end
54
+
55
+ context 'when the width is > 0' do
56
+ it { subject.must_equal(13) }
57
+ end
58
+ end
59
+
60
+ describe '#y_index' do
61
+ subject { instance.y_index(position) }
62
+
63
+ context 'when the position is <= 0' do
64
+ let(:position) { -2 }
65
+
66
+ it { subject.must_equal(0) }
67
+ end
68
+
69
+ context 'when the position is <= y' do
70
+ let(:position) { 4 }
71
+
72
+ it { subject.must_equal(0) }
73
+ end
74
+
75
+ context 'when the position is >= yn' do
76
+ let(:position) { 20 }
77
+
78
+ it { subject.must_equal(5) }
79
+ end
80
+
81
+ context 'when the position is > y and < yn' do
82
+ let(:position) { 8 }
83
+
84
+ it { subject.must_equal(3) }
85
+ end
86
+ end
87
+
88
+ describe '#x_index' do
89
+ subject { instance.x_index(position) }
90
+
91
+ context 'when the position is <= 0' do
92
+ let(:position) { -2 }
93
+
94
+ it { subject.must_equal(0) }
95
+ end
96
+
97
+ context 'when the position is <= x' do
98
+ let(:position) { 4 }
99
+
100
+ it { subject.must_equal(0) }
101
+ end
102
+
103
+ context 'when the position is >= xn' do
104
+ let(:position) { 20 }
105
+
106
+ it { subject.must_equal(5) }
107
+ end
108
+
109
+ context 'when the position is > x and < xn' do
110
+ let(:position) { 8 }
111
+
112
+ it { subject.must_equal(1) }
113
+ end
114
+ end
115
+
116
+ describe '#y_position' do
117
+ let(:index) { 0 }
118
+ let(:height) { 6 }
119
+ let(:width) { 6 }
120
+ let(:x) { 7 }
121
+ let(:y) { 5 }
122
+
123
+ subject { instance.y_position(index) }
124
+
125
+ it { subject.must_be_instance_of(Fixnum) }
126
+
127
+ context 'with a negative index' do
128
+ let(:index) { -3 }
129
+
130
+ it { subject.must_equal(5) }
131
+ end
132
+
133
+ context 'with an index greater than the maximum index for y' do
134
+ let(:index) { 9 }
135
+
136
+ it { subject.must_equal(11) }
137
+
138
+ context 'but the height is negative' do
139
+ let(:height) { -2 }
140
+
141
+ it { subject.must_equal(0) }
142
+ end
143
+ end
144
+
145
+ context 'with an index within range' do
146
+ let(:index) { 3 }
147
+
148
+ it { subject.must_equal(8) }
149
+ end
150
+ end
151
+
152
+ describe '#x_position' do
153
+ let(:index) { 0 }
154
+ let(:height) { 6 }
155
+ let(:width) { 6 }
156
+ let(:x) { 7 }
157
+ let(:y) { 5 }
158
+
159
+ subject { instance.x_position(index) }
160
+
161
+ it { subject.must_be_instance_of(Fixnum) }
162
+
163
+ context 'with a negative index' do
164
+ let(:index) { -3 }
165
+
166
+ it { subject.must_equal(7) }
167
+ end
168
+
169
+ context 'with an index greater than the maximum index for x' do
170
+ let(:index) { 9 }
171
+
172
+ it { subject.must_equal(13) }
173
+
174
+ context 'but the width is negative' do
175
+ let(:width) { -2 }
176
+
177
+ it { subject.must_equal(0) }
178
+ end
179
+ end
180
+
181
+ context 'with an index within range' do
182
+ let(:index) { 3 }
183
+
184
+ it { subject.must_equal(10) }
185
+ end
186
+ end
187
+
188
+ end # Coordinate
189
+
190
+ end # Vedeu
@@ -28,6 +28,24 @@ module Vedeu
28
28
  end
29
29
  end
30
30
 
31
+ describe '.escape' do
32
+ let(:stream) { "\e[0m\e[38;2;39m\e[48;2;49m\e[2J\e[?25l" }
33
+
34
+ subject { Esc.escape(stream) }
35
+
36
+ it { subject.must_be_instance_of(String) }
37
+
38
+ it 'escapes the escape sequences' do
39
+ subject.must_equal('\e[0m\e[38;2;39m\e[48;2;49m\e[2J\e[?25l')
40
+ end
41
+
42
+ context 'when a stream is not given' do
43
+ let(:stream) { '' }
44
+
45
+ it { Esc.escape(stream).must_equal('') }
46
+ end
47
+ end
48
+
31
49
  describe '.string' do
32
50
  it 'returns an empty string when the style is not provided' do
33
51
  Esc.string.must_equal('')
@@ -16,25 +16,30 @@ module Vedeu
16
16
 
17
17
  describe Grid do
18
18
 
19
- let(:described) { Grid.new(value) }
19
+ let(:described) { Vedeu::Grid }
20
+ let(:instance) { described.new(value) }
20
21
  let(:value) { 2 }
21
22
 
23
+ before { IO.console.stubs(:winsize).returns([25, 80]) }
24
+
22
25
  describe '#initialize' do
23
- it { return_type_for(described, Grid) }
24
- it { assigns(described, '@value', value) }
26
+ subject { instance }
27
+
28
+ it { subject.must_be_instance_of(Grid) }
29
+ it { subject.instance_variable_get('@value').must_equal(value) }
25
30
  end
26
31
 
27
32
  describe '.columns' do
28
- it 'raises an exception if the value is less than 1' do
29
- proc { Grid.columns(0) }.must_raise(OutOfRange)
33
+ context 'when the value is less than 1' do
34
+ it { proc { Grid.columns(0) }.must_raise(OutOfRange) }
30
35
  end
31
36
 
32
- it 'raises an exception if the value is greater than 12' do
33
- proc { Grid.columns(13) }.must_raise(OutOfRange)
37
+ context 'when the value is greater than 12' do
38
+ it { proc { Grid.columns(13) }.must_raise(OutOfRange) }
34
39
  end
35
40
 
36
- it 'returns the width if the value is in range' do
37
- IO.console.stub :winsize, [25, 80] do
41
+ context 'when the value is in range' do
42
+ it 'returns the value of the column' do
38
43
  Grid.columns(7).must_equal(42)
39
44
  end
40
45
  end
@@ -42,4 +47,4 @@ module Vedeu
42
47
 
43
48
  end # Grid
44
49
 
45
- end # Vedeu
50
+ end # Vedeu
@@ -3,6 +3,9 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
5
  describe Log do
6
+
7
+ # it { skip }
8
+
6
9
  end # Log
7
10
 
8
11
  end # Vedeu
@@ -4,13 +4,21 @@ module Vedeu
4
4
 
5
5
  describe Position do
6
6
 
7
- let(:described) { Position.new(12, 19) }
7
+ let(:described) { Vedeu::Position }
8
+ let(:instance) { described.new(12, 19) }
9
+
8
10
 
9
11
  describe '#initialize' do
10
- it { return_type_for(described, Position) }
12
+ subject { instance }
13
+
14
+ it { subject.must_be_instance_of(Position) }
15
+ it { subject.instance_variable_get('@y').must_equal(12) }
16
+ it { subject.instance_variable_get('@x').must_equal(19) }
11
17
  end
12
18
 
13
19
  describe '#to_s' do
20
+ # subject { described.new.to_s }
21
+
14
22
  it 'returns an escape sequence when no coordinates are provided' do
15
23
  Position.new.to_s.must_equal("\e[1;1H")
16
24
  end
@@ -19,6 +27,18 @@ module Vedeu
19
27
  Position.new(12, 19).to_s.must_equal("\e[12;19H")
20
28
  end
21
29
 
30
+ it 'returns an escape sequence if a coordinate is missing' do
31
+ Position.new(12).to_s.must_equal("\e[12;1H")
32
+ end
33
+
34
+ it 'returns an escape sequence if the x coordinate is negative' do
35
+ Position.new(12, -5).to_s.must_equal("\e[12;1H")
36
+ end
37
+
38
+ it 'returns an escape sequence if the y coordinate is negative' do
39
+ Position.new(-12, 5).to_s.must_equal("\e[1;5H")
40
+ end
41
+
22
42
  it 'resets to starting position when a block is given' do
23
43
  Position.new(4, 9).to_s { 'test' }.must_equal("\e[4;9Htest\e[4;9H")
24
44
  end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe PositionValidator do
6
+
7
+
8
+
9
+ end # PositionValidator
10
+
11
+ end # Vedeu
@@ -0,0 +1,88 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Read do
6
+
7
+ let(:described) { Vedeu::Read }
8
+ let(:instance) { described.new(console, data) }
9
+ let(:console) { Vedeu::Console.new(height, width) }
10
+ let(:data) {}
11
+ let(:height) { 4 }
12
+ let(:width) { 30 }
13
+
14
+ describe '#initialize' do
15
+ subject { instance }
16
+
17
+ it { subject.must_be_instance_of(described) }
18
+ it { subject.instance_variable_get('@console').must_equal(console) }
19
+ it { subject.instance_variable_get('@data').must_equal(data) }
20
+ end
21
+
22
+ describe '.from' do
23
+ subject { described.from(console, data) }
24
+
25
+ it { subject.must_be_instance_of(String) }
26
+
27
+ context 'when no data is given' do
28
+ it { subject.must_equal('') }
29
+ end
30
+
31
+ context 'when data is given' do
32
+ let(:data) { 'a' }
33
+
34
+ it { subject.must_equal('a') }
35
+ end
36
+ end
37
+
38
+ describe '#getch' do
39
+ let(:string) {}
40
+
41
+ subject { instance.getch(string) }
42
+
43
+ it { subject.must_be_instance_of(String) }
44
+
45
+ context 'when no string is given' do
46
+ it { subject.must_equal('') }
47
+ end
48
+
49
+ context 'when a multi-character string is given' do
50
+ let(:string) { 'Some text...' }
51
+
52
+ it { subject.must_equal('S') }
53
+ end
54
+
55
+ context 'when a single character string is given' do
56
+ let(:string) { 'a' }
57
+
58
+ it { subject.must_equal('a') }
59
+ end
60
+ end
61
+
62
+ describe '#gets' do
63
+ let(:string) {}
64
+
65
+ subject { instance.gets(string) }
66
+
67
+ it { subject.must_be_instance_of(String) }
68
+
69
+ context 'when no string is given' do
70
+ it { subject.must_equal('') }
71
+ end
72
+
73
+ context 'when a string with line feed is given' do
74
+ let(:string) { "Some text...\n" }
75
+
76
+ it { subject.must_equal('Some text...') }
77
+ end
78
+
79
+ context 'when a string without line feed is given' do
80
+ let(:string) { 'Some text...' }
81
+
82
+ it { subject.must_equal('Some text...') }
83
+ end
84
+ end
85
+
86
+ end # Read
87
+
88
+ end # Vedeu
@@ -4,34 +4,66 @@ module Vedeu
4
4
 
5
5
  describe Refresh do
6
6
 
7
- before { Interfaces.reset }
7
+ let(:described) { Vedeu::Refresh }
8
+
9
+ before { Vedeu.interfaces.reset }
8
10
 
9
11
  describe '.all' do
10
- it 'returns an empty collection when there are no registered ' \
11
- 'interfaces' do
12
- Refresh.all.must_equal([])
12
+ subject { described.all }
13
+
14
+ it { subject.must_be_instance_of(Array) }
15
+
16
+ context 'when there are no registered interfaces' do
17
+ it { subject.must_equal([]) }
13
18
  end
19
+
20
+ # context 'when there are registered interfaces' do
21
+ # it { subject, ['hydrogen'.must_equal('helium']) }
22
+ # end
14
23
  end
15
24
 
16
25
  describe '.by_focus' do
17
- it 'raises an exception when there are no registered interfaces' do
18
- Focus.reset
26
+ subject { described.by_focus }
27
+
28
+ context 'when there are no registered interfaces' do
29
+ before { Vedeu.focusable.reset }
30
+
31
+ it { Refresh.by_focus.must_equal(nil) }
32
+ end
33
+
34
+ context 'when there are registered interfaces' do
35
+ # before { Vedeu.focusable.add('lead') }
19
36
 
20
- proc { Refresh.by_focus }.must_raise(NoInterfacesDefined)
37
+ # it { subject.must_equal('lead') }
21
38
  end
22
39
  end
23
40
 
24
41
  describe '.by_group' do
25
- it 'raises an exception when the group cannot be found' do
26
- Groups.reset
42
+ context 'when there are no registered groups' do
43
+ before { Vedeu.groups.reset }
27
44
 
28
- proc { Refresh.by_group('') }.must_raise(ModelNotFound)
45
+ it { proc { Refresh.by_group('') }.must_raise(ModelNotFound) }
46
+ end
47
+
48
+ context 'when there are registered groups' do
29
49
  end
30
50
  end
31
51
 
32
52
  describe '.by_name' do
33
- it 'raises an exception when the buffer cannot be found' do
34
- proc { Refresh.by_name('') }.must_raise(ModelNotFound)
53
+ let(:interface_name) { 'aluminium' }
54
+
55
+ subject { Refresh.by_name(interface_name) }
56
+
57
+ context 'when the interface or buffer is not found' do
58
+ let(:interface_name) { '' }
59
+
60
+ it { proc { Refresh.by_name('') }.must_raise(ModelNotFound) }
61
+ end
62
+
63
+ context 'when the interface or buffer is found' do
64
+ # it { subject.must_be_instance_of(Array) }
65
+
66
+ # it { skip }
35
67
  end
36
68
  end
37
69
 
@@ -4,14 +4,16 @@ module Vedeu
4
4
 
5
5
  describe Sentence do
6
6
 
7
- let(:described) { Sentence.new(elements, label) }
7
+ let(:described) { Vedeu::Sentence }
8
+ let(:instance) { described.new(elements, label) }
8
9
  let(:elements) { ['Hydrogen'] }
9
10
  let(:label) { 'elements' }
10
11
 
11
12
  describe '#initialize' do
12
- it { return_type_for(described, Sentence) }
13
- it { assigns(described, '@elements', elements) }
14
- it { assigns(described, '@label', label) }
13
+ subject { instance }
14
+ it { subject.must_be_instance_of(Sentence) }
15
+ it { subject.instance_variable_get('@elements').must_equal(elements) }
16
+ it { subject.instance_variable_get('@label').must_equal(label) }
15
17
  end
16
18
 
17
19
  describe '.construct' do