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
@@ -4,13 +4,18 @@ module Vedeu
4
4
 
5
5
  describe Terminal do
6
6
 
7
+ let(:described) { Vedeu::Terminal }
8
+
7
9
  let(:console) { IO.console }
8
10
 
9
- describe '.open' do
10
- before { IO.console.stubs(:print) }
11
+ before do
12
+ IO.console.stubs(:winsize).returns([25, 80])
13
+ IO.console.stubs(:print)
14
+ end
11
15
 
12
- it 'raises an exception when no block is given' do
13
- proc { Terminal.open }.must_raise(InvalidSyntax)
16
+ describe '.open' do
17
+ context 'when a block was not given' do
18
+ it { proc { Terminal.open }.must_raise(InvalidSyntax) }
14
19
  end
15
20
 
16
21
  it 'opens a new terminal console in raw mode' do
@@ -34,24 +39,66 @@ module Vedeu
34
39
  end
35
40
  end
36
41
 
42
+ describe '.input' do
43
+ context 'when the terminal is in cooked mode' do
44
+ let(:mode) { :cooked }
45
+ let(:input) { "Some input\r\n" }
46
+
47
+ before do
48
+ Terminal.stubs(:mode).returns(mode)
49
+ IO.console.stubs(:gets).returns(input)
50
+ end
51
+
52
+ subject { Terminal.input }
53
+
54
+ it { subject.must_equal('Some input') }
55
+ end
56
+
57
+ context 'when the terminal is in raw mode' do
58
+ let(:mode) { :raw }
59
+ let(:input) { "\e" }
60
+
61
+ before do
62
+ Terminal.stubs(:mode).returns(mode)
63
+ IO.console.stubs(:getch).returns(input)
64
+ input.stubs(:ord).returns(27)
65
+ IO.console.stubs(:read_nonblock)
66
+ end
67
+
68
+ subject { Terminal.input }
69
+
70
+ it { subject.must_be_instance_of(String) }
71
+ end
72
+ end
73
+
37
74
  describe '.output' do
38
- before { IO.console.stubs(:print) }
75
+ subject { described.output(*value) }
76
+
77
+ context 'when the value is a String' do
78
+ let(:value) { 'Some output...' }
39
79
 
40
- it 'returns the output' do
41
- Terminal.output('Some output...').must_equal(['Some output...'])
80
+ it { subject.must_equal(['Some output...']) }
42
81
  end
82
+ context 'when there are multiple values' do
83
+ let(:value) { ['Some output...', 'more output...', 'even more...'] }
43
84
 
44
- it 'returns the output collection' do
45
- Terminal.output('Some output...', 'more output...', 'even more...')
46
- .must_equal(['Some output...', 'more output...', 'even more...'])
85
+ it { subject.must_equal(['Some output...', 'more output...', 'even more...']) }
47
86
  end
48
87
  end
49
88
 
50
- describe '.clear_screen' do
89
+ describe '.resize' do
90
+ before { Vedeu.interfaces.reset }
91
+
92
+ subject { Terminal.resize }
93
+
94
+ it { subject.must_be_instance_of(TrueClass) }
95
+ end
96
+
97
+ describe '.clear' do
98
+ subject { Terminal.clear }
99
+
51
100
  it 'clears the screen' do
52
- console.stub :print, nil do
53
- Terminal.clear_screen.must_equal(["\e[38;2;39m\e[48;2;49m\e[2J"])
54
- end
101
+ subject.must_equal(["\e[38;2;39m\e[48;2;49m\e[2J"])
55
102
  end
56
103
  end
57
104
 
@@ -98,13 +145,11 @@ module Vedeu
98
145
 
99
146
  it 'returns :cooked if previously :raw' do
100
147
  Terminal.raw_mode!
101
-
102
148
  Terminal.switch_mode!.must_equal(:cooked)
103
149
  end
104
150
 
105
151
  it 'returns :raw if previously :cooked' do
106
152
  Terminal.cooked_mode!
107
-
108
153
  Terminal.switch_mode!.must_equal(:raw)
109
154
  end
110
155
  end
@@ -117,61 +162,44 @@ module Vedeu
117
162
 
118
163
  it 'returns the configured terminal mode' do
119
164
  Terminal.mode.must_be_instance_of(Symbol)
120
-
121
165
  Terminal.mode.must_equal(:raw)
122
166
  end
123
167
  end
124
168
 
125
169
  describe '.centre' do
126
170
  it 'returns the centre point on the terminal' do
127
- console.stub :winsize, [25, 80] do
128
- Terminal.centre.must_be_instance_of(Array)
129
-
130
- Terminal.centre.must_equal([12, 40])
131
- end
171
+ Terminal.centre.must_be_instance_of(Array)
172
+ Terminal.centre.must_equal([12, 40])
132
173
  end
133
174
  end
134
175
 
135
176
  describe '.centre_y' do
136
177
  it 'returns the centre `y` point on the terminal' do
137
- console.stub :winsize, [25, 80] do
138
- Terminal.centre_y.must_be_instance_of(Fixnum)
139
-
140
- Terminal.centre_y.must_equal(12)
141
- end
178
+ Terminal.centre_y.must_be_instance_of(Fixnum)
179
+ Terminal.centre_y.must_equal(12)
142
180
  end
143
181
  end
144
182
 
145
183
  describe '.centre_x' do
146
184
  it 'returns the centre `x` point on the terminal' do
147
- console.stub :winsize, [25, 80] do
148
- Terminal.centre_x.must_be_instance_of(Fixnum)
149
-
150
- Terminal.centre_x.must_equal(40)
151
- end
185
+ Terminal.centre_x.must_be_instance_of(Fixnum)
186
+ Terminal.centre_x.must_equal(40)
152
187
  end
153
188
  end
154
189
 
155
190
  describe '.origin' do
156
191
  it 'returns 1' do
157
- console.stub :winsize, [25, 80] do
158
- Terminal.origin.must_be_instance_of(Fixnum)
159
-
160
- Terminal.origin.must_equal(1)
161
- end
192
+ Terminal.origin.must_be_instance_of(Fixnum)
193
+ Terminal.origin.must_equal(1)
162
194
  end
163
195
 
164
196
  context 'alias_methods' do
165
197
  it 'returns 1' do
166
- console.stub :winsize, [25, 80] do
167
- Terminal.x.must_equal(1)
168
- end
198
+ Terminal.x.must_equal(1)
169
199
  end
170
200
 
171
201
  it 'returns 1' do
172
- console.stub :winsize, [25, 80] do
173
- Terminal.y.must_equal(1)
174
- end
202
+ Terminal.y.must_equal(1)
175
203
  end
176
204
  end
177
205
  end
@@ -179,27 +207,20 @@ module Vedeu
179
207
  describe '.width' do
180
208
  context 'via method' do
181
209
  it 'returns the width of the terminal' do
182
- console.stub :winsize, [25, 80] do
183
- Terminal.width.must_be_instance_of(Fixnum)
184
-
185
- Terminal.width.must_equal(80)
186
- end
210
+ Terminal.width.must_be_instance_of(Fixnum)
211
+ Terminal.width.must_equal(80)
187
212
  end
188
213
  end
189
214
 
190
215
  context 'via API' do
191
216
  it 'returns the width of the terminal' do
192
- console.stub :winsize, [24, 40] do
193
- Vedeu.width.must_equal(40)
194
- end
217
+ Vedeu.width.must_equal(80)
195
218
  end
196
219
  end
197
220
 
198
221
  context 'alias_methods' do
199
222
  it 'returns the xn coordinate of the terminal' do
200
- console.stub :winsize, [25, 80] do
201
- Terminal.xn.must_equal(80)
202
- end
223
+ Terminal.xn.must_equal(80)
203
224
  end
204
225
  end
205
226
  end
@@ -207,38 +228,28 @@ module Vedeu
207
228
  describe '.height' do
208
229
  context 'via method' do
209
230
  it 'returns the height of the terminal' do
210
- console.stub :winsize, [25, 80] do
211
- Terminal.height.must_be_instance_of(Fixnum)
212
-
213
- Terminal.height.must_equal(25)
214
- end
231
+ Terminal.height.must_be_instance_of(Fixnum)
232
+ Terminal.height.must_equal(25)
215
233
  end
216
234
  end
217
235
 
218
236
  context 'via API' do
219
237
  it 'returns the height of the terminal' do
220
- console.stub :winsize, [24, 40] do
221
- Vedeu.height.must_equal(24)
222
- end
238
+ Vedeu.height.must_equal(25)
223
239
  end
224
240
  end
225
241
 
226
242
  context 'alias_methods' do
227
243
  it 'returns the yn coordinate of the terminal' do
228
- console.stub :winsize, [25, 80] do
229
- Terminal.yn.must_equal(25)
230
- end
244
+ Terminal.yn.must_equal(25)
231
245
  end
232
246
  end
233
247
  end
234
248
 
235
249
  describe '.size' do
236
250
  it 'returns the width and height of the terminal' do
237
- console.stub :winsize, [25, 80] do
238
- Terminal.size.must_be_instance_of(Array)
239
-
240
- Terminal.size.must_equal([25, 80])
241
- end
251
+ Terminal.size.must_be_instance_of(Array)
252
+ Terminal.size.must_equal([25, 80])
242
253
  end
243
254
  end
244
255
 
@@ -0,0 +1,93 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Text do
6
+
7
+ let(:value) { 'Testing the Text class with various options' }
8
+ let(:options) {
9
+ {
10
+ anchor: anchor,
11
+ pad: pad,
12
+ width: width,
13
+ }
14
+ }
15
+ let(:anchor) { :left }
16
+ let(:pad) { ' ' }
17
+ let(:width) { nil }
18
+
19
+ describe '.with' do
20
+ context 'when a width is provided' do
21
+ context 'when value longer than the width' do
22
+ let(:width) { 23 }
23
+
24
+ it 'returns the value truncated' do
25
+ Text.with(value, options).must_equal('Testing the Text class ')
26
+ end
27
+ end
28
+
29
+ context 'when value is shorter or equal to the width' do
30
+ let(:width) { 48 }
31
+
32
+ context 'and an anchor is not set' do
33
+ it 'returns the value left aligned' do
34
+ Text.with(value, options)
35
+ .must_equal('Testing the Text class with various options ')
36
+ end
37
+ end
38
+
39
+ context 'and the anchor is set to :left' do
40
+ it 'returns the value left aligned' do
41
+ Text.with(value, options)
42
+ .must_equal('Testing the Text class with various options ')
43
+ end
44
+ end
45
+
46
+ context 'and the anchor is set to :align' do
47
+ let(:anchor) { :align }
48
+
49
+ it 'returns the value left aligned' do
50
+ Text.with(value, options)
51
+ .must_equal('Testing the Text class with various options ')
52
+ end
53
+ end
54
+
55
+ context 'and the anchor is set to centre' do
56
+ let(:anchor) { :centre }
57
+
58
+ it 'returns the value centre aligned' do
59
+ Text.with(value, options)
60
+ .must_equal(' Testing the Text class with various options ')
61
+ end
62
+ end
63
+
64
+ context 'and the anchor is set to right' do
65
+ let(:anchor) { :right }
66
+
67
+ it 'returns the value right aligned' do
68
+ Text.with(value, options)
69
+ .must_equal(' Testing the Text class with various options')
70
+ end
71
+ end
72
+
73
+ context 'and the anchor is invalid' do
74
+ let(:anchor) { :invalid }
75
+
76
+ it 'returns the value left aligned' do
77
+ Text.with(value, options)
78
+ .must_equal('Testing the Text class with various options ')
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ context 'when a width is not provided' do
85
+ it 'returns the value as a string' do
86
+ Text.with(:some_value).must_equal('some_value')
87
+ end
88
+ end
89
+ end
90
+
91
+ end # Text
92
+
93
+ end # Vedeu
@@ -4,20 +4,32 @@ module Vedeu
4
4
 
5
5
  describe Trace do
6
6
 
7
- let(:described) { Trace.new(options) }
7
+ let(:described) { Vedeu::Trace }
8
+ let(:instance) { described.new(options) }
8
9
  let(:options) { {} }
9
10
 
10
- describe '.call' do
11
- it { skip }
12
- end
13
-
14
11
  describe '#initialize' do
15
- it { return_type_for(described, Trace) }
16
- it { assigns(described, '@options', options) }
12
+ subject { instance }
13
+
14
+ it { subject.must_be_instance_of(Trace) }
15
+ it { subject.instance_variable_get('@options').must_equal(options) }
17
16
  end
18
17
 
19
- describe '#trace' do
20
- it { skip }
18
+ describe '.call' do
19
+ subject { described.call(options) }
20
+
21
+ context 'when trace is enabled in the configuration' do
22
+ end
23
+
24
+ context 'when trace is disabled in the configuration' do
25
+ context 'and not enabled via the options' do
26
+
27
+ end
28
+ context 'but enabled via the options' do
29
+ let(:options) { { trace: true } }
30
+
31
+ end
32
+ end
21
33
  end
22
34
 
23
35
  end # Trace
@@ -0,0 +1,148 @@
1
+ require 'test_helper'
2
+
3
+ require 'vedeu/support/visible'
4
+
5
+ module Vedeu
6
+
7
+ describe Visible do
8
+
9
+ let(:described) { Vedeu::Visible }
10
+ let(:instance) { described.new(visible) }
11
+ let(:visible) { true }
12
+
13
+ describe '#initialize' do
14
+ subject { instance }
15
+
16
+ it { subject.must_be_instance_of(Visible) }
17
+
18
+ context 'when visible is :hide' do
19
+ let(:visible) { :hide }
20
+
21
+ it { subject.instance_variable_get('@visible').must_equal(false) }
22
+ end
23
+
24
+ context 'when visible is :show' do
25
+ let(:visible) { :show }
26
+
27
+ it { subject.instance_variable_get('@visible').must_equal(true) }
28
+ end
29
+
30
+ context 'when visible is nil' do
31
+ let(:visible) { nil }
32
+
33
+ it { subject.instance_variable_get('@visible').must_equal(false) }
34
+ end
35
+
36
+ context 'when visible is false' do
37
+ let(:visible) { false }
38
+
39
+ it { subject.instance_variable_get('@visible').must_equal(false) }
40
+ end
41
+
42
+ context 'when visible is anything else that evaluates to true' do
43
+ let(:visible) { 'yeah show it!' }
44
+
45
+ it { subject.instance_variable_get('@visible').must_equal(true) }
46
+ end
47
+ end
48
+
49
+ describe '.coerce' do
50
+ subject { described.coerce(value) }
51
+
52
+ context 'when the value is a Visible' do
53
+ let(:value) { described.new }
54
+
55
+ it { subject.must_be_instance_of(Visible) }
56
+ it { subject.visible?.must_equal(false) }
57
+ end
58
+
59
+ context 'when the value is not a Visible' do
60
+ let(:value) { :show }
61
+
62
+ it { subject.must_be_instance_of(Visible) }
63
+ it { subject.visible?.must_equal(true) }
64
+ end
65
+ end
66
+
67
+ describe '#inspect' do
68
+ subject { instance.inspect }
69
+
70
+ it { subject.must_equal('<Vedeu::Visible (true)>') }
71
+ end
72
+
73
+ describe '#cursor' do
74
+ subject { instance.cursor }
75
+
76
+ it { subject.must_be_instance_of(String) }
77
+
78
+ context 'when visible' do
79
+ it { subject.must_equal("\e[?25h") }
80
+ end
81
+
82
+ context 'when not visible' do
83
+ let(:visible) { false }
84
+
85
+ it { subject.must_equal("\e[?25l") }
86
+ end
87
+ end
88
+
89
+ describe '#visible?' do
90
+ subject { instance.visible? }
91
+
92
+ context 'when visible' do
93
+ it { subject.must_be_instance_of(TrueClass) }
94
+ end
95
+
96
+ context 'when not visible' do
97
+ let(:visible) { false }
98
+
99
+ it { subject.must_be_instance_of(FalseClass) }
100
+ end
101
+ end
102
+
103
+ describe '#invisible?' do
104
+ subject { instance.invisible? }
105
+
106
+ context 'when not visible' do
107
+ let(:visible) { false }
108
+
109
+ it { subject.must_be_instance_of(TrueClass) }
110
+ end
111
+
112
+ context 'when visible' do
113
+ it { subject.must_be_instance_of(FalseClass) }
114
+ end
115
+ end
116
+
117
+ describe '#hide' do
118
+ subject { instance.hide }
119
+
120
+ it { subject.must_be_instance_of(Visible) }
121
+ it { subject.visible?.must_equal(false) }
122
+ end
123
+
124
+ describe '#show' do
125
+ subject { instance.show }
126
+ it { subject.must_be_instance_of(Visible) }
127
+ it { subject.visible?.must_equal(true) }
128
+ end
129
+
130
+ describe '#toggle' do
131
+ subject { instance.toggle }
132
+
133
+ it { subject.must_be_instance_of(Visible) }
134
+
135
+ context 'when visible' do
136
+ it { subject.visible?.must_be_instance_of(FalseClass) }
137
+ end
138
+
139
+ context 'when not visible' do
140
+ let(:visible) { false }
141
+
142
+ it { subject.visible?.must_be_instance_of(TrueClass) }
143
+ end
144
+ end
145
+
146
+ end # Visible
147
+
148
+ end # Vedeu
@@ -0,0 +1,136 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Write do
6
+
7
+ let(:described) { Vedeu::Write }
8
+ let(:instance) { described.new(console, data) }
9
+ let(:console) { Vedeu::Console.new(height, width) }
10
+ let(:data) {}
11
+ let(:height) { 3 }
12
+ let(:width) { 40 }
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 '.to' do
23
+ subject { described.to(console, data) }
24
+
25
+ it { subject.must_be_instance_of(Array) }
26
+
27
+ context 'when the data is larger than the visible area' do
28
+ context 'when the data is a String' do
29
+ let(:data) {
30
+ "Zinc, in commerce also spelter, is a chemical\n" \
31
+ "element with symbol Zn and atomic number 30.\n" \
32
+ "It is the first element of group 12 of the\n" \
33
+ "periodic table."
34
+ }
35
+
36
+ it { subject.must_equal(
37
+ [
38
+ "Zinc, in commerce also spelter, is a che",
39
+ "element with symbol Zn and atomic number",
40
+ "It is the first element of group 12 of t"
41
+ ])
42
+ }
43
+ end
44
+
45
+ context 'when the data is an Array' do
46
+ # Zinc...
47
+ # -.Zn.12
48
+ # Spelter
49
+ # ..Metal
50
+ let(:data) {
51
+ [
52
+ [
53
+ Vedeu::Char.new('Z'),Vedeu::Char.new('i'),Vedeu::Char.new('n'),
54
+ Vedeu::Char.new('c'),Vedeu::Char.new('.'),Vedeu::Char.new('.'),
55
+ Vedeu::Char.new('.')
56
+ ],[
57
+ Vedeu::Char.new('-'),Vedeu::Char.new('.'),Vedeu::Char.new('Z'),
58
+ Vedeu::Char.new('n'),Vedeu::Char.new('.'),Vedeu::Char.new('1'),
59
+ Vedeu::Char.new('2')
60
+ ],[
61
+ Vedeu::Char.new('S'),Vedeu::Char.new('p'),Vedeu::Char.new('e'),
62
+ Vedeu::Char.new('l'),Vedeu::Char.new('t'),Vedeu::Char.new('e'),
63
+ Vedeu::Char.new('r')
64
+ ],[
65
+ Vedeu::Char.new('.'),Vedeu::Char.new('.'),Vedeu::Char.new('M'),
66
+ Vedeu::Char.new('e'),Vedeu::Char.new('t'),Vedeu::Char.new('a'),
67
+ Vedeu::Char.new('l')
68
+ ],
69
+ ]
70
+ }
71
+ let(:height) { 3 }
72
+ let(:width) { 5 }
73
+ let(:expected) {
74
+ data[0, height].map { |line| line[0, width] }
75
+ }
76
+
77
+ it { subject.must_equal(expected) }
78
+ end
79
+ end
80
+
81
+ context 'when the data is not larger than the visible area' do
82
+ context 'when the data is a String' do
83
+ let(:data) {
84
+ "Gallium is a chemical element with\n" \
85
+ "symbol Ga and atomic number 31.\n"
86
+ }
87
+
88
+ it { subject.must_equal(
89
+ [
90
+ "Gallium is a chemical element with",
91
+ "symbol Ga and atomic number 31."
92
+ ])
93
+ }
94
+ end
95
+
96
+ context 'when the data is an Array' do
97
+ # Gallium
98
+ # -.Ga.31
99
+ let(:data) {
100
+ [
101
+ [
102
+ Vedeu::Char.new('G'),Vedeu::Char.new('a'),Vedeu::Char.new('l'),
103
+ Vedeu::Char.new('l'),Vedeu::Char.new('i'),Vedeu::Char.new('u'),
104
+ Vedeu::Char.new('m')
105
+ ], [
106
+ Vedeu::Char.new('-'),Vedeu::Char.new('.'),Vedeu::Char.new('G'),
107
+ Vedeu::Char.new('a'),Vedeu::Char.new('.'),Vedeu::Char.new('3'),
108
+ Vedeu::Char.new('1')
109
+ ]
110
+ ]
111
+ }
112
+ let(:height) { 3 }
113
+ let(:width) { 10 }
114
+
115
+ it { subject.must_equal(data) }
116
+ end
117
+ end
118
+
119
+ context 'when there is no data' do
120
+ let(:data) {}
121
+
122
+ it { subject.must_equal([]) }
123
+ end
124
+ end
125
+
126
+ describe '#print' do
127
+ let(:string) {}
128
+
129
+ subject { instance.print(string) }
130
+
131
+ it { subject.must_be_instance_of(Array) }
132
+ end
133
+
134
+ end # Write
135
+
136
+ end # Vedeu
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Traps do
6
+
7
+
8
+
9
+ end # Traps
10
+
11
+ end # Vedeu
@@ -1,5 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe Vedeu do
4
+
4
5
  # ...
6
+
5
7
  end # Vedeu